文章目录

  • 前言
  • 一、实现思路
  • 二、具体步骤
    • 1.鼠标在元素上按下时
    • 2.鼠标拖拽元素时
    • 3.鼠标抬起事件
    • 4.完整代码
  • 总结

前言

我们在网页操作的时候,经常用到鼠标拖拽元素的行为。本篇文章就来讨论一下鼠标拖拽元素的原理及简单的实现过程。


一、实现思路

首先鼠标拖拽要用到三大事件
onmousedown:鼠标选择元素
onmousemove:鼠标移动元素
onmouseup:释放元素,也就是先用鼠标点击元素,然后拖拽元素到某一位置,释放元素的过程。

那么如何进行拖拽移动呢,主要是根据我们鼠标移动时的坐标变化来实现的
伪代码如下:

鼠标在元素上按下时{   拖拽状态 = 1   记录下鼠标的x和y坐标   记录下元素的x和y坐标   }  鼠标拖拽元素移动时{   如果拖拽状态是0就什么也不做。   如果拖拽状态是1,那么{  元素y = 现在鼠标y - 原来鼠标y + 原来元素y   元素x = 现在鼠标x - 原来鼠标x + 原来元素x   }    鼠标放开时{   拖拽状态 = 0
}

二、具体步骤

1.鼠标在元素上按下时

dv.onmousedown = function(e) {//鼠标获取x坐标和y坐标x = e.clientX;y = e.clientY;//获取左部和顶部的偏移量(坐标)l = dv.offsetLeft;t = dv.offsetTop;//开关打开isDown = true;}

2.鼠标拖拽元素时

window.onmousemove = function(e) {if (isDown == false) {return;}//获取x和yvar nx = e.clientX;var ny = e.clientY;//计算移动后的左偏移量和顶部的偏移量//nx-x算的是是移动了多少,加上l之后的结果就是此时div的左部的偏移量(坐标)var nl = nx - x + l;var nt = ny - y + t;dv.style.left = nl + 'px';dv.style.top = nt + 'px';}

3.鼠标抬起事件

dv.onmouseup = function() {//开关关闭isDown = false;}

4.完整代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>元素拖拽</title>
<style>#dv {width:100px;height:100px;background-color:blue;/* border-radius:50%; */position:absolute;
}</style>
</head><body><div id="dv"></div><script>var dv = document.getElementById('dv');var x = 0;var y = 0;var l = 0;var t = 0;var isDown = false;//鼠标按下事件dv.onmousedown = function(e) {//鼠标获取x坐标和y坐标x = e.clientX;y = e.clientY;// console.log('一开始鼠标的坐标'+x);// console.log('一开始鼠标的坐标'+y);//获取左部和顶部的偏移量l = dv.offsetLeft;t = dv.offsetTop;//开关打开isDown = true;}//鼠标移动window.onmousemove = function(e) {if (isDown == false) {return;}//获取x和yvar nx = e.clientX;var ny = e.clientY;//计算移动后的左偏移量和顶部的偏移量//nx-x算的是是移动了多少,加上l之后的结果就是此时div的左部的偏移量(坐标)var nl = nx - x + l;var nt = ny - y + t;dv.style.left = nl + 'px';dv.style.top = nt + 'px';}//鼠标抬起事件dv.onmouseup = function() {//开关关闭isDown = false;}</script></body>
</html>

总结

以上所述是原生js实现拖拽功能基本思路详解,希望对大家有所帮助!

原生js实现元素拖拽onmousedown/onmousemove/onmouseup相关推荐

  1. js控制鼠标移动_原生JS封装可拖拽效果

    项目代码已上传码云:小朋友/JavaScript 封装可拖拽特效 访问该URL可查看效果:http://is666a.gitee.io/javascript_drag/ https://www.zhi ...

  2. JS实现元素拖拽,简单悬浮框实现

    初学JavaScript,首次使用CSDN写博客,就当做自己的笔记本记录一下心得. 偶然了解到放大缩小拖拽这个功能,感兴趣就摸索着写了一个粗略的.实际功能还有许多问题和未优化的细节问题,仅作为学习练习 ...

  3. dom 元素拖拽实现

    文章目录 原生 JS 实现 div 拖拽 HTML 拖拽 API REF   之前找实习的时候,面试官出了道 "原生 JS 实现 div 元素拖拽",当时实现了个大概,不过很多细节 ...

  4. js实现鼠标拖拽功能基本思路

    如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒. onmousedown:鼠标按下事件 onmousemove:鼠标移动事件 onmouseup:鼠标抬起事件 拖拽的基本原 ...

  5. 图片img或者含有img元素拖拽时的阴影效应问题

    <body><!-- <div id="div1"> --><img src="地鼠洞.jpg" alt=" ...

  6. DOM实现元素拖拽,滚轮事件和特效动画缓冲运动处理

    目录 元素拖拽实现(点击拖动可视屏幕任意位置) DOM滚轮事件处理 滚轮事件绑定 滚轮事件方向 滚轮事件兼容 滚轮缩放图片案例实现 特效动画 缓冲运动 单向缓冲运动 反复缓冲运动 简单的封装 透明度处 ...

  7. 图片img或者含有img元素拖拽时,或者scale缩放时产品的阴影效应问题

    图片img或者含有img元素拖拽时,或者用scale缩放时产品的阴影效应问题 html中有图片img或者含有img元素拖拽时,或者scale缩放时产品的阴影效应问题,也就是图片重影, 另外使用scal ...

  8. html点击控制盒子左右移动,JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例...

    JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例 发布时间:2020-10-04 12:47:25 来源:脚本之家 阅读:121 作者:s_psycho 本文实例讲述了JS实现鼠标拖拽盒子移动及右键 ...

  9. 实现元素拖拽放大缩小_Vue实战067:DOM元素拖拽效果的实现

    DOM元素拖拽效果: 当鼠标选中目标元素之后可以将其拖放至指定区域的任意位置,实现的思路主要是通过鼠标事件按下.移动.抬起,摁下鼠标时记录鼠标位置以及元素位置并算出鼠标相对元素的位置,在拖拽时记下当前 ...

最新文章

  1. 照亮云备份的“钱”途
  2. 小手拍拍机器人_幼儿园互动儿歌游戏,小朋友瞬间变听话!
  3. 为什么不懂技术的人可以做产品经理(下)?
  4. 06512oracle数据库,ORA-06512 – 专业Oracle数据库恢复,或许是您恢复数据的最后机会@phone:13429648788 - 专业Oracle数据库恢复技术支持...
  5. 20个使用Bootstrap制作的前端框架网站案例
  6. MangoTrainingCourse课程hands-on lab-1
  7. 剑指offer——面试题47:不用加减乘除做加法
  8. Java常用实现八种排序算法与代码实现
  9. 纯Java代码实现 企业微信钉钉 机器人群+告警
  10. CPCL简易打印模板设计
  11. Python制作统计图形
  12. 1987年国际C语言混乱代码大赛获奖的一行代码
  13. python爬取微博恶评_详解用python写网络爬虫-爬取新浪微博评论
  14. 央视推荐的护眼灯是哪款?分享央视曝光护眼灯品牌
  15. Spring Boot 项目如何实现上传头像功能?
  16. Android中创建一个商品展示小案例
  17. python数据分析实战五_简单的python数据分析实战——黑五销售数据分析
  18. PlayOnLinux 让你更方便地在linux上玩windows游戏
  19. 质量管理体系之测试质量
  20. LibreOffice Java使用

热门文章

  1. 华为畅享9计算机在哪里,华为畅享9nfc功能在哪
  2. JavaScript Promise 教程 - 如何在 JS 中解决或拒绝 Promise
  3. 单芯片如何解决语音播报+显示驱动,实现缩短产品开发周期简化和降低综合BOM成本?
  4. 【云计算与大数据】知识点总结
  5. Python-测试报告
  6. 物联卡长时间不用会过期吗?关于物联卡强制激活和物联卡销户规则
  7. 小程序 祝福小工具源码分享
  8. 最近找工作的行情大家来交流交流
  9. python相关职业-浅谈Python全栈开发工程师,让程序员都眼红的职业!
  10. matlab应用于外卖软件,(大学生)外卖手机软件使用情况