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 相关文章推荐
超级酷和最实用的jQuery实例收集(20个)
Apr 21 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
Aug 28 Javascript
js计算精度问题小结
Apr 22 Javascript
客户端js性能优化小技巧整理
Nov 05 Javascript
深入理解javascript变量声明
Nov 20 Javascript
node.js中的console.log方法使用说明
Dec 09 Javascript
js的回调函数详解
Jan 05 Javascript
jquery实现翻动fadeIn显示的方法
Mar 05 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
May 12 Javascript
jQuery实现最简单实用的分秒倒计时
Feb 05 Javascript
vue中的inject学习教程
Apr 24 Javascript
JS制作简易计算器的实例代码
Jul 04 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中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
JS编程小常识很有用
2012/11/26 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
jquery根据一个值来选中select下的option实例代码
2016/08/29 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
python连接池实现示例程序
2013/11/26 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
python的scipy实现插值的示例代码
2019/11/12 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
北京华建集团SQL面试题
2014/06/03 面试题
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
运动会广播稿500字
2014/01/28 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
春节晚会开场白
2015/05/29 职场文书
初二数学教学反思
2016/02/17 职场文书
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS