<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<title>拖拽排序可保存代码</title></head>
<style>
/*先给导航写个样式,主要图演示起来好看*/
.ui-layout-north{background:#601685;width:100%;height:79px;overflow:hidden;}
.ui-layout-north .logo{overflow:hidden;_zoom:1;_float:left;height:79px;padding:10px 0 0 159px;color:#FFF;}
.ui-layout-north .logo dl{margin:15px 0 0 0;}
.ui-layout-north .logo dl dt{background-color:#CCCCCC;float:left;margin:0 2px 0 0;width:80px;height:32px;line-height:32px;text-align:center;color:#7B7A7A;cursor:pointer;}
.ui-layout-north .logo dl dt:hover{background:#ff6700;color:#fff;font-weight:bold;}
/*导航样式结束*/
/*下面是拖拽时的样式效果*/
.list .moving{
background: transparent;
color: transparent;
border: 1px dashed #00ff00;
}
</style>
<body>
<div class="ui-layout-north">
<div class="logo">
<dl id="menu" class="list">
<dt onClick="" style="background:#ff6700;color:#fff;font-weight:bold;">固定导航</dt>
<dt onClick="" draggable="true">导航一</dt>
<dt onClick="" draggable="true">导航二</dt>
<dt onClick="" draggable="true">导航三</dt>
<dt onClick="" draggable="true">导航四</dt>
</dl>
<dt id="huanyuan" style="display:none;position:absolute;left:20px;top:35px;" onClick="top_px('')">还原排序</dt>
</div>
</div>
<div id="menu2" class="list"></div>
<script type="text/javascript">
//判断一下cookie有没有
var arr = document.cookie.match(new RegExp("(^| )top_px=([^;]*)(;|$)"));//获取名字为top_px的cookie的值
if(arr[2] !== null&&arr[2].length>10){//这里加了双判断,length的值为了更可靠,也可以设置为精准的等于你的cookie字数
document.getElementById("menu").innerHTML = unescape(arr[2]);//如果cookie存在,就直接将cookie的值写入导航,unescape为解密代码,这一步是记忆拖拽后导航的关键
document.getElementById("huanyuan").style.display = "block";//显示出还原按钮
}
</script>
<script type="text/javascript">
function top_px(px){
//为浏览器写入cookie,如果你要把拖拽后的排序保存到数据库,这里的代码改成提交到后台存储就行,我这里就不再举例,可以百度搜js提交等关键词
var Days = 30*12; //cookie 将被保存一年
var exp = new Date(); //获得当前时间
exp.setTime(exp.getTime() + Days*24*60*60*1000); //换成毫秒
document.cookie = "top_px" + "="+ escape(px) + ";expires=" + exp.toGMTString();//escape为编码代码,对应上面的解密
if(px==""){//这个地方是为还原排序写的,如果是还原按钮过来的,就刷新一下页面
location.reload();
}else{//如果不是还原按钮过来的,就把还原按钮显示出来
document.getElementById("huanyuan").style.display = "block"
}
}
</script>
<script>
let list = document.querySelector('.list')
let currentLi//记忆拖拽元素
//我们用事件委托,监听 "dragstart" 事件,给拖动的元素添加类名,修改样式,这里会出现奇怪的一幕就是,拖动的样式和原来的样式同时变成了透明,这是因为跟随鼠标拖动的元素的样式在拖动的那一刻是原始元素的样式,所以也会添加"moving", 那么在这里我们加一个异步
list.addEventListener('dragstart',(e)=>{
e.dataTransfer.effectAllowed = 'move'//拖动样式改为move
currentLi = e.target
setTimeout(()=>{
currentLi.classList.add('moving')
})
})
//接下来我们需要在拖动的过程中对列表的元素进行重新的排序。Node.insertBefore(): 方法在参考节点之前插入一个拥有指定父节点的子节点
list.addEventListener('dragenter',(e)=>{
e.preventDefault()//阻止默认事件
if(e.target === currentLi||e.target === list){//当移动到当前拖动元素,或者父元素上面不做操作
return
}
let liArray = Array.from(list.childNodes)
let currentIndex = liArray.indexOf(currentLi)//获取到拖动元素的下标
let targetindex = liArray.indexOf(e.target)//获取到目标元素的下标
if(currentIndex<targetindex){
list.insertBefore(currentLi,e.target.nextElementSibling)
}else{
list.insertBefore(currentLi,e.target)
}
})
//最后我们需要在拖拽结束将元素的moving类名移除,以及阻止拖拽到一个目标上的默认事件(否则会出现禁止)
list.addEventListener('dragover',(e)=>{
e.preventDefault()
})
list.addEventListener('dragend',(e)=>{
currentLi.classList.remove('moving');
top_px(document.getElementById("menu").innerHTML);//去执行保存拖动数据
})
</script>
</body>
</html>
ccmap
- 粉丝: 33
- 资源: 7
最新资源
- 2024智算中心基础设施演进白皮书.pdf
- 2024中国企业数字化转型案例研究报告.pdf
- hello的一生-2024哈工大计算机系统大作业
- GBT 18488-2024 电动汽车用驱动电机系统.pdf
- 基于逻辑回归(logistic)的多输入单输出预测模型,可以多个自变量输入,单个因变量输出,可以出真实值和预测值对比拟合图以及线性拟合预测图,预测误差图,同时可以打印多个评价指标,不会替数据的可以指导
- 基于Spring Boot + Vue3实现的在线汽车保养维修预约管理系统(包含源码+接口文档+数据库设计文档)
- 工商银行大数据平台助力全行数字化转型之路.pdf
- gatway-es8.yml
- 工业数字孪生建模与应用-579页.pdf
- 华为数据中台助力银行数字化转型.pdf
- 基于华为IPD与质量管理体系融合的研发质量管理(2024版).pdf
- ANPC(有源中点钳位NPC)-VSG(非线性负载),基于A型有源三电平逆变器的非线性负载下同步发电机控制,中点电位平衡控制,电压电流双闭环控制,基波提取算法 1.VSG,非线性负载 2.电压电流双
- 数据治理与大数据平台解决方案.pdf
- 数据中台标准技术体系方案 .pdf
- 腾讯云原生数据湖存储的架构发展和数据治理.pdf
- 云原生安全能力指南(2024).pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈