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的简单&amp;简陋Tabs插件代码
Feb 09 Javascript
20行代码实现的一个CSS覆盖率测试脚本
Jul 07 Javascript
jQuery的css() 方法使用指南
May 03 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
Dec 09 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
Jul 12 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
Nov 25 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
Jan 24 Javascript
vue最简单的前后端交互示例详解
Oct 11 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 Javascript
vue实现图片上传功能
May 28 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
Aug 19 Javascript
利用promise及参数解构封装ajax请求的方法
Mar 24 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自动备份数据库表的实现方法
2017/07/28 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
2019/10/18 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
jquery+json实现分页效果
2016/03/07 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
Python collections模块实例讲解
2014/04/07 Python
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
Python中处理unchecked未捕获异常实例
2015/01/17 Python
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
python实现杨辉三角思路
2017/07/14 Python
Python自定义线程类简单示例
2018/03/23 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
关于Python解包知识点总结
2020/05/05 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
python如何建立全零数组
2020/07/19 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
和谐社区口号
2014/06/19 职场文书
倡议书的格式写法
2015/04/28 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
作文之亲情600字
2019/09/23 职场文书
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js