原生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 相关文章推荐
js option删除代码集合
Nov 12 Javascript
jquery学习笔记二 实现可编辑的表格
Apr 09 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 Javascript
jQuery 属性选择器element[herf*='value']使用示例
Oct 20 Javascript
js中浮点型运算BUG的解决方法说明
Jan 06 Javascript
jquery toolbar与网页浮动工具条具体实现代码
Jan 12 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
May 08 Javascript
js类式继承与原型式继承详解
Apr 07 Javascript
轻松掌握JavaScript代理模式
Aug 26 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
Mar 15 Javascript
vue组件编写之todolist组件实例详解
Jan 22 Javascript
微信小程序实现菜单左右联动
May 19 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从数组中随机抽取一些元素的代码
2012/11/05 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
input 输入框内的输入事件详细分析
2010/03/17 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
javascript编写简易计算器
2017/05/06 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
python批量提取word内信息
2015/08/09 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
python读取与处理netcdf数据方式
2020/02/14 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
惠普香港官方商店:HP香港
2019/04/30 全球购物
历史学专业推荐信
2013/11/06 职场文书
木工主管岗位职责
2013/12/08 职场文书
教师求职信范文
2014/05/24 职场文书
企业宣传标语
2014/06/09 职场文书
物理教育专业求职信
2014/06/25 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
论文答辩开场白大全
2015/05/27 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书