我们执行拖拽操作时,

1.按住某元素

2.移动鼠标

3.移动鼠标到相应位置后松开鼠标

基于以上操作,页面拖拽效果需要三个事件

  • onmousedown
  • onmousemove
  • onmouseup

在onmousedown事件中,我们需要定义函数表明,该元素被按住,即将进行移动操作,需要计算x坐标值,并触发后续的onmousemove事件。

在onmousemove事件中,我们需要计算元素坐标位置,根据鼠标移动改变元素位置,准备执行鼠标松开时的事件函数。

在onmouseup事件中,我们需要以最终鼠标确定的位置为元素的最终位置,并且终止onmousemove事件。

注意:常规流元素不能够自由移动位置,设置定位后可以通过left,top等属性移动位置。

位置计算需要clientX,clientY,offsetX,offsetY等事件相关属性。

如果将left的值直接设置为event.clientX的话,鼠标位置在哪里,元素的最左侧就会跟着鼠标在哪里。这样的话,鼠标位置永远都是元素左侧。在按下鼠标时计算鼠标与元素位置的差值,然后在后续onmousemove处理中把这个差值加上,就可以使鼠标位置达到元素内部,并且在移动过程中不会改变。

代码如下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>#di{width:100px;height:100px;background-color: #4c4c4c;position: relative;/*设置绝对定位或者相对定位是必要的*/}</style><script>//window.onload=function(){}这里是为了使html页面加载完毕后再加载js代码,//否则获取元素步骤发生在元素产生之前,元素获取会失败window.onload=function(){//获取元素var d2=document.getElementById("d2");//以下为函数主体部分di.onmousedown=function(){//这里解释:event.clientX是鼠标位置相对于浏览器窗口左上角的差距像素值//offsetLeft是事件元素相对于浏览器窗口的定位位置,如果被某个定位元素包含,left会相对于那个定位元素,而不是document页面var disx=event.clientX-di.offsetLeft;var disy=event.clientY-di.offsetTop;//以下内容看不懂可以直接注释掉正常实现方式,使用发生跳跃的实现方式,然后就会发现//这里在按下鼠标时记录鼠标位置相对于元素的位置的差,防止每次开始拖拽时鼠标位置突然变成元素的一边。//这里设置left值为event.clientX,就可以看到不协调的元素跳跃,下面通过注释代码可以直接看到效果document.onmousemove=function(){di.style.left=event.clientX-disx+"px";//这里是正常表现效果的实现方式// di.style.left=event.clientX+"px";//这里是发生跳跃的不恰当的实现方式di.style.top=event.clientY-disy+"px";};document.onmouseup=function(){document.onmousemove=null;//这里把移动元素的状态去掉,停止拖拽。}}}</script>
</head>
<body><div id="di"></div>
</body>
</html>

Javascript实现拖拽效果相关推荐

  1. javascript简单拖拽效果

    clientX,Y,鼠标的位置 document.documentElement.clientWidth:获取可视区域的宽度 document.documentElement.clientHeight ...

  2. html js点击字图片下拉,JavaScript实现文字与图片拖拽效果的方法

    本文实例讲述了JavaScript实现文字与图片拖拽效果的方法.分享给大家供大家参考.具体实现方法如下: JavaScript实现文字与图片的拖拽效果 *{padding:0;margin:0;} . ...

  3. JavaScript实现鼠标拖拽效果

    JavaScript实现鼠标拖拽效果 前几篇博客一直在讲鼠标的移动事件相关的效果,今天再来讲一讲如何利用鼠标事件实现拖拽div块移动的效果.效果如图: HTML代码: <div id=" ...

  4. 怎么用javascript进行拖拽(转摘)

    本文译自:http://www.webreference.com/programming/javascript/mk/column2/index.html 所有版权归原文所有 由sohotx.com雪 ...

  5. 盒子拖拽效果,原生js实现

    原生js实现拖拽效果 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  6. JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)

    转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm 这篇文章主要介绍了JS实现漂亮的窗口拖拽 ...

  7. DOM 案例——(美团外卖下拉框菜单、半透明——信息滑入、模态窗口拖拽效果、放大镜效果、滚动条滑到一定位置的固定导航栏、12306购票网站多级联动、斗鱼TV无规则弹幕特效、百度搜索条动态输入下拉瀑布)

    目录 1.缓动动画--美团外卖下拉框菜单 2.半透明--信息滑入 3.模态窗口拖拽效果 4.放大镜效果 5.滚动条滑到一定位置的固定导航栏 6.12306购票网站多级联动 7.斗鱼TV无规则弹幕特效 ...

  8. 【加强版】js原生实现拖拽效果,这次没有用document的mousedown、mousemove、mouseup事件我们来点实际的(但是有个弊端:拖拽过程中鼠标会变成一个禁用符号,不太友好)

    <div class='dragged'></div> //初始化需要拖拽的列initDrags() {var arr = document.querySelectorAll( ...

  9. 【墙裂推荐】【原生基础版】js原生实现拖拽效果,注意不要忘了div的cursor用grab和grabbing 还是古法炮制、传统工艺的原生代码兼容性最好,推荐

    以下方式的劣势就是在放弃拖拽那一刻会触发click事件,通常如果被拖拽元素还有其他点击事件,会重复触发,往往并非业务需求.优势就是-额-貌似这段代码没什么屌优势! <div class='dra ...

最新文章

  1. hashids php 如何使用,Hashids使用
  2. 不可不知的软件架构模式
  3. 震惊了!关于JAVA复习的最佳敏捷实践!进BAT就是个毛毛雨!
  4. OSError: Unable to download 'ffmpeg.win32.exe'. Perhaps there is a no internet connection? If there
  5. layui表单mysql_layui表单验证支持select下拉框的一种方法
  6. mybatis集成 Invalid bound statement (not found)
  7. 使用require.context实现前端工程自动化
  8. package.json和package-lock.json
  9. 兰州大学第一届 飞马杯 ★★飞马祝福语★★ 线段树维护dp(动态dp)
  10. LeetCode 1657. 确定两个字符串是否接近
  11. java1.9关键字_对 Java 9 把单个下划线作为关键字的猜想
  12. spring gateway 限流持久化_Spring Cloud Gateway网关如何快速实施限流方案?-Part 6
  13. 批处理(bat)choice命令详解
  14. paip 自定义输入法多多输入法词库的备份导出以及导入
  15. 微信公众号支付(二)
  16. Android Studio项目编码设置为GBK或UTF-8  中文乱码 和 Eclipse项目编码设置
  17. 【C语言】案例二十九 综合案例——体育成绩管理系统
  18. Spritekit中如何判断触摸点击的精灵
  19. 天天打骂孩子对孩子有什么影响
  20. MySQL 变量和条件

热门文章

  1. LS200X15螺旋输送机CAD装配图 高炉上料小车全套CAD图纸微型涡轮喷气发动机 CAD 打包机液压系统图(CAD) PF1010反击式破碎机(全套CAD图纸+清单)C6132车床横向移动机构
  2. 单阶段目标检测模型YoLo系列(一):YoLoV3详解及代码实现
  3. c语言二叉树结点 深度,求二叉树的深度、总结点数和叶子结点数
  4. h5新增标签和表单元素
  5. Vector3的常用用法
  6. 技术架构解密 - 应用与服务编排工作流 ASW
  7. 美国主机常见的安全漏洞与防范方法详解
  8. 全国计算机等级考试vb试卷,2002年9月全国计算机等级考试二级VB试卷(含答案)...
  9. Parse算法学习笔记
  10. Visdom常用代码