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 相关文章推荐
dojo学习第二天 ajax异步请求之绑定列表
Aug 29 Javascript
jquery连缀语法如何实现
Nov 29 Javascript
前台js对象在后台转化java对象的问题探讨
Dec 20 Javascript
jquery easyui中treegrid用法的简单实例
Feb 18 Javascript
巧用replace将文字表情替换为图片
Apr 17 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
May 25 Javascript
JavaScript中关键字 in 的使用方法详解
Oct 17 Javascript
JS实现获取进今年第几天是周几的方法分析
Jun 27 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
Sep 10 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
Feb 23 Javascript
vant中的toast层级改变操作
Nov 04 Javascript
Canvas跟随鼠标炫彩小球的实现
Apr 11 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
Javascript之this关键字深入解析
2013/11/12 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
小程序日历控件使用方法详解
2018/12/29 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
python在linux中输出带颜色的文字的方法
2014/06/19 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
python自带的http模块详解
2016/11/06 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
python 自动批量打开网页的示例
2019/02/21 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
通过实例解析python描述符原理作用
2020/01/22 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
好邻里事迹材料
2014/01/16 职场文书
市场营销管理制度
2014/01/29 职场文书
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技