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

news2024/11/28 1:33:44

文章目录

    • 使用一些 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 更改鼠标位置的直接方法,因为它有一些缺陷。 但是在编程中总是有不同的和非官方的做事方式。

要解决鼠标指针移动到特定位置的问题,我们必须隐藏原来的鼠标指针。 然后,我们有两个创建我们的自定义鼠标指针并编写一些 JavaScript 代码使其移动到特定位置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/626867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题 Java 实现【字符串加密】【2023Q1 100分】,附详细解题思路

一、题目描述 有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,将所得结果作为新字母表开头,并将新建立的字母表中未出现的字母按照正常字母表顺序加…

计算机网络管理-实验5-安装试用SNMPc网络管理软件

一、实验目的 学习SNMPc网络管理软件安装&#xff0c;初步了解其使用方法&#xff0c;对比常用网管软件的特点。 二、实验内容与设计思想 实验内容&#xff1a;编写代码&#xff0c;测试 1. 安装与配置SNMPc网络管理软件&#xff08;安装使用方法参见教材第6章&#xff09;…

自主可控!搭载龙芯二号,飞凌嵌入式FET-2K0500-C核心板发布

作为国内领先的信息技术核心产品研发企业&#xff0c;龙芯中科致力于打造自主开放的软硬件生态和信息产业体系&#xff0c;为国家战略需求提供自主、安全、可靠的处理器。现在&#xff0c;飞凌嵌入式与龙芯中科强强联手&#xff0c;共同推出FET-2K0500-C核心板&#xff01; 飞…

接口耗时2000多秒!我人麻了!

接口耗时2000多秒&#xff01;我人麻了&#xff01; 前几天早上&#xff0c;有个push服务不断报警&#xff0c;报了很多次&#xff0c;每次都得运维同学重启服务来维持&#xff0c;因为这个是我负责的&#xff0c;所以我顿时紧张了起来&#xff0c;匆忙来到公司&#xff0c;早饭…

有什么好用的通用型项目管理软件

目前市面上的项目管理产品非常丰富&#xff0c;在选择项目管理软件的过程中一一了解这些产品哪个更好更适合自己的团队&#xff0c;无疑会浪费很多时间成本。通用性项目管理工具可以满足大部分团队的项目管理需求&#xff0c;那有什么好用的通用型项目管理软件呢&#xff1f;知…

漏洞利用 --- VSFTPD 2.3.4 后门

Metasploit工具 &#xff08;1&#xff09;术语解释&#xff1a; <1> 渗透攻击&#xff08;Exploit&#xff09;&#xff1a;指由攻击者或渗透测试者利用一个系统、应用或服务中的安全漏洞&#xff0c;所进行的攻击行为。 <2> 攻击载荷&#xff08;Payload&…

go快速开发入门指南(一)

Go快速开发指南 &#x1f4a1; 由于工作和未来大数据发展需要&#xff0c;需要对Go语言进行一定学习与使用&#xff0c;特此记录。本系列不会说太多文字概念&#xff0c;重在业务实践和相关开发技巧的总结&#xff0c;和错误的排查记录。因此&#xff0c;如有片面或不足之处&am…

Java 实现类似于网盘一样的文件管理功能

**需求是使用阿里云oss存储&#xff0c;实现一个文件管理功能,支持新建文件夹、文件的上传、下载、批量下载、删除、批量删除、预览、移动、名称搜索、文件路径搜索等。**本人也参考了网上的一些项目&#xff0c;这里记录一下后端的Java代码实现&#xff1a; 首先是表设计的实…

SpringBoot共享图书平台(有文档)

1.简介 SpringBoot共享图书平台 本项目比较简单&#xff0c;适合练手&#xff0c;也适合二开 1.访问地址 http://localhost/ 超级管理员账户 账户名&#xff1a;admin 密码&#xff1a;admin123 普通用户 账户名&#xff1a; zhangsan 密码&#xff1a;123456 普通用户 账…

Talk| CMU博士胡亚飞 :基于离线强化学习的机器人自主探索

本期为TechBeat人工智能社区第503期线上Talk&#xff01; 北京时间6月07日(周三)20:00&#xff0c;CMU Robotics Institute 在读博士生—胡亚飞的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “基于离线强化学习的机器人自主探索 ”&#xff0c…

chatgpt赋能python:Python快速复制

Python快速复制 Python是一种高级编程语言&#xff0c;具有简单易学、优雅简洁的编程风格&#xff0c;也被称为“胶水语言”&#xff0c;因为它可以与其他编程语言很好地结合使用。在Python中&#xff0c;复制文件或文件夹是一个常见的任务&#xff0c;因此在本文中&#xff0…

过五关斩六将,欧科云链荣膺2023安博会“创新产品优秀奖”

6月7日&#xff0c;由中华人民共和国公安部指导、中华人民共和国商务部批准&#xff0c;公安部主管的中国安全防范产品行业协会主办和承办的2023中国国际社会公共安全产品博览会&#xff08;以下简称&#xff1a;安博会&#xff09;正式开幕。 此次安博会&#xff0c;欧科云链携…

6月9日,亚马逊云科技携手出海新势力一同而来

向全球价值链上游奋进 中国企业增强国际竞争力的关键&#xff0c;是努力朝全球价值链上游奋进&#xff0c;发力技术出海。中国的出海新机遇&#xff0c;背后曾是疫情在全球按下数字互联和数字化升级的快进键&#xff0c;跨境电商、在线社交、移动支付、数字服务等数字经济迎来…

chatgpt赋能python:Python快速处理数据的SEO文章

Python快速处理数据的SEO文章 Python是一种通用的高级编程语言&#xff0c;被广泛用于处理数据和科学计算。它以其简洁和高效的语法闻名&#xff0c;可以在短时间内编写出大量的代码&#xff0c;从而快速处理数据。在本文中&#xff0c;我们将讨论如何使用Python快速处理数据&…

万字详解普遍操作系统进程七态与Linux进程七态

作为一个称职的系统管理员&#xff0c;为了更熟悉进程的管理流程&#xff0c;我们必须要知道进程的不同状态所对应的意义。 目录 了解进程状态普遍操作系统的概念就绪状态运行状态等待状态阻塞状态挂起状态暂停状态终止状态 Linux下的进程状态R (running)运行状态S (sleeping)可…

开关柜无线测温技术的研发与发展前景

安科瑞虞佳豪 开关柜无线测温技术发展前景 当前&#xff0c;随着我国科技水平的迅速提升&#xff0c;无线测温技术的研制与应用越来越多地引起国内外专家学者的关注&#xff0c;同时也推动了电力企业对其进行更为广泛的研究与开发&#xff0c;目前已有多种在线检测系统应用于开…

【Android】WMS(三)Window的更新UI刷新

Window的更新 在 Android 中&#xff0c;窗口的更新是一个非常常见的事情。比如&#xff0c;在使用 App 过程中&#xff0c;需要弹出键盘窗口或者切换横竖屏时&#xff0c;就会发生窗口的更新。 首先&#xff0c;当需要更新窗口时&#xff0c;会调用 WindowManager 的 updateV…

基于Java+SpringBoot+Vue前后端分离校园闲置物品交易网站

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

POI in Action

POI 组件依赖 按需引入对应依赖 (给出官方的指引) 组件作用Maven依赖POIFSOLE2 FilesystempoiHPSFOLE2 Property SetspoiHSSFExcel XLSpoiHSLFPowerPoint PPTpoi-scratchpadHWPFWord DOCpoi-scratchpadHDGFVisio VSDpoi-scratchpadHPBFPublisher PUBpoi-scratchpadHSMFOutloo…

MCP1501基准电源系列输出电容为什么不能超过300P

1 介绍 在我们通常理解中基准的输出电容需要在100nF以上&#xff0c;才能有较好的性能输出&#xff0c;为什么MCP1501系列官方推荐输出负载电容不能超过300P呢 2 原理分析 如下是MCP1501手册中标注的&#xff0c;最大负载电容不能超过300pF&#xff0c;超过300pF容易振荡 MC…