<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>
没有合适的资源?快使用搜索试试~ 我知道了~
原生js实现拖拽排序并记忆并保存,可应用于网站导航菜单等 完整demo代码,教科书级注释丰富,简单易懂
共1个文件
html:1个
需积分: 5 0 下载量 150 浏览量
2023-12-29
16:44:10
上传
评论
收藏 3KB ZIP 举报
温馨提示
资源为单文件html格式,代码精简易懂。demo里面只演示了保存拖拽后排序到cookie,预留了接口,可自行js提交保存到数据库,兼容asp、php等全格式。 下载后不要直接双击打开,要传到空间或者在本机搭建web服务,因为cookie直接双击打开是不能运行的。 这段代码写出来简单,但是写的过程真心费脑,搞了三四天,起因是自己客户的网站要实现这个,既然辛苦写出来了,并且感觉相当不错,就分享给需要的人。水平有限也可能存有不足,还望不要耻笑,给予指导
资源推荐
资源详情
资源评论
收起资源包目录
拖拽导航.zip (1个子文件)
拖拽导航.html 5KB
共 1 条
- 1
资源评论
ccmap
- 粉丝: 33
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功