JS实现网站菜单拖拽移位效果的方法


Posted in Javascript onSeptember 24, 2015

本文实例讲述了JS实现网站菜单拖拽移位效果的方法。分享给大家供大家参考。具体如下:

这是一个基于JavaScript的层手动实例,让网站的菜单可以拖拽移位,记得土豆网的“豆单”有这种功能。本效果还尚未彻底完成,部分地方因没有写入对应内容,因此JS可能会提示有错误。

运行效果截图如下:

JS实现网站菜单拖拽移位效果的方法

在线演示地址如下:

具体代码如下:

<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>层拖动</title>
<style type="text/css">
*{ margin:0; padding:0}
li{ list-style:none}
.wapper{ width:500px; margin:50px;height:auto; overflow:hidden; position:relative; border:1px #e6e6e6 solid}
.wapper ol{ position:absolute;top:0; left:0}
.wapper li{width:30px; height:32px; line-height:32px; padding:3px 0; text-align:center;}
.wapper .m-li{ padding:3px 3px 3px 30px;height:32px;position:relative}
.wapper .m-li div,.wapper .m-li-cur div{ line-height:30px; height:30px;background:#ECF3F9; border:1px #ccc solid; padding:0 0 0 16px;color:#316DA9; font-size:14px;cursor:move;}
.wapper .m-li .m-sub-cur,.wapper .m-li-cur .m-sub-cur{opacity:0.35;filter:Alpha(opacity=35);}
.wapper .m-li-cur{ padding:0 3px 3px 30px; border-top:3px #FFDAAD solid}
.wapper .m-li-cur span{ padding:0 0 3px;}
#tips{ position:absolute; top:0;left:0;cursor:move; z-index:2;display:none}
#tips div{background:#FDFFDA;line-height:30px; height:30px;border:1px #ccc solid; padding:0 0 0 16px;color:#316DA9; font-size:14px;}
</style>
</head>
<body>
<div class="wapper" id="box">
<div class="m-wapper">
<div class="m-li"><div class="m-sub">ASP源码</div></div>
<div class="m-li"><div class="m-sub">PHP源码</div></div>
<div class="m-li"><div class="m-sub">JSP源码</div></div>
<div class="m-li"><div class="m-sub">JAVA源码</div></div>
</div>
<ol id="m-num"></ol>
<div id="tips"></div>
</div>
<script type="text/javascript">
document.getElementsByClassName=function(eleClassName){
 var getEleClass = [];
 var myclass = new RegExp("\\b"+eleClassName+"\\b");
 var elem = this.getElementsByTagName("*");
 for(var h=0;h<elem.length;h++){
  var classes = elem[h].className;
  if (myclass.test(classes)) getEleClass.push(elem[h]);
 }
 return getEleClass;
}
function $(o){
 var t = document.getElementById(o);
 return t?t:false;
}
function hasClass(ele,cls) {
 return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
 if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
 if (hasClass(ele,cls)) {
   var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
 ele.className=ele.className.replace(reg,' ');
 }
}
function getStyle(o,n){
 return o.currentStyle?o.currentStyle[n]:(document.defaultView.getComputedStyle(o,"").getPropertyValue(n))
}
function f(){
 var d=document;
 var mNum = document.getElementById("m-num");
 var ols = document.getElementsByClassName("m-wapper")[0];
 var lis = document.getElementsByClassName("m-li");
 var divs = document.getElementsByClassName("m-sub");
 var tips = document.getElementById("tips");
 for(var i=0;i<divs.length;i++){
  var mnumNode=document.createElement("li");
  mNum.appendChild(mnumNode);
  mNum.getElementsByTagName("li")[i].innerHTML=i+1;
  divs[i].onmouseover=function(e){
   show(this);
  }
 }
 function show(obj){
  for(var i=0;i<divs.length;i++){
   if(divs[i]==obj){
    var voidNum=i;
    obj.onmousedown=function(e){
     var cloneNode=obj.cloneNode(true);/*克隆节点*/
     tips.appendChild(cloneNode);
     //alert(i)
     tips.style.width=obj.offsetWidth+"px";
     tips.style.display="block";
     //alert(voidNum);
     tips.style.top=(38*voidNum)+3+"px";
     tips.style.left="30px"
     for(var j=0;j<divs.length;j++){ /*恢复行默认样式*/
      divs[j].className="m-sub";
     }
     obj.className="m-sub-cur"; /*选中行添加新样式*/
     tips.onmouseover=function(e){
      window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();//清除选择
      e=e||event;  /*鼠标定位*/
      var x=e.clientY-tips.offsetTop;
      //var y=e.clientX-obj.offsetLeft;
      d.onmousemove=function(e){
       e=e||event;
       var tipsTop = e.clientY-x;
       tips.style.top=tipsTop+"px";
       if(tipsTop <= 3){
        tips.style.top="3px";
       }
       if(tipsTop >= (38*(i-1)+3)){
        tips.style.top=38*(i-1)+3+"px";
       }
       lisNum = Math.round((tipsTop-3)/38);
       if(lisNum>=i){
         lisNum=i;
        }
       for(var n=0; n<divs.length; n++){
        lis[n]["className"]="m-li";
        lis[lisNum]["className"]="m-li-cur";
       }
       //obj.style.left=e.clientX-y+"px";
      }
      d.onmouseup = function(){ 
       d.onmouseup=d.onmousemove="";
       tips.style.display="none";
       for(var n=0; n<lis.length; n++){
        lis[n]["className"]="m-li";
       }
       obj.className="m-sub";
       var newNode=document.createElement("div");
       var delNode=tips.getElementsByTagName("div")[0];/*清空节点*/
       var delNode2=lis[voidNum];/*清空节点*/
       newNode.appendChild(delNode);
       newNode.className="m-li";
       ols.insertBefore(newNode,lis[lisNum]);
       ols.removeChild(delNode2);
       tips.removeChild(delNode);
      }
     }
    }
   }
  }
 }
}
f();
</script>
</body>
</html>

希望本文所述对大家的JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript学习基础笔记之DOM对象操作
Nov 03 Javascript
js实现一个省市区三级联动选择框代码分享
Mar 06 Javascript
鼠标滚轮控制网页横向移动实现思路
Mar 22 Javascript
Javascript中的五种数据类型详解
Dec 26 Javascript
AngularJS 路由详解和简单实例
Jul 28 Javascript
使用JS代码实现点击按钮下载文件
Nov 12 Javascript
利用原生的JavaScript实现简单拼图游戏
Nov 18 Javascript
vue使用代理解决请求跨域问题详解
Jul 24 Javascript
微信小程序实现图片翻转效果的实例代码
Sep 20 Javascript
Vue实现手机扫描二维码预览页面效果
May 28 Javascript
微信小程序实现拨打电话功能的示例代码
Jun 28 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
Aug 31 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
Sep 24 #Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 #Javascript
直接拿来用的15个jQuery代码片段
Sep 23 #Javascript
JS实现漂亮的淡蓝色滑动门效果代码
Sep 23 #Javascript
jQuery Validate验证框架经典大全
Sep 23 #Javascript
Javascript实现的简单右键菜单类
Sep 23 #Javascript
js实现无限级树形导航列表效果代码
Sep 23 #Javascript
You might like
PHP If Else(elsefi) 语句
2013/04/07 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
php json转换相关知识(小结)
2018/12/21 PHP
jquery 插件开发备注
2010/08/27 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
从零学Python之hello world
2014/05/21 Python
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
一道SQL存储过程面试题
2016/10/07 面试题
毕业生医学检验求职信
2013/10/16 职场文书
大四毕业生学习总结的自我评价
2013/10/31 职场文书
商业街策划方案
2014/05/31 职场文书
2014年变电站工作总结
2014/12/19 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python
浅析MongoDB之安全认证
2021/06/26 MongoDB
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android