鼠标拖拽盒子跟着鼠标在页面任意位置移动

news/2024/12/29 7:16:58/

注意:

● 我们让盒子跟着鼠标在页面上移动,这个移动事件绑在页面上,而不是绑在盒子上,也就是绑在document上,不能绑在div上,不然你只能鼠标在盒子身上移动,在页面上移动就没效果;

● 只有当你属性按下盒子时,才能移动,所以鼠标移动事件要定义在鼠标按下事件里面;

● 在鼠标抬起时,给鼠标移动事件解绑;

方法一:在鼠标按下事件中定义鼠标移动事件

<!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>*{margin: 0;padding: 0;}div{width: 100px;height: 100px;background-color: skyblue;/* 一定要有定位,不然下面关键点地方不起作用 */position: absolute;}</style>
</head>
<body><div id="box"></div><script>box.onmousedown = function(){console.log("down")document.onmousemove = function(evt){// 因为想让鼠标所在的地方是盒子的中心位置,var x = evt.clientX - box.offsetWidth/2var y = evt.clientY - box.offsetHeight/2if(y<=0) y=0if(x<=0) x=0if(x>=document.documentElement.clientWidth-box.offsetWidth)x = document.documentElement.clientWidth-box.offsetWidthif(y>=document.documentElement.clientHeight-box.offsetHeight)y = document.documentElement.clientHeight-box.offsetHeight//让盒子随着鼠标移动的关键点:就是把盒子定位在鼠标移动的位置box.style.left = x + "px"box.style.top = y + "px"}}box.onmouseup = function(){console.log("up")document.onmousemove = null}</script>
</body>
</html>

效果:

核心点:

● 让盒子跟着鼠标移动的关键点是:盒子要绝对定位,让盒子定位的距离等于鼠标所在的位置

● 移动的位置不能超过四个面,所以才有了判断条件

方法二:引入第三方标志位,控制第三方标志来实现

<!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>* {margin: 0;padding: 0;}div {width: 100px;height: 100px;background-color: skyblue;/* 一定要有定位,不然下面关键点地方不起作用 */position: absolute;}</style>
</head><body><div id="box"></div><script>isDown = falsebox.onmousedown = function () {console.log("down")isDown = true}box.onmouseup = function () {console.log("up")document.onmousemove = nullisDown = false}document.onmousemove = function (evt) {if (!isDown) return// 因为想让鼠标所在的地方是盒子的中心位置,var x = evt.clientX - box.offsetWidth / 2var y = evt.clientY - box.offsetHeight / 2if (y <= 0) y = 0if (x <= 0) x = 0if (x >= document.documentElement.clientWidth - box.offsetWidth)x = document.documentElement.clientWidth - box.offsetWidthif (y >= document.documentElement.clientHeight - box.offsetHeight)y = document.documentElement.clientHeight - box.offsetHeight//让盒子随着鼠标移动的关键点:就是把盒子定位在鼠标移动的位置box.style.left = x + "px"box.style.top = y + "px"}</script>
</body></html>

解释说明:

第三方标志,就是:isDown ,我们这里将鼠标移动事件从鼠标按下事件中拿出来以后,就需要用到这个第三方标志。初始值为false,当按下鼠标时赋值为true,鼠标抬起时又赋值为false,所以给鼠标移动事件加一个条件判断,当鼠标按下时,也就是isDown = true时才执行,否则就不执行,也就是return,return能阻止下面的代码执行。


http://www.ppmy.cn/news/677260.html

相关文章

鼠标不可用,会自己移动

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 楼主很喜欢去pdd上面买那种性价比比较高的鼠标。如何就容易出点小毛病。 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 当鼠标会不由自主的移动的时候。 原因分析&#xff1a; 提…

鼠标移动到的地方一直往右移动的解决办法

问题 用的华为云桌面&#xff0c;突然间鼠标像中了邪一样&#xff0c;光标移动的的地方在云桌面里一直往下移动&#xff0c;在本地电脑一直向右移动&#xff0c;云桌面和本地电脑重启没用 解决办法 后来是看了下面这个链接&#xff0c;排查了鼠标问题&#xff0c;先看鼠标驱动…

springboot项目外卖管理 day09-mysql主从复制以及nginx入门

文章目录 一、读写分离问题分析MySQL主从复制介绍 配置配置主库&#xff0c;我这里就用虚拟机上的mysql当主库了配置从库&#xff0c;我这里就用我的另一台克隆的虚拟机了 读写分离案例背景Sharding-JDBC介绍项目实现读写分离 二、Nginx简介Nginx的下载和安装安装过程&#xff…

用matlab计算矩阵的权重,如何使用matlab计算加权平均分

在工作中&#xff0c;我们时常遇到对测量数据进行加权的情况。这是因为&#xff0c;有些测量中所得数据&#xff0c;其单位权重并不相等。若要计算平均数&#xff0c;就不能用算术平均数&#xff0c;而应该使用加权平均数。如&#xff1a;高考科目包括语文、政治、外语、数学、…

excel计算加权平均方法

sumproduct(B2:B4,C2:C4)/sum(C2:C4) 这个函数的意思是计算&#xff08;B2*C2B3*C3B4*C4&#xff09;/(C2C3C4) 在某个空白处输入这个公式&#xff0c;然后再公式前面加上“”回车就会显示计算结果。

加权平均数的例子_加权平均数公式(加权平均数公式例子)

在EXCEL中&#xff0c;有没有加权平均数的公式&#xff1f; 完整问题&#xff1a;在EXCEL中&#xff0c;有没有加权平均数的公式&#xff1f; 好评回答&#xff1a;没有&#xff0c;但你可以自己根据需要编辑公式。 在EXCEL中&#xff0c;有没有加权平均数的公式&#xff1f; 完…

用R语言计算班级各门课程的加权平均分

## 用R语言计算班级各门课程的加权平均分 ##好久没有写博客了&#xff0c;曾经还说坚持写博客&#xff0c;后来因为各种事就忘了&#xff0c;暑假也没坚持写&#xff0c;由于加了大数据班&#xff0c;加上参加了一个活动&#xff0c;以后必须就一周写一篇&#xff0c;而且内容应…