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.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
Dec 16 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
Apr 08 Javascript
checkbox勾选判断代码分析
Jun 11 Javascript
js手动播放图片实现图片轮播效果
Sep 17 Javascript
学习使用Bootstrap页面排版样式
May 11 Javascript
详解Vue.js使用Swiper.js在iOS
Sep 10 Javascript
Vue 中 a标签上href无法跳转的解决方式
Nov 12 Javascript
JS常用排序方法实例代码解析
Mar 03 Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 Javascript
微信小程序实现倒计时功能
Nov 19 Javascript
vuex的使用步骤
Jan 06 Vue.js
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
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
php动态生成函数示例
2014/03/21 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
php常量详细解析
2015/10/27 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
python正则分组的应用
2013/11/10 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
详解python持久化文件读写
2019/04/06 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
python Tkinter的图片刷新实例
2019/06/14 Python
下载官网python并安装的步骤详解
2019/10/12 Python
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
自主招生推荐信范文
2014/05/10 职场文书
安全生产工作汇报
2014/10/28 职场文书
元旦主持词开场白
2015/05/29 职场文书
2016年元旦寄语
2015/08/17 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android