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鼠标和滚轮事件
Jun 27 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 Javascript
javascript使用location.search的示例
Nov 05 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
Oct 17 Javascript
js实现简单的可切换选项卡效果
Apr 10 Javascript
javascript实现仿IE顶部的可关闭警告条
May 05 Javascript
深入理解Node中的buffer模块
Jun 03 Javascript
基于JavaScript实现淘宝商品广告效果
Aug 10 Javascript
vue2.0 循环遍历加载不同图片的方法
Mar 06 Javascript
mpvue小程序循环动画开启暂停的实现方法
May 15 Javascript
在vue中axios设置timeout超时的操作
Sep 04 Javascript
JavaScript实现下拉列表
Jan 20 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
附件名前加网站名
2008/03/23 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
php中将汉字转换成拼音的函数代码
2012/09/08 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
vue实现循环切换动画
2018/10/17 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
维修工先进事迹
2014/05/29 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
消费者投诉书范文
2015/07/02 职场文书
董事长年会致辞
2015/07/29 职场文书
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis