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 淡入淡出 png图在ie8下有黑色边框的解决方法
Mar 05 Javascript
解析javascript中鼠标滚轮事件
May 26 Javascript
js实现仿京东2级菜单效果(带延时功能)
Aug 27 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
Nov 10 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
Dec 21 Javascript
使用async、enterproxy控制并发数量的方法详解
Jan 02 Javascript
Element-ui DatePicker显示周数的方法示例
Jul 19 Javascript
VUE项目中加载已保存的笔记实例方法
Sep 14 Javascript
vue 组件内获取actions的response方式
Nov 08 Javascript
d3.js实现图形拖拽
Dec 19 Javascript
微信小程序收藏功能的实现代码
Jun 19 Javascript
JS实现数组去重的11种方法总结
Apr 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
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
php实现上传图片文件代码
2015/07/19 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
vue如何截取字符串
2019/05/06 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
python局部赋值的规则
2013/03/07 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
档案管理员岗位职责
2013/12/01 职场文书
十佳教师事迹材料
2014/01/11 职场文书
给同学的道歉信
2014/01/16 职场文书
总经理的岗位职责
2014/02/23 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
三月学雷锋月活动总结
2014/04/28 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
HTML基础详解(下)
2021/10/16 HTML / CSS
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android