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判断checkbox(复选框)是否被选中的代码
Oct 20 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
Sep 01 Javascript
JavaScript中的style.cssText使用教程
Nov 06 Javascript
Bootstrap每天必学之日期控制
Mar 07 Javascript
Node.js中防止错误导致的进程阻塞的方法
Aug 11 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
Jan 08 Javascript
基于Angular.js实现的触摸滑动动画实例代码
Feb 19 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
js实现会跳动的日历效果(完整实例)
Oct 18 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
Nov 02 Javascript
关于Javascript闭包与应用的详解
Apr 22 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
php 发送带附件邮件示例
2014/01/23 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
Selenium chrome配置代理Python版的方法
2018/11/29 Python
numpy基础教程之np.linalg
2019/02/12 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python实现飞船大战
2020/04/24 Python
浅析Python requests 模块
2020/10/09 Python
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
园林毕业生自我鉴定范文
2013/12/29 职场文书
低碳环保演讲稿
2014/08/28 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
党员转正党支部意见
2015/06/02 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书