本文实例为大家分享了JS实现拖拽功能的具体代码,供大家参考,具体内容如下
拖拽的原理:三个事件 onmousedown、onmousemove、onmousemove
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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持站长技术。
如何加点盐(salt)? 为了加强MD5的安全性,从而加入了新的算法部分即加盐值,加...
那我们什么时候可以用到ibatis呢,我们用hibernate的时候会发现,有的时候hibern...
从上面的讲解中可以看出,单独的母版页是不能被用户所访问的。没有内容页支持,...
大家好,我是狂聊。 自己最近负责的几个接口,都涉及到了幂等性的操作,抽空总结...
达梦数据库数据守护实时主备集群的介绍与搭建过程 1、概述 2、主要功能 2.1 实时...
前言 先入门,把核心理解后再回过头来看这些我觉得效果更好,不知道说的对不对,...
前言 .NET Core 是指 .NET Core 运行时和 .NET Core SDK,它包含开发应用程序所...
Templates、Tags、Roles 一、Templates模块 二、tags模板 2.1 tags脚本 2.2 tags...
MySql 整体结构 MySQL 由连接池、SQL 接口、解析器、优化器、缓存、存储引擎等组...
最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设...