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 EasyUI 使用介绍
Apr 01 Javascript
使用Javascript接收get传递的值的代码
Nov 30 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
Feb 03 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
Dec 12 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
关于function类中定义变量this的简单说明
May 28 Javascript
基于angular实现模拟微信小程序swiper组件
Jun 11 Javascript
js实现图片上传预览原理分析
Jul 13 Javascript
聊聊Vue.js的template编译的问题
Oct 09 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
Jan 26 Javascript
JS函数节流和防抖之间的区分和实现详解
Jan 11 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
Jan 24 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常见问题集锦及解决办法总结
2007/03/18 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
PHP中的Memcache详解
2014/04/05 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
js资料prototype 属性
2007/03/13 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
vue实现图片懒加载的方法分析
2020/02/05 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
Python实现二维有序数组查找的方法
2016/04/27 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
小学教师的个人自我鉴定
2013/10/26 职场文书
创伤外科专业推荐信范文
2013/11/19 职场文书
创业计划书如何吸引他人眼球
2014/01/10 职场文书
小学红领巾中秋节广播稿
2014/01/13 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
感谢信模板大全
2015/01/23 职场文书
导师鉴定意见
2015/06/05 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis