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 相关文章推荐
Js冒泡事件详解及阻止示例
Mar 21 Javascript
JQuery中使用ajax传输超大数据的解决方法
Jul 14 Javascript
node.js中的http.response.write方法使用说明
Dec 14 Javascript
JavaScript修改作用域外变量的方法
Mar 25 Javascript
Vue数据驱动模拟实现1
Jan 11 Javascript
Angularjs为ng-click事件传递参数
Jun 15 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
Jul 18 Javascript
详解从买域名到使用pm2部署node.js项目全过程
Mar 07 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
May 29 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
JavaScript 闭包的使用场景
Sep 17 Javascript
ES6中的Javascript解构的实现
Oct 30 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中for循环语句的几种变型
2007/03/16 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
javascript获取select值的方法分析
2015/07/02 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
react中使用swiper的具体方法
2018/05/15 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
Python import与from import使用及区别介绍
2018/09/06 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
python中random模块详解
2021/03/01 Python
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
总经理秘书工作职责
2013/12/26 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
搞笑婚前保证书
2015/02/28 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS