文章目录
- 使用一些 CSS 样式创建基本的 HTML 结构
- 使用 JavaScript 将鼠标指针移动到特定位置
- 总结
请注意
,无法将鼠标指针移动到 JavaScript 中的特定位置。 主要原因是它会给用户带来安全问题并损害用户体验。
在这篇文章中,我们将创建一个假的或自定义的鼠标指针,它可能看起来类似于默认系统的鼠标指针,然后我们将使用 JavaScript 将其位置移动到不同的位置。 这种将鼠标指针移动到特定位置的技术用于演示目的,应在生产就绪网站上完全避免。
使用一些 CSS 样式创建基本的 HTML 结构
我们将在屏幕上创建两个按钮(一个在屏幕左侧,另一个在屏幕右侧),我们的目标是当我们点击第一个按钮时,鼠标指针会自动移动到屏幕上的第二个按钮上 屏幕。
首先,我们在 HTML 中创建两个 HTML 元素,一个是 img 标签,另一个是 div 元素。 img 标签将包含我们将用来代替原始系统鼠标光标的自定义或假光标的图像。
您可以使用您想要从互联网上获得的任何鼠标光标图像。 div 将有两个按钮,“按钮 1”和“按钮 2”。
我们还将为所有这些元素提供一个 id,以便我们可以在 JavaScript 中引用它们并在 CSS 中设置它们的样式。
代码片段 - HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Move mouse pointer</title>
<style>
* {
cursor: none;
}
.block{
display: flex;
justify-content: space-between;
}
img {
pointer-events: none;
position: absolute;
}
</style>
</head>
<body>
<img id="cursor" src="./mouse_cursor.png" width="16" height="22" />
<div class="block">
<button id="btn1">Button 1</button>
<button id="btn2">Button 2</button>
</div>
</body>
</html>
在 CSS 内部,我们借助 cursor: none 星号 (*
) 内的 CSS 属性,也称为 CSS 通用选择器,将原始系统的鼠标指针从整个页面中隐藏起来。 然后我们将向 div 元素添加一个 flexbox,以便它们之间可以有一个空格。
在 img 标签上,我们的自定义光标将添加 pointer-events: none 属性,这样就不会对其应用任何指针事件。 您可以在 MDN 上了解有关指针事件的更多信息,我们会将其设为绝对事件,以便我们可以将其移动到屏幕上的任何位置。
使用 JavaScript 将鼠标指针移动到特定位置
现在让我们使用 JavaScript 实现它的功能。 首先,我们将使用 JavaScript 中的 getElementById()
方法获取所有光标元素 btn1 和 btn2。
由于我们要将鼠标光标移动到特定位置,在这种情况下,在按钮 2 上,我们首先必须抓取按钮 2 的位置(左、上、宽、高),这样当我们点击按钮 1 时, 鼠标指针将自动移动到按钮 2。
为此,我们将在 btn2 上使用 getBoundingClientRect()
方法,这将为我们提供一个包含各种位置和尺寸的对象,如左、上、下、宽、高等,我们将把这个对象存储在一个 称为 rect 的变量。 然后我们会计算按钮2的finalPositionX和finalPositionY,这样我们在点击按钮1的时候就可以将鼠标指针指向按钮2的中心。
我们的自定义鼠标指针不会在屏幕上的这个位置移动。 要让它在浏览器上自由移动,我们必须给窗口对象添加一个事件监听器。
这个方法有两个参数,第一个是我们要执行函数的事件类型,第二个是触发该事件时将执行的函数本身。
因为我们想要移动我们的自定义鼠标指针,我们将使用 mousemove 事件作为我们的第一个参数,然后在我们的回调函数中,我们将获取 clientX 和 clientY 坐标,然后我们将它分配给 left 和 top 我们的自定义鼠标指针的位置如下所示。
不要忘记在它的末尾添加“px”; 否则,它不会工作。
代码片段 - JavaScript:
let cursor = document.getElementById("cursor");
let btn1 = document.getElementById("btn1");
let btn2 = document.getElementById("btn2");
let rect = btn2.getBoundingClientRect();
let finalPositionX = rect.left + rect.width/2;
let finalPositionY = rect.top + rect.height/2;
// Moving our custom mouse pointer
window.addEventListener("mousemove", (e) => {
x = e.clientX;
y = e.clientY;
cursor.style.left = x + "px";
cursor.style.top = y + "px";
});
btn1.addEventListener("mouseup", (e) => {
cursor.style.left = finalPositionX + "px";
cursor.style.top = finalPositionY + "px";
})
在此阶段,自定义鼠标光标将像普通鼠标光标一样移动。 现在我们将自定义鼠标光标移动到特定位置。
为此,我们将在 btn1 上添加一个 mouseup 事件,然后使用 finalPositionX 和 finalPositionY 位置设置鼠标光标的左侧和顶部位置。
输出:
总结
没有使用 JavaScript 更改鼠标位置的直接方法,因为它有一些缺陷。 但是在编程中总是有不同的和非官方的做事方式。
要解决鼠标指针移动到特定位置的问题,我们必须隐藏原来的鼠标指针。 然后,我们有两个创建我们的自定义鼠标指针并编写一些 JavaScript 代码使其移动到特定位置。