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 相关文章推荐
js 实现打印网页中定义的部分内容的代码
Apr 01 Javascript
邮箱下拉自动填充选择示例代码附图
Apr 03 Javascript
详解Javacript和AngularJS中的Promises
Feb 09 Javascript
vue动态组件实现选项卡切换效果
Mar 08 Javascript
QRCode.js二维码生成并能长按识别
Oct 16 Javascript
Vue利用History记录上一页面的数据方法实例
Nov 02 Javascript
elementUI中Table表格问题的解决方法
Dec 04 Javascript
Vue和React组件之间的传值方式详解
Jan 31 Javascript
微信小程序-可移动菜单的实现过程详解
Jun 24 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 Javascript
在nuxt中使用路由重定向的实例
Nov 06 Javascript
JavaScript实现贪吃蛇游戏
Jun 16 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对图像的各种处理函数代码小结
2013/07/08 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
javascript入门·对象属性方法大总结
2007/10/01 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
Java中Timer的用法详解
2015/10/21 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
ES6函数和数组用法实例分析
2020/05/23 Javascript
python中的__slots__使用示例
2015/02/26 Python
在Python中使用模块的教程
2015/04/27 Python
python发送邮件脚本
2018/05/22 Python
numpy中矩阵合并的实例
2018/06/15 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
keras slice layer 层实现方式
2020/06/11 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
求职信模板标准格式范文
2014/02/23 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
JavaScript控制台的更多功能
2021/04/28 Javascript