JavaScript实现可拖拽的拖动层Div实例


Posted in Javascript onAugust 05, 2015

本文实例讲述了JavaScript实现可拖拽的拖动层Div。分享给大家供大家参考。具体如下:

这是一个完美的JS拖拽效果,带拖尾的JavaScript拖动层代码,经过了多次优化修正,复制节点的方法不错,值得JS爱好者学习,同时代码修正了给拖拽元素加ondblclick事件无效的问题,兼容多种浏览器,拷贝代码即可运行使用。

运行效果如下图所示:

JavaScript实现可拖拽的拖动层Div实例

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
*{ margin:0; padding:0;} .div{ width:100px; height:100px; position:absolute;left:100px; top:100px; background:#ccc;}
</style>
</head>
<body>
  <div class="div">
  </div>
  <script type="text/javascript">
   var div = document.getElementsByTagName('div')[0];
   var zIndex = 6;
   drag(div);
   div.ondblclick = function() {
    alert("ok");
   };
   function drag(oDrag) {
    var disX = dixY = 0;
    oDrag.onmousedown = function(event) {
     var event = event || window.event;
     disX = event.clientX - this.offsetLeft;
     disY = event.clientY - this.offsetTop;
     var oTemp = this.cloneNode(true);
     document.body.appendChild(oTemp);
     document.onmousemove = function(event) {
      var event = event || window.event;
      var iL = event.clientX - disX;
      var iT = event.clientY - disY;
      var maxL = document.documentElement.clientWidth - oDrag.offsetWidth;
      var maxT = document.documentElement.clientHeight - oDrag.offsetHeight;
      iL <= 0 && (iL = 0);
      iT <= 0 && (iT = 0);
      iL >= maxL && (iL = maxL);
      iT >= maxT && (iT = maxT);
      oTemp.style.zIndex = zIndex++;
      oTemp.style.opacity = "0.5";
      oTemp.style.filter = "alpha(opacity=50)";
      oTemp.style.left = iL + "px";
      oTemp.style.top = iT + "px";
      return false;
     };
     document.onmouseup = function() {
      document.onmousemove = null;
      document.onmouseup = null;
      oDrag.style.opacity = oTemp.style.opacity;
      var arr = {
       left: oTemp.offsetLeft,
       top: oTemp.offsetTop
      };
      oDrag.style.zIndex = oTemp.style.zIndex;
      oAnimate(oDrag, arr, 300,
      function() {
       document.body.removeChild(oTemp);
      });
      oDrag.releaseCapture && oDrag.releaseCapture()
     };
     this.setCapture && this.setCapture();
     return false
    }
   }
   function oAnimate(obj, params, time, handler) {
    var node = typeof obj == "string" ? $(obj) : obj;
    var _style = node.currentStyle ? node.currentStyle: window.getComputedStyle(node, null);
    var handleFlag = true;
    for (var p in params) { (function() {
      var n = p;
      if (n == "left" || n == "top") {
       var _old = parseInt(_style[n]);
       var _new = parseInt(params[n]);
       var _length = 0,
       _tt = 10;
       if (!isNaN(_old)) {
        var count = _old;
        var length = _old <= _new ? (_new - _old) : (_old - _new);
        var speed = length / time * _tt;
        var flag = 0;
        var anim = setInterval(function() {
         node.style[n] = count + "px";
         count = _old <= _new ? count + speed: count - speed;
         flag += _tt;
         if (flag >= time) {
          node.style[n] = _new + "px";
          clearInterval(anim);
          if (handleFlag) {
           handler();
           handleFlag = false;
          }
         }
        },
        _tt);
       }
      }
     })();
    }
   }
  </script>
 </body>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
Google韩国首页图标动画效果
Aug 26 Javascript
js表格分页实现代码
Sep 18 Javascript
javascript 动态设置已知select的option的value值的代码
Dec 16 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 Javascript
移动端JQ插件hammer使用详解
Jul 03 Javascript
详解React-Todos入门例子
Nov 08 Javascript
node.js中express-session配置项详解
May 31 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
Jun 03 Javascript
初探JavaScript 面向对象(推荐)
Sep 03 Javascript
小程序云开发初探(小结)
Oct 24 Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 Javascript
基于JS实现前端压缩上传图片的实例代码
May 14 Javascript
JQuery悬停控制图片轮播——代码简单
Aug 05 #Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
Aug 05 #Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
Aug 05 #Javascript
JS绘制生成花瓣效果的方法
Aug 05 #Javascript
JS实现点击上移下移LI行数据的方法
Aug 05 #Javascript
将页面table内容与样式另存成excel文件的方法
Aug 05 #Javascript
JS模拟键盘打字效果的方法
Aug 05 #Javascript
You might like
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
深入PHP5中的魔术方法详解
2013/06/17 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
PHP7修改的函数
2021/03/09 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
JavaScript 三种创建对象的方法
2009/10/16 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python类继承用法实例分析
2015/05/27 Python
Python随机读取文件实现实例
2017/05/25 Python
Anaconda下安装mysql-python的包实例
2018/06/11 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
师范毕业生自我鉴定
2014/01/15 职场文书
新教师工作感言
2014/02/16 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
javascript之Object.assign()的痛点分析
2022/03/03 Javascript