鼠标移入盒子,盒子跟随鼠标移动

news2024/12/26 4:06:29

demo效果:

鼠标移入盒子,按下鼠标,开启移动跟随移动模式,再次按下关闭移动模式

涉及主要属性

在元素上单击鼠标按钮时输出鼠标指针的坐标:

var x = event.pageX;     // 获取水平坐标
var y = event.pageY;     // 获取垂直坐标

元素offsetLeft和offsetTop属性:
相当于最近一个有定位的父元素而言的位置,如果父元素没有定位则相当于body的x,y位置。

还有元素的offsetXXX属性不能修改只能用来读取(比如不能写:元素.offsetLeft=200),所以如果要使用(元素.style.xxx)来修改对应的原始位置
元素的offsetXXX和元素的style属性的区别:
1、offsetXX属性只读,style属性可以修改(最主要的区别)
2、offsetXX可以获取任何样式表上的样式,style属性则只能获取style=‘xxx’(行内样式)
3、还有其他的区别可以自己去搜搜嘻嘻

思路:

1、鼠标移入盒子,按下鼠标:开始计算在盒子的相对位置relativeX,relativeY
在这里插入图片描述

2、监听鼠标在盒子里面的移动(盒子和鼠标的位置关系始终保持不变)
3、根据鼠标位置和鼠标相对于盒子的位置计算得出当前盒子位置
在这里插入图片描述
4、鼠标再次点击取消跟随移动

具体代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 清楚浏览器样式 */
        *{
            margin: 0;
            border: 0;
        }
        .box{
            width: 300px;
            height: 300px;  
            background-color: brown;
            position: relative;
            left: 200px;
            top: 200px;
        }
    </style>
</head>
<body>
    <div class="box" id="box">
    </div>
    <script >
    let boxEl = document.getElementById('box')
    let relativeX =  0
    let relativeY = 0
    
    let needMoving = false// 盒子跟随鼠标移动
    boxEl.addEventListener('click',(event)=>{
        // 盒子内部点击 修改是否跟随鼠标移动
        needMoving = !needMoving
        //计算相对位置
        if(needMoving){
            boxEl.style.cursor = 'grab'
            boxMoveWithMouse(event,boxEl)
            document.addEventListener('mousemove', changeElXY)
        }else{
            relativeX =  0
            relativeY = 0
             boxEl.style.cursor = 'default'
        //  移除鼠标移动事件
        document.removeEventListener('mousemove', changeElXY);
        }
    })
    // 鼠标移入盒子 盒子跟随鼠标移动
    function boxMoveWithMouse(e,el){
        // 鼠标在文档位置
      let  pageX = e.pageX
      let  pageY = e.pageY
        // 盒子在文档位置
        let boxOffX = el.offsetLeft
        let boxOffY = el.offsetTop
        // console.log('boxOffX',boxOffX)
        // console.log('boxOffY',boxOffY)
        // 盒子在文档相对位置
        relativeX = pageX - boxOffX
        relativeY = pageY - boxOffY
        // console.log('relativeX',relativeX)
        // console.log('relativeY',relativeY)
    }
     //修改元素位置
     function changeElXY(event){
        //  //鼠标不在盒子里面
         if(relativeX<0||relativeY<0){
         return
        }
       let pageX = event.pageX
        let pageY = event.pageY
        //  console.log('pageX',pageX)
        //  console.log('pageY',pageY)

        // 盒子位置
        let boxX = pageX - relativeX
        let boxY = pageY - relativeY
        // console.log('boxX',boxX)
        // console.log('boxY',boxY)
        //修改盒子位置
        boxEl.style.left = boxX+'px'
        boxEl.style.top = boxY + 'px'
        }
    
    </script>
</body>
</html>

效果演示

在这里插入图片描述

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

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

相关文章

【含开题报告+文档+PPT+源码】基于SSM的景行天下旅游网站的设计与实现

开题报告 随着互联网的快速发展&#xff0c;旅游业也逐渐进入了数字化时代。作为一个旅游目的地&#xff0c;云浮市意识到了互联网在促进旅游业发展方面的巨大潜力。为了更好地推广云浮的旅游资源&#xff0c;提高旅游服务质量&#xff0c;云浮市决定开发一个专门的旅游网站。…

【python】用tk做一个简单的商品搜索更新展示的桌面应用

import tkinter as tk from tkinter import ttk import pandas as pddata_list [{id:1,name: 苹果, price: 6.5,tag:水果},{id:2,name: 香蕉, price: 2.5,tag:水果},{id:3,name: 葡萄, price: 8.5,tag:水果},{id:4,name: 橘子, price: 4.5,tag:水果}, ]df pd.DataFrame(data_…

SwiftUI 如何取得 @Environment 中 @Observable 对象的绑定?

概述 从 SwiftUI 5.0&#xff08;iOS 17&#xff09;开始&#xff0c;苹果推出了全新的 Observation 框架。它作为下一代内容改变响应者全面参与到数据流和事件流的系统中。 有了 Observation 框架的加持&#xff0c;原本需要多种状态类型的 SwiftUI 视图现在只需要 3 种即可大…

海康NVR管理平台EasyNVR多品牌NVR管理工具实现智能化视频管理介入现代化工厂

一、方案背景 在当今这个日新月异的时代&#xff0c;制造业作为国民经济的支柱之一&#xff0c;正经历着前所未有的变革。随着信息技术的飞速发展&#xff0c;工厂的现代化管理手段准确性也越来越高&#xff0c;越来越丰富&#xff0c;各种先进的技术手段比如视频监控系统&…

R语言医学数据分析实践-R编程环境的搭建

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言编程_夏天又到了的博客-CSDN博客 R语言对编程环境的要求不高&#xff0c;可以在多种操作系统平台上…

对于SOCKS协议的一些认知误区有哪些?

代理协议在设备与代理服务器之间的数据交换中起到了关键作用。在这方面&#xff0c;SOCKS代理协议是常见的选择之一&#xff0c;被广泛应用于下载、传输和上传网络数据的场景。然而&#xff0c;关于SOCKS代理协议存在一些常见的误解&#xff0c;让我们来逐一了解。 一、使用SO…

nRF54L15—蓝牙低功耗双核系统级芯片(SoC)

nRF54L15 是 nRF54L 系列的首款系统级芯片 (SoC)。它是一款超低功耗蓝牙 5.4 SoC&#xff0c;具有同类最佳的新型多协议无线电和先进的安全功能。nRF54L 系列以更紧凑的封装将广受欢迎的 nRF52 系列提升到新的水平&#xff0c;具有出色的处理能力和效率、扩展的内存和新型外设。…

开发 - develop-codescan-zwcz53

开发 - develop-codescan-zwcz53 1. 开发 - CodeScan2. 前言3. CodeScan3.1. 工具概述3.2. 编译3.3. 功能3.4. 使用3.5. 高级用法3.5.1. 高扩展性3.5.2. 扫描位置3.5.3. 过滤字符串(只写了JSP PHP)3.5.4. 静态分析依赖情况 3.6. TODO3.7. 支持项目3.8. 详细使用文章(内附案例)…

运维怎么转行网络安全?

经常有人问我&#xff1a;干网工、干运维多年遇瓶颈&#xff0c;想学点新技术给自己涨涨“身价”&#xff0c;应该怎么选择&#xff1f; 聪明人早已经用脚投票&#xff1a;近年来&#xff0c;越来越多运维的朋友寻找新的职业发展机会&#xff0c;将目光聚焦到了网络安全产业。…

大数据-174 Elasticsearch Query DSL - 全文检索 full-text query 匹配、短语、多字段 详细操作

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Python 3.13 中的 7 个新类型特性

刚刚发布的 Python 3.13 继续挑战了效率和优雅的极限。 除了在 Python 社区讨论已久的令人兴奋的自由线程模式 和 Just-In-Time 编译器之外&#xff0c;吸引我的还有类型系统的新改进。 在早期版本引入的强大类型系统基础上&#xff0c;Python 3.13 将引入七个新的类型特性&a…

数学考研高分突破:解题思维与速度的双重修炼

随着考研季的临近&#xff0c;众多考生为了在数学这一科目中取得高分&#xff0c;纷纷投入到紧张的复习中&#xff0c;如何在有限的时间内&#xff0c;既提高解题思维&#xff0c;又提升解题速度&#xff0c;成为了许多考生心中的难题&#xff0c;本文将围绕这一主题&#xff0…

如何批量下载采集淘宝图片?3个方法可以帮助你

如何批量下载采集淘宝图片&#xff1f;在现代电子商务的背景下&#xff0c;淘宝作为中国最大的在线购物平台之一&#xff0c;承载了数以亿计的商品和信息。对于从事电商运营、市场推广或网络营销的人员而言&#xff0c;采集淘宝图片已经成为日常工作中的重要任务。这不仅是为了…

网页前端开发之HTML入门

HTML入门 HTML全称HyperText Markup Language&#xff0c;中文译为&#xff1a;超文本标记语言。 它有一个同胞兄弟叫&#xff1a;XML&#xff0c;全称Extensible Markup Language&#xff0c;中文译为&#xff1a;可扩展标记语言。 简单来讲&#xff0c;它们都是标记语言。 …

Excel重新踩坑2:Excel数据类型;自定义格式(设置显示格式);分列操作;其他常用操作;一些重要操作

0、Excel数据类型&#xff1a;文本、数字、逻辑值、错误值 文本数据类型&#xff1a;输入什么显示什么&#xff1b;常见错误值 VALUE&#xff1a;文本与数字运算&#xff1b; DIV/0&#xff1a;分母为0&#xff1b; NAME&#xff1a;公式名称错误&#xff1b; N/A&#xff1a;…

最新Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版图文教程

CleanMyMac X mac版下载是一款功能更加强大的系统优化清理工具&#xff0c;软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉&#xff0c;节省宝贵的磁盘空间。CleanMyMac X for mac相比于 CleanMyMac3来说&#xff0c;功能增加了不少&#xff0c;比如新增…

【数据分析】影响系数 =(今日量-昨日量)/(今日总量-昨日总量)

1. 影响系数 影响系数是一个用来衡量两个相关变量之间变化关系的指标。在给定的公式中&#xff1a; 今日量&#xff1a;指的是当前时间点的某个特定变量的值&#xff0c;比如今天某个商品的销售数量。昨日量&#xff1a;指的是前一个时间点&#xff08;通常是前一天&#xff…

实操部署amis-admin

当需要做一个web服务的时候&#xff0c;前端的实现很令我头疼。搜了一圈前端低代码框架后&#xff0c;注意到百度贡献的amis&#xff0c;通过json来写前端&#xff0c;很酷啊。不得不说&#xff0c;一个好的demo项目&#xff0c;真的能让人迅速进入状态&#xff0c;比直接看文档…

uniapp 省、市、区、乡镇 数据层级选择插件 Ba-DataPicker

Ba-DataPicker 是一款uniapp数据层级选择弹窗插件。支持省市区乡四级&#xff1b;支持自定义数据。 支持省、市、区、乡镇四级支持自定义数据支持字母检索 截图展示 支持定制、本地包、源码等&#xff0c;有建议和需要&#xff0c;请点击文章结尾“Uniapp插件开发”联系我&am…

高级prompt工程技巧:如何引导模型生成更精确的输出

在人工智能领域&#xff0c;提示词工程&#xff08;Prompt Engineering&#xff09;是提升模型输出质量的关键技术之一。通过精心设计的提示词&#xff0c;我们可以引导模型生成更符合预期的结果。本文将深入探讨几种高级提示词工程技巧&#xff0c;并提供实际操作的示例&#…