使用 javascript 将鼠标指针移动到特定位置

2023-11-12

请注意 ,无法将鼠标指针移动到 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 代码使其移动到特定位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 javascript 将鼠标指针移动到特定位置 的相关文章

随机推荐

  • zerotier使用教程_ZeroTier 初阶教程

    什么是 ZeroTier ZeroTier delivers the capabilities of VPNs SDN and SD WAN with a single system Manage all your connected re
  • stem函数--Matplotlib

    stem函数 Matplotlib 函数功能 Create a stem plot 创建棉棒图 A stem plot plots vertical lines at each x location from the baseline to
  • mysql常用命令有什么

    MySQL 数据库常用命令 1 MySQL常用命令 create database name 创建数据库 use databasename 选择数据库 drop database name 直接删除数据库 不提醒 show tables 显
  • 神经网络预测彩票数据

    一 人工智能深度学习神经网络在双色球彩票中的应用研究 一 https www cnblogs com zdz8207 p DeepLearning NeuralNetworks html 二 百度AI http ai baidu com p
  • js逆向-某399游戏登陆参数

    声明 本文仅供学习参考 禁止用于其他途径 违者后果自负 前言 目标网站 aHR0cHM6Ly93d3cuNDM5OS5jb20v 登陆接口 aHR0cHM6Ly9wdGxvZ2luLjQzOTkuY29tL3B0bG9naW4vbG9naW
  • 基于树莓派4B设计的智能家居系统(华为云IOT)

    基于树莓派的智能家居控制系统 华为云IOT 一 设计需求 前言 本次设计实现了一个基于树莓派的智能家居系统 可以对家庭环境进行实时监测和控制 提高居家安全性和舒适度 该系统采用了多种传感器和模块 包括温湿度传感器 烟雾传感器 火焰传感器 光
  • virtualenv: error: unrecognized arguments: --no-site-packages

    使用virtualenv version 看到自己的版本大于20 就可以将如下这段删除 export VIRTUALENVWRAPPER VIRTUALENV ARGS no site packages 我碰到的情况下 user makef
  • 机器学习算法之决策树

    原文 http www jianshu com p 6eecdeee5012 决策树是一种简单高效并且具有强解释性的模型 广泛应用于数据分析领域 其本质是一颗由多个判断节点组成的树 如 决策树 在使用模型进行预测时 根据输入参数依次在各个判
  • Go语言网络编程(socket编程)WebSocket编程

    1 WebSocket编程 1 1 1 webSocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单 允许服务端主动向客户端推送数据 在WebSoc
  • 关于epoll的IO模型是同步异步的一次纠结过程

    这篇文章的结论就是epoll属于同步非阻塞模型 这个东西貌似目前还是有争议 在新的2 6内核之后 epoll应该属于异步io的范围了 golang的高并发特性就是底层封装了epoll模型的函数 但也有文章指出epoll属于 伪AIO 真正的
  • IOS之同步请求、异步请求、GET请求、POST请求

    1 同步请求可以从因特网请求数据 一旦发送同步请求 程序将停止用户交互 直至服务器返回数据完成 才可以进行下一步操作 2 异步请求不会阻塞主线程 而会建立一个新的线程来操作 用户发出异步请求后 依然可以对UI进行操作 程序可以继续运行 3
  • PyQt5 笔记5 -- 消息框(QMessageBox)

    PyQt5 笔记5 消息框 QMessageBox 1 常用函数 函数原型 信息框 QMessageBox information self 框名 内容 按钮s 默认按钮 问答框 QMessageBox question self 框名 内
  • 西门子PLC学习笔记十-(计数器)

    S7 300 400的计数器一般占两个字节 是16位的 CPU最多可以使用64 512个计数器 计数器地址编号为C0 C511 1 S CUD 加减计数器 加减计数器波形图 2 S CU 加计数器 3 S CD 减计数器 4 三种计数器对应
  • Unity制作多屏幕解决方案

    最近制作了一个多屏幕的项目 多屏幕指的是一个电脑主机 连接多个显示器 我这个项目使用了一个显卡连接了三个显示设备 Unity UGUI提供Canvas画布 在画布上有一个TargetDisplay的解决解决方案 Canvas结合Camera
  • 摸不着头脑,flatMap处理后居然无法去重(原来是数据库添加字段的时候多了个空格= =)

    前言 这应该是一个bug 这是一篇毫无营养的博客 当我正在尝试从页面中获取作者时 发现之前应该被Set包装的作者字符串居然发生了重复 于是我赶紧回到源码处 并加了条log日志 开始排查问题 我的代码是这样的 查作者 绝对也会有 Set
  • 死锁产生的四个必要条件(缺一不可)

    死锁产生必须同时满足四个条件 只要其中任意一条不成立 死锁就不会发生 1 互斥条件 进程要求对所分配的资源进行排他性控制 即在一段时间内某项资源只被 一个进程所占有 此时若有其他进程请求该资源 则请求进程只能等待 如图一 2 非抢占 进程所
  • 解决OptiSystem安装、使用过程中遇到的问题

    系统环境 Win10系统 问题1 在上一篇文章 Optisystem7 0安装教程 Win10系统 中提到 安装过程中会弹出一个对话框 需要点击 忽略 但是安装过程中出现下图错误 错误代码 0x3 点击忽略 仍然会继续弹出这个对话框 或者第
  • Flink实战-(1)Flink-CDC MySQL同步到MySQL(select)

    背景 基于select语句的Flink CDC 适用于数据同步的全量同步的场景 可以结合 Azkaban 或者dolphin scheduler 做定时调度 T 1 数据同步 1 maven
  • Verdi之nTrace/nSchema

    目录 3 nTrace介绍 3 1 启动Verdi 3 2查看Verdi中的设计结构 3 3查看Verdi中的验证结构 3 4 查找模块和trace信号 3 5 查找string 3 6 信号drive load 3 7 快速查看设计有哪些
  • 使用 javascript 将鼠标指针移动到特定位置

    请注意 无法将鼠标指针移动到 JavaScript 中的特定位置 主要原因是它会给用户带来安全问题并损害用户体验 在这篇文章中 我们将创建一个假的或自定义的鼠标指针 它可能看起来类似于默认系统的鼠标指针 然后我们将使用 JavaScript