说明:代码取自网络,注释为原文所有!

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title>完美拖拽</title><style type="text/css">html, body {overflow: hidden;}body, div, h2, p {margin: 0;padding: 0;}body {color: #fff;background: #000;font: 12px/2 Arial;}p {padding: 0 10px;margin-top: 10px;}span {dcolor: #ff0;padding-left: 5px;}#box {position: absolute;width: 300px;height: 150px;background: #333;border: 2px solid #ccc;top: 50%;left: 50%;margin: -75px 0 0 -150px;}#box h2 {height: 25px;cursor: move;background: #222;border-bottom: 2px solid #ccc;text-align: right;padding: 0 10px;}#box h2 a {color: #fff;font: 12px/25px Arial;text-decoration: none;outline: none;}</style><script type="text/javascript">
window.onload=function ()
{var oBox=document.getElementById("box");var oH2 = oBox.getElementsByTagName("h2")[0];var oA = oBox.getElementsByTagName("a")[0];var aSpan = oBox.getElementsByTagName("span");var disX = disY = 0;var bDrag = false;var aPos = [{x:oBox.offsetLeft, y:oBox.offsetTop}]//鼠标按下, 激活拖拽
    oH2.onmousedown = function (event){var event = event || window.event;bDrag = true;disX = event.clientX - oBox.offsetLeft;disY = event.clientY - oBox.offsetTop;aPos.push({x:oBox.offsetLeft, y:oBox.offsetTop})this.setCapture && this.setCapture();return false};//拖拽开始
    document.onmousemove = function (event){if (!bDrag) return;var event = event || window.event;var iL = event.clientX - disX;var iT = event.clientY - disY;var maxL = document.documentElement.clientWidth - oBox.offsetWidth;var maxT = document.documentElement.clientHeight - oBox.offsetHeight;iL = iL < 0 ? 0 : iL;iL = iL > maxL ? maxL : iL;iT = iT < 0 ? 0 : iT;iT = iT > maxT ? maxT : iT;oBox.style.marginTop = oBox.style.marginLeft = 0;oBox.style.left = iL + "px";oBox.style.top = iT + "px";aPos.push({x:iL, y:iT})status();return false};//鼠标释放, 结束拖拽
    document.onmouseup = window.onblur = oH2.onlosecapture = function (){bDrag = false;oH2.releaseCapture && oH2.releaseCapture();status()};//回放拖动轨迹
    oA.onclick = function (){if (aPos.length == 1) return;var timer = setInterval(function (){var oPos = aPos.pop();oPos ? (oBox.style.left = oPos.x + "px", oBox.style.top = oPos.y + "px", status()) : clearInterval(timer)}, 30);this.focus = false;//去除链接虚线return false};//阻止冒泡
    oA.onmousedown = function (event){(event || window.event).cancelBubble = true};//监听状态函数function status (){aSpan[0].innerHTML = bDrag;aSpan[1].innerHTML = oBox.offsetTop;aSpan[2].innerHTML = oBox.offsetLeft}//初始调用
    status()
};</script>
</head>
<body><div id="box"><h2><a href="javascript:;">点击回放拖动轨迹</a></h2><p><strong>Drag:</strong><span></span></p><p><strong>offsetTop:</strong><span></span></p><p><strong>offsetLeft:</strong><span></span></p></div>
</body>
</html>

View Code

转载于:https://www.cnblogs.com/sx00xs/p/6488040.html

[读码时间] 完美拖拽相关推荐

  1. 关于完美拖拽的问题三

    简单的修改了一下,让它自动吸附,原理很简单,判断t,l的距离,只要让它在小于一个距离的时候距离变为0 就可以了 带边框的自动吸附的拖拽代码如下: <!doctype html> <h ...

  2. [读码时间] 记住密码提示框

    说明:代码来自网络.注释为笔者学习时添加. <!DOCTYPE html> <html> <head><meta charset="utf-8&qu ...

  3. [读码时间] css函数设置读取对象的属性

    说明:代码取自网络,注释为笔者学习时添加! <!DOCTYPE html> <html> <head><meta charset="utf-8&qu ...

  4. [读码时间] 自定义右键菜单

    说明:代码取自网络,CSS中注释为笔者学习时添加,JS中的注释为原文所有! <!DOCTYPE html> <html> <head><meta charse ...

  5. [读码时间] 跟随鼠标移动(大图展示)

    说明:代码取自网络,css中注释为笔者学习时添加,js中的注释为原文所有! <!DOCTYPE html> <html> <head><meta charse ...

  6. LayaAir拖拽移动对象并吸附(附源码)

    前言: 拖拽移动对象是2D休闲小游戏中常用的一个功能,典型代表例如<植物大战僵尸>中,种植植物的表现形式,拖拽植物卡片种植到相应的地点.今天介绍一下在Laya项目中实现这一功能. 该功能实 ...

  7. Python+selenium 自动化高级应用篇:借助pyautogui实现web前端带轨迹拖拽功能,解决ActionChains拖拽失效问题

    有一些 web 前端的交互,必须有鼠标轨迹才能成功的实现拖拽功能. 而 selenium 自带的 ActionChains 方法,是一瞬间从 A 点到 B 点的. 解决思路: 利用元素返回的相对浏览器 ...

  8. 关于拖拽上传 [一个拖拽上传修改头像的流程]

    拖拽是操作系统用户体验最伟大的改进之一.它让人随心所欲的操作,更符合人们的直观感受. 如今现代的浏览器已经有很多支持拖拽文件读取操作,其优点不再复述.前端时间利用拖拽改进了一下网站的头像上传流程,对其 ...

  9. android qq消息数 拖拽动画,史上最详细仿QQ未读消息拖拽粘性效果的实现

    好久没写文章了,前段时间由于项目代码重构忙了一段时间,现在终于有点时间了就为大家带来一篇关于动画学习的自定义View:类似QQ消息拖拽的效果. 其实QQ当时更新的时候我还没注意到这个小红点是可以拖拽的 ...

最新文章

  1. Centos 7环境下源码安装PostgreSQL数据库
  2. Android Chromium WebView Crash
  3. 专业网络推广浅析蜘蛛对网站有抓取但没收录的现象
  4. 传输层 :TCP/UDP 协议(用于封装接口)
  5. uni-app实现微信小程序本地图片转为base64
  6. C语言(CED)01背包——动态规划第二题
  7. mysql efbbbf_MySQL中修理特殊不可见uft8字符 - trim
  8. SpringBoot配置@ConfigurationProperties与@Value的区别
  9. 敏捷开发一千零一问系列之五:怎样让队员主动要活?
  10. python从入门到实践课后题_Python 从入门到实践 函数篇 8-6-8习题
  11. python使用缩进来体现-Python 使用缩进来体现代码之间的逻辑关系 .
  12. 阿里云数据库8月刊:国内首款Cloud Native自研数据库POLARDB精彩亮相VLDB!
  13. Flex_As操作大全
  14. Win 2003安装过后的一些配置技巧
  15. 新手上路,Python黑帽子学习笔记从此开篇
  16. 动视暴雪利润下降22%,投身移动端能否重回王座?
  17. C++:动态规划DP;
  18. 光学成像基础-荧光滤色片
  19. 通信基础:星座图与IQ调制
  20. PHP解析js的escape()函数编码数据

热门文章

  1. java将ascii数组转成unicode字串
  2. PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
  3. HP_UX常用指令列表(转,整理过,方便使用)
  4. 阿里一年,聊聊我成长了什么,入职阿里的职业生涯感悟
  5. 高频算法面试题(字符串) 242. 有效的字母异位词
  6. 公司 邮件 翻译 培训 长难句 结课
  7. IntelliJ IDEA 显示行号方法
  8. SNMP学习之结构体snmp_secmod_def
  9. Xen的起源与工作原理
  10. 戴尔看好Ubuntu超越Windows的十个优势