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 相关文章推荐
PNG背景在不同浏览器下的应用
Jun 22 Javascript
JSON 客户端和服务器端的格式转换
Aug 27 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
Mar 23 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
Jan 04 Javascript
ajax实现动态下拉框示例
Jan 10 Javascript
jQuery表格的维护和删除操作
Feb 03 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
Feb 15 Javascript
Angular自定义组件实现数据双向数据绑定的实例
Dec 11 Javascript
nginx部署访问vue-cli搭建的项目的方法
Feb 12 Javascript
Vue props 单向数据流的实现
Nov 06 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
Aug 12 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 购物车的例子
2009/05/04 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
js null,undefined,字符串小结
2010/08/21 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
JavaScript的==运算详解
2016/07/20 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
d3.js实现图形缩放平移
2019/12/19 Javascript
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
Python2随机数列生成器简单实例
2017/09/04 Python
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
Python如何实现邮件功能
2020/05/27 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
医生实习工作总结的自我评价
2013/09/27 职场文书
计算机大学生的自我评价
2013/10/15 职场文书
网络编辑求职信
2014/04/30 职场文书
学校政风行风整改方案
2014/10/25 职场文书
计算机专业自荐信
2015/03/05 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers