原生JS实现拖拽功能


Posted in Javascript onDecember 16, 2020

本文实例为大家分享了JS实现拖拽功能的具体代码,供大家参考,具体内容如下

拖拽的原理:三个事件 onmousedownonmousemoveonmousemove

1、鼠标按下,触发onmousedown,获取鼠标坐标x,y,获取元素坐标x,y

通过event.clientX、event.clientY获取鼠标位置的坐标

let x = e.clientX - box.offsetLeft; //鼠标点击坐标距离盒子左边缘的距离
let y = e.clientY - box.offsetTop; //鼠标点击坐标距离盒子上边缘的距离

2、设置元素left、top值,(元素要设置position:absolute)

box.style.left = ev.clientX - x + 'px';
box.style.top = ev.clientY - y + 'px';

3、放开鼠标取消dom事件

下面是详细代码:我只开了横向移动

<!DOCTYPE html>
<html lang="en">
 
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <style>
 #box {
 width: 100px;
 height: 100px;
 background: red;
 position: absolute
 }
 
 </style>
</head>
 
<body style="position: relative;overflow: hidden;">
 <div id="box">
 
 </div>
 
 <script>
 window.onload = function () {
 let box = document.getElementById('box')
 box.onmousedown = function (ev) {
 let e = ev || event;
 let x = e.clientX - box.offsetLeft; //鼠标点击坐标距离盒子左边缘的距离
 let y = e.clientY - box.offsetTop; //鼠标点击坐标距离盒子上边缘的距离
 document.onmousemove = function (ev) {
  let e = ev || event;
  box.style.left = ev.clientX - x + 'px';
  box.style.top = ev.clientY - y + 'px';
  
  let bodyScreenX = ev.screenX
  let bodyClientWidth = document.body.clientWidth
  
  document.onmouseup = function (ev) {
  if (ev.clientX - x < 0) {
  box.style.left = 0
  } else if (bodyScreenX > bodyClientWidth) {
  box.style.right = 0
  box.style.left = bodyClientWidth - 100 + 'px'
  }
  document.onmousemove = null;
  document.onmouseup = null;
  }
 }
 }
 }
 
 </script>
</body>
 
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
May 21 Javascript
浅谈关于JavaScript的语言特性分析
Apr 11 Javascript
js判断两个日期是否相等的方法
Sep 10 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
Dec 25 Javascript
js 显示base64编码的二进制流网页图片
Apr 04 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
Aug 19 Javascript
js获取json元素数量的方法
Jan 27 Javascript
Window.Open打开窗体和if嵌套代码
Apr 15 Javascript
Javascript中的prototype与继承
Feb 06 Javascript
BootStrap数据表格实例代码
Sep 13 Javascript
Vue中Quill富文本编辑器的使用教程
Sep 21 Javascript
JS简单表单验证功能完整示例
Jan 26 Javascript
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 #Vue.js
vue实现图片裁剪后上传
Dec 16 #Vue.js
Vue-router中hash模式与history模式的区别详解
Dec 15 #Vue.js
JS创建自定义对象的六种方法总结
Dec 15 #Javascript
npm全局环境变量配置详解
Dec 15 #Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 #Vue.js
angular *Ngif else用法详解
Dec 15 #Javascript
You might like
php类
2006/11/27 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
DOM 基本方法
2009/07/18 Javascript
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
从Python程序中访问Java类的简单示例
2015/04/20 Python
Django中的ajax请求
2018/10/19 Python
用Python实现读写锁的示例代码
2018/11/05 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
Python读写压缩文件的方法
2020/07/30 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
全球在线商店:BerryLook
2019/04/14 全球购物
给女儿的表扬信
2014/01/18 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
租房安全协议书
2014/08/20 职场文书
法院个人总结
2015/03/03 职场文书
2015年员工试用期工作总结
2015/05/28 职场文书
2019思想汇报范文
2019/05/21 职场文书
python中取整数的几种方法
2021/11/07 Python
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers