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 相关文章推荐
理解JavaScript中的事件
Sep 23 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
Jul 13 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
May 07 Javascript
js正则表达式中exec用法实例
Jul 23 Javascript
js实现文本框支持加减运算的方法
Aug 19 Javascript
详解JavaScript数组的操作大全
Oct 19 Javascript
JavaScript获取当前cpu使用率的方法
Dec 15 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
May 25 Javascript
浏览器调试动态js脚本的方法(图解)
Jan 19 Javascript
vue.js使用watch监听路由变化的方法
Jul 08 Javascript
解决百度Echarts图表坐标轴越界的方法
Oct 17 Javascript
three.js 实现露珠滴落动画效果的示例代码
Mar 01 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 PDO函数库详解
2010/04/27 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
JQuery 小练习(实例代码)
2009/08/07 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
js面向对象的写法
2016/02/19 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
关于递归的一道.NET面试题
2013/05/12 面试题
党员承诺书范文
2014/05/19 职场文书
技术股份合作协议书
2014/10/05 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
Python&Matlab实现樱花的绘制
2022/04/07 Python
SQL Server删除表中的重复数据
2022/05/25 SQL Server
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers