JS实现可展开折叠层的鼠标拖曳效果


Posted in Javascript onOctober 09, 2015

本文实例讲述了JS实现可展开折叠层的鼠标拖曳效果。分享给大家供大家参考。具体如下:

这是一款简单JS代码实现的鼠标拖曳图层效果,比较精简,大家参考一下。鼠标点击层标题栏可实现层内容的展开与折叠,按住标题栏可实现层的拖动。

运行效果截图如下:

JS实现可展开折叠层的鼠标拖曳效果

在线演示地址如下:

具体代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
 <title>鼠标拖曳</title>
 </head>
 <body>
 <script type="text/javascript">
 function drag(elementToDrag,event){
  var startX=event.clientX,startY=event.clientY;
  var origX=elementToDrag.offsetLeft,origY=elementToDrag.offsetTop;
  var deltaX=startX-origX,deltaY=startY-origY;
  if(document.addEventListener){
    document.addEventListener("mousemove",moveHandler,true); 
  document.addEventListener("mouseup",upHandler,true);
 }
 else{
  elementToDrag.setCapture();
  elementToDrag.attachEvent("onmousemove",moveHandler);
  elementToDrag.attachEvent("onmouseup",upHandler);
  elementToDrag.attachEvent("onlosecapture",upHandler);
 }
 if(event.stopPropagation) event.stopPropagation();
 else event.cancelBubble=true;
 if(event.preventDefault) event.preventDefault();
 else event.returnValue=false;
 function moveHandler(e){
  if(!e) e=window.event;
  elementToDrag.style.left=(e.clientX-deltaX)+"px";
  elementToDrag.style.top=(e.clientY-deltaY)+"px";
  elementToDrag.style.zIndex="10";
  elementToDrag.getElementsByTagName("p")[0].innerHTML="clientX:"+e.clientX+"</br>"+"clientY:"+e.clientY+"</br>"+"offsetLeft:"+origX+"</br>"+"offsetTop:"+origY+"</br>"+"clientX-offsetLeft:"+deltaX+"</br>"+"clientY-offsetTop:"+deltaY+"</br>";
  if(e.stopPropagation) e.stopPropagation();
  else e.cancelBubble = true;
 }
 function upHandler(e){
  if(!e) e=window.event;
   elementToDrag.style.zIndex="1";
  if(document.removeEventListener){
   document.removeEventListener("mouseup",upHandler,true);
  document.removeEventListener("mousemove",moveHandler,true);
  }
  else{
   elementToDrag.detachEvent("onlosecapture",upHandler);
  elementToDrag.detachEvent("onmouseup",upHandler);
  elementToDrag.detachEvent("onmousemove",moveHandler);
  elementToDrag.releaseCapture();
  }
  if(e.stopPropagation) e.stopPropagation();
  else e.cancelBubble=true;
 }
 }
 </script>
 <div style="position:absolute;left:100px;top:100px;width:250px;background-color:#789;border:1px solid #f00">
  <div style="background:#ccc;border-bottom:dotted black;padding:3px;font-weight:bold" onmousedown="drag(this.parentNode,event)">Drag Me1</div>
 <p>test</p>
 </div>
  <div style="position:absolute;left:100px;top:200px;width:250px;background-color:#789;border:1px solid #f00">
  <div style="background:#ccc;border-bottom:dotted black;padding:3px;font-weight:bold" onmousedown="drag(this.parentNode,event)">Drag Me2</div>
 <p>test</p>
 </div>
  <div style="position:absolute;left:100px;top:300px;width:250px;background-color:#789;border:1px solid #f00">
  <div style="background:#ccc;border-bottom:dotted black;padding:3px;font-weight:bold" onmousedown="drag(this.parentNode,event)">Drag Me3</div>
 <p>test</p>
 </div>
 </body>
</html>

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

Javascript 相关文章推荐
jquery $(this).attr $(this).val方法使用介绍
Oct 08 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
jQuery中 prop() attr()使用详解
May 19 Javascript
JavaScript保存并运算页面中数字类型变量的写法
Jul 06 Javascript
js检测用户输入密码强度
Oct 22 Javascript
基于Bootstrap实现tab标签切换效果
Apr 15 Javascript
JS 实现可停顿的垂直滚动实例代码
Nov 23 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
Jun 28 Javascript
js的函数的按值传递参数(实例讲解)
Nov 16 Javascript
JS实现520 表白简单代码
May 21 Javascript
Vue 中如何正确引入第三方模块的方法步骤
May 05 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
May 06 Javascript
JavaScript实现横向滑出的多级菜单效果
Oct 09 #Javascript
JS实现样式清新的横排下拉菜单效果
Oct 09 #Javascript
jQuery表格行上移下移和置顶的实现方法
Oct 08 #Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
Oct 08 #Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
Oct 08 #Javascript
js小数运算出现多位小数如何解决
Oct 08 #Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
Oct 08 #Javascript
You might like
玩转图像函数库―常见图形操作
2006/09/03 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
页面使用密码保护代码
2013/04/10 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
js实现放大镜特效
2017/05/18 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
Python3基础之list列表实例解析
2014/08/13 Python
Python异常处理总结
2014/08/15 Python
Python中的各种装饰器详解
2015/04/11 Python
Python全局变量用法实例分析
2016/07/19 Python
Python获取CPU、内存使用率以及网络使用状态代码
2018/02/08 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
virtualenv介绍及简明教程
2020/06/23 Python
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
《母鸡》教学反思
2014/02/25 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
公司感谢信范文
2015/01/22 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
晚会开幕词范文
2016/03/04 职场文书
Go语言安装并操作redis的go-redis库
2022/04/14 Golang
微信小程序调用python模型
2022/04/21 Python
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS