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代码效果
Aug 17 Javascript
从jquery的过滤器.filter()方法想到的
Sep 29 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
May 14 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
JS动态显示表格上下frame的方法
Mar 31 Javascript
详解AngularJS过滤器的使用
Mar 11 Javascript
JS小数转换为整数的方法分析
Jan 07 Javascript
jquery实现表单获取短信验证码代码
Mar 13 Javascript
怎样在vue项目下添加ESLint的方法
May 16 Javascript
layui 实现表单和文件上传一起传到后台的例子
Sep 16 Javascript
JS基础之逻辑结构与循环操作示例
Jan 19 Javascript
vue使用nprogress加载路由进度条的方法
Jun 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面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
javascript回调函数详解
2018/02/06 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Python中的pass语句使用方法讲解
2015/05/14 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
python绘制彩虹图
2019/12/16 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
易程科技软件测试笔试
2013/03/24 面试题
remote接口和home接口主要作用
2013/05/15 面试题
资深地理教师自我评价
2013/09/21 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
大学生求职计划书
2014/04/30 职场文书
建筑学专业自荐书
2014/07/09 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
幼儿园辞职书
2015/02/26 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python