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 相关文章推荐
javascript 获取图片颜色
Apr 05 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
May 19 Javascript
js 分页全选或反选标识实现代码
Aug 09 Javascript
表格单元格交错着色实现思路及代码
Apr 01 Javascript
javascript教程之不完整的继承(js原型链)
Jan 13 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
JQuery实现网页右侧随动广告特效
Jan 17 Javascript
微信小程序 转发功能的实现
Aug 04 Javascript
vue中遇到的坑之变化检测问题(数组相关)
Oct 13 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 Javascript
vue接口请求加密实例
Aug 11 Javascript
关于antd tree 和父子组件之间的传值问题(react 总结)
Jun 02 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
AM/FM收音机的安装与调试
2021/03/02 无线电
实用函数7
2007/11/08 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
护士自荐信范文
2013/12/15 职场文书
幼儿园六一亲子活动方案
2014/08/26 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
物业保安辞职信
2015/05/12 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫
redis数据结构之压缩列表
2022/03/21 Redis