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学习笔记9 prototype封装继承
Jan 11 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
Dec 21 Javascript
window.open打开页面居中显示的示例代码
Dec 27 Javascript
用jquery写的一个万年历(自写)
Jan 20 Javascript
Javascript中的apply()方法浅析
Mar 15 Javascript
javascript框架设计之种子模块
Jun 23 Javascript
浏览器中url存储的JavaScript实现
Jul 07 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
Aug 24 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
Jan 10 Javascript
基于Webpack4和React hooks搭建项目的方法
Feb 05 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
Jun 11 Javascript
Element DateTimePicker日期时间选择器的使用示例
Jul 27 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笔记之:日期函数的使用介绍
2013/04/24 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
js计算精度问题小结
2013/04/22 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
JavaScript错误处理
2015/02/03 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
班级年度安全计划书
2014/05/01 职场文书
房屋买卖委托书格式范本格式
2014/10/13 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
ipad隐藏软件app图标方法
2022/04/19 数码科技