js操作元素的其他操作(4个案例+效果图+代码)

news2024/11/26 6:03:40

目录

1. 获取元素的位置和大小

案例:获取元素的位置和大小

1.代码

2.效果

2. 获取元素的可视区域

案例:获取元素的可视区域

1.代码

2.效果

3. 元素的滚动操作

案例:元素的滚动操作

1.代码

2.效果

4. 获取鼠标指针位置

案例:时刻获取鼠标位置

1.代码

2.效果

案例:拖动的小球

1.代码

2.效果


1. 获取元素的位置和大小

  • offsetParent: 返回作为该元素带有定位元素的最近的(指包含层级上的)元素。如果这个元素本身或者其任何父级没有使用CSS定位,则offsetParent通常是<body>元素。
  • offsetLeft: 返回当前元素相对于其offsetParent元素左边的距离,不包括边框、外边距和内边距。
  • offsetTop: 返回当前元素相对于其offsetParent元素顶部的距离,同样不包括边框、外边距和内边距。
  • offsetWidth: 返回元素的布局宽度,包括padding、内容区域和border,但不包括margin。
  • offsetHeight: 返回元素的布局高度,包括padding、内容区域和border,但不包括margin。

案例:获取元素的位置和大小

1.代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>获取元素的位置和大小</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f0f0;
            margin: 0;
            padding: 20px;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        #myDiv {
            background-color: #fff;
           border: 1px solid #ccc;
        }
    </style>


</head>
<body>
    <div id="myDiv">这是一个元素</div>
    
    <!-- 获取元素的位置和大小 -->
     <script>
        //获取div元素
        var myDiv = document.getElementById("myDiv");
        console.log(myDiv);
        console.log(myDiv.offsetWidth);
        console.log(myDiv.offsetHeight);
        console.log(myDiv.offsetLeft);
        console.log(myDiv.offsetTop);
        
    </script>
</body>
</html>

2.效果

2. 获取元素的可视区域

  • clientLeft: 返回元素左侧边框的宽度。
  • clientTop: 返回元素顶部边框的高度。
  • clientWidth: 返回元素内部的宽度,即内容区域加上内边距(padding),但不包括边框(border)、外边距(margin)和垂直滚动条(如果有)。
  • clientHeight: 返回元素内部的高度,即内容区域加上内边距(padding),但不包括边框(border)、外边距(margin)和水平滚动条(如果有)。

案例:获取元素的可视区域

1.代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>获取元素的可视区域</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f0f0;
            margin: 0;
            padding: 20px;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        #myDiv {
            background-color: #fff;
           border: 1px solid #ccc;
        }
    </style>
</head>
<body>
    <div id="myDiv">我是一个div元素</div>

    <script>
        //获取控件
        var myDiv = document.getElementById("myDiv");

        console.log(myDiv.clientLeft)
        console.log(myDiv.clientTop)
        console.log(myDiv.clientWidth)
        console.log(myDiv.clientHeight)
    </script>
    
</body>
</html>

2.效果

3. 元素的滚动操作

  • scrollLeft: 设置或返回一个元素被滚动到左侧的距离。
  • scrollTop: 设置或返回一个元素被滚动到顶部的距离。
  • scrollWidth: 返回元素内容的完整宽度,即使该内容在视图中不可见(比如超出容器的部分)。它包含了元素的内容宽度加上padding,但不包括border和margin。
  • scrollHeight: 返回元素内容的完整高度,与scrollWidth类似,它也考虑了那些可能由于滚动而未显示的内容部分。

案例:元素的滚动操作

1.代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>元素的滚动操作</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f0f0;
            margin: 0;
            padding: 20px;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        #container {
            background-color: #fff;
            border: 1px solid #ccc;
        }
        #box {
            width: 200px;
            height: 100px;
            background-color: #007bff;
            border-radius: 5px;
            /** 滚动设置*/
            overflow: scroll;
        }
    </style>
</head>
<body>
    
    <div id="container">
        <div id="box">
            <p>这是一篇很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的文章</p>
        </div>
    </div>
    <!-- 元素的滚动操作 -->
     <script>
        // 获取元素
        var box = document.querySelector("#box");

        // 事件
        box.addEventListener("scroll",()=>{
            console.log("滚动了");
            console.log(box.scrollTop);
            console.log(box.scrollLeft);
            console.log(box.scrollHeight);
            console.log(box.scrollWidth);
        })

     </script>
    
</body>
</html>

2.效果

4. 获取鼠标指针位置

  • clientX 和 clientY: 在事件对象中提供鼠标点击时相对浏览器窗口(viewport)的坐标。
  • pageX 和 pageY: 提供鼠标点击时相对于整个文档的坐标,不受滚动影响。
  • screenX 和 screenY: 给出鼠标点击时相对于用户屏幕左上角的绝对坐标,这通常用于跨窗口或全屏应用程序。

案例:时刻获取鼠标位置

1.代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>实时获取鼠标位置</title>

</head>

<body>
    <div id="mousePosition">
        <p>鼠标位置:</p>
        <p id="mouseX"></p>
        <p id="mouseY"></p>
    </div>
    <button id="onButton">装载时刻获取鼠标位置</button>
    <button id="offButton">卸载时刻获取鼠标位置</button>

    <!-- script挂载鼠标移动事件 -->
    <script>
        //获取显示组件
        var mousePosition = document.getElementById("mousePosition");

        //获取按钮
        var onButton = document.getElementById("onButton");
        var offButton = document.getElementById("offButton");

        // 鼠标移动事件处理函数
        function handleMouseMove(event) {
            var mouseX = document.getElementById("mouseX");
            var mouseY = document.getElementById("mouseY");
            // 获取鼠标相对于窗口的位置
            var mouseXa = event.clientX;
            var mouseYa = event.clientY;

            //这个应该是更新文档


            mouseX.textContent = "X: " + mouseXa;
            mouseY.textContent = "Y: " + mouseYa;
        }

        // 装载dom节点
        onButton.onclick = function () {
            document.addEventListener("mousemove", handleMouseMove);
        };
        //卸载dom节点
        offButton.onclick = function () {
            document.removeEventListener("mousemove", handleMouseMove);
        };
    </script>

</body>

</html>

2.效果

3.解释

这段HTML代码创建了一个简单的网页,它能够实时显示鼠标在页面上的位置。这里有两个按钮:“装载时刻获取鼠标位置”和“卸载时刻获取鼠标位置”,用户可以通过点击这两个按钮来控制是否开启或关闭实时鼠标位置的追踪功能。下面我用口语化的语言来解释一下这段代码:

  1. 页面结构:

    • 有一个标题叫做“实时获取鼠标位置”。
    • 页面中包含一个div元素,用来展示鼠标的位置信息。这个div里有三个段落(p标签):第一个段落是静态文本“鼠标位置:”,接下来两个分别用于显示鼠标的X坐标和Y坐标。
    • 页面上有两个按钮,一个是用来启动鼠标位置追踪的,另一个是用来停止追踪的。
  2. JavaScript脚本:

    • 首先,通过document.getElementById方法找到了页面中的几个关键元素:显示鼠标位置的div以及两个按钮。
    • 定义了一个函数handleMouseMove,每当鼠标在文档上移动时,这个函数就会被调用。在这个函数里,会读取当前鼠标相对于浏览器窗口的X和Y坐标,并更新到页面上相应的段落里。
    • onButton按钮绑定了一个点击事件处理程序,当用户点击这个按钮时,会为整个文档添加一个鼠标移动事件监听器,这样每次鼠标移动都会触发handleMouseMove函数。
    • offButton按钮绑定了另一个点击事件处理程序,它的作用正好相反,即移除之前添加的鼠标移动事件监听器,从而停止更新鼠标位置。

        简单来说,当你打开这个网页时,你可以看到两个按钮。如果你点击了“装载时刻获取鼠标位置”按钮,那么无论你把鼠标移动到页面的哪个地方,页面都会显示出当前鼠标的具体位置(X坐标和Y坐标)。而一旦你点击了“卸载时刻获取鼠标位置”按钮,这种追踪就会停止,页面不再显示鼠标的实时位置。

案例:拖动的小球

1.代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>拖动小球</title>

    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            margin: 0;
            padding: 20px;
            display: flex;
            flex-direction: column;
            align-items: center;
        }

        #ball {
            width: 50px;
            height: 50px;
            background-color: #007bff;
            border-radius: 50%;
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            cursor: move;
            /**动画挂载*/
            animation: ballBreath 1s linear infinite;
        }

        /**小球呼吸动画+色变+频率比较高*/
        @keyframes ballBreath {
            0% {
                transform: scale(1);
                background-color: #2f72b9;
            }

            10% {
                transform: scale(1.2);
                background-color: #beb59a;
            }

            20% {
                transform: scale(1);
                background-color: #0ff855;
            }

            30% {
                transform: scale(1.2);
                background-color: #271e05;
            }

            40% {
                transform: scale(1);
                background-color: #8a1ee2;
            }

            50% {
                transform: scale(1.2);
                background-color: #bd1616;
            }

            60% {
                transform: scale(1);
                background-color: #00db63;
            }

            70% {
                transform: scale(1.2);
                background-color: #d3e010e5;
            }

            80% {
                transform: scale(1);
                background-color: #007bff;
            }

            90% {
                transform: scale(1.2);
                background-color: #13fc4d;
            }

            100% {
                transform: scale(1);
                background-color: #007bff;
            }
        }

        .mouse-position {
            background-color: white;
            border: 1px solid #ccc;
            border-radius: 5px;
            padding: 20px;
            margin-top: 20px;
            width: 300px;
            text-align: center;
        }

        .mouse-position p {
            margin: 5px 0;
        }

        audio {
            display: none;
        }
    </style>
</head>

<body>

    <div id="ball"></div>
    <audio id="myAudio" src="https://freepd.com/music/The%20Celebrated%20Minuet.mp3" loop autoplay hidden></audio>
    <div class="mouse-position">
        <p>小球位置:</p>
        <p id="mouseX"></p>
        <p id="mouseY"></p>
    </div>

    <!-- 拖动小球的功能 -->
    <script>
        // 获取小球
        var ball = document.querySelector("#ball");

        // 小球按下事件 //挂载mousemove事件
        ball.onmousedown = function (event) {
            // 挂载函数
            ball.onmousemove = function (event) {
                moveBall(event);
            }
        }

        // 小球松开鼠标事件  //卸载mousemove事件
        ball.onmouseup = function () {
            ball.onmousemove = null;
        }

        // 时刻获取鼠标位置和设置小球位置
        function moveBall(event) {
            // 获取鼠标位置
            var mouseX = event.clientX;
            var mouseY = event.clientY;

            // 设置小球位置
            ball.style.left = mouseX - ball.offsetWidth / 2 + "px";
            ball.style.top = mouseY - ball.offsetHeight / 2 + "px";

            // 坐标刷新
            var mouseXElement = document.getElementById("mouseX");
            var mouseYElement = document.getElementById("mouseY");
            mouseXElement.textContent = "X: " + mouseX;
            mouseYElement.textContent = "Y: " + mouseY;
        }
    </script>
</body>

</html>

2.效果

3.解释

这段代码创建了一个网页,其中包含一个小球,用户可以用鼠标拖动这个小球,并且会显示小球当前的位置。此外,还有一个背景音乐自动播放。下面我用口语化的语言来解释一下这段代码:

  1. 页面设置:

    • 首先定义了网页的基本信息,比如字符集是UTF-8,确保文字能正确显示。
    • 设置了视口(viewport),让网页在移动设备上看起来更好。
    • 网页标题叫做“拖动小球”。
  2. 样式:

    • 页面的背景颜色设置为浅灰色,字体使用Arial或类似的无衬线字体。
    • 小球是一个50x50像素的圆形,初始时位于屏幕正中,有一个呼吸效果(即大小和颜色随时间变化)。
    • 有个看不见的小方块用来显示鼠标位置。
  3. 小球动画:

    • 小球有一个叫ballBreath的动画,它会让小球不断地改变大小(从正常到稍微大一点再回到正常)并且同时改变颜色,这个过程持续一秒,然后重复。
    • 动画过程中颜色会在多种预设的颜色之间切换,给小球一个生动的效果。
  4. 音频:

    • 加载了一段音乐并让它循环播放。音乐文件是从一个外部链接获取的,用户看不到这个播放器,因为它被隐藏了。
  5. 鼠标操作:

    • 当用户点击小球并开始拖动时,浏览器会监听鼠标的移动事件。
    • 拖动时,小球会跟随鼠标指针移动到新位置,同时更新显示鼠标坐标的位置。
    • 用户松开鼠标后,停止监听鼠标移动事件,这样小球就不会继续跟着鼠标走了。

        总的来说,这段代码实现了一个互动性很强的小球,可以随着用户的鼠标动作移动,并伴随着背景音乐。当你拖动小球时,还会实时看到它的X和Y坐标。

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

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

相关文章

第一个Flutter应用(一)

1、创建项目 1.1 新建 1.2 选择Flutter SDK的位置 1.3 项目名称 英文单词加下划线起名规范&#xff0c;其他默认即可。 1.4 点击运行 发生报错显示我们的JAVA版本不符合 1.5 更改版本设置 1.6 再次启动项目 2、分析页面代码 以下是lib/main.dart的源代码&#xff08;为了阅…

为什么一定要用大模型,为什么说AI大模型开发人人必备?

AI 大模型技术经过2023年的狂飙&#xff0c;2024年迎来应用的落地&#xff0c;对 IT 同学来讲&#xff0c;这里蕴含着大量的技术机会&#xff0c;人人必备开发技能。 文讨论 AI 大模型开发技术大师的修炼之道&#xff0c;试图找到一个共同的速成模式&#xff0c;希望对 IT 同学…

数据结构(7.4_2)——B树的插入删除

B树的插入 B树的删除 对非终端结点的删除 对终端结点的删除 终端结点关键字低于下限时&#xff1a; 借后继结点&#xff1a; 借前驱结点&#xff1a; 结点合并&#xff1a; 总结 &#xff1a;

图像分割恢复方法

传统的图像分割方法主要依赖于图像的灰度值、纹理、颜色等特征&#xff0c;通过不同的算法将图像分割成多个区域。这些方法通常可以分为以下几类&#xff1a; 1.基于阈值的方法 2.基于边缘的方法 3.基于区域的方法 4.基于聚类的方法 下面详细介绍这些方法及其示例代码。 1. 基…

论文翻译 | Dynamic Prompting: A Unified Framework for Prompt Tuning

摘要 已经证明&#xff0c;在从预训练的基础模型中高效提取知识方面&#xff0c;提示调整&#xff08;prompt tuning&#xff09;技术是非常有效的&#xff0c;这些基础模型包括预训练的语言模型&#xff08;PLMs&#xff09;、视觉预训练模型以及视觉-语言&#xff08;V-L&…

【进阶OpenCV】 (7)--视频处理 - 之 - 背景建模及目标跟踪

文章目录 一、背景建模1. 目的2. 方法3. 帧差法4. 光流估计 二、代码步骤1. 读取视频2. 构建卷积核3. 背景建模 总结 一、背景建模 指在计算机视觉中&#xff0c;从视频序列中提取出静态背景的一种技术。在视频中&#xff0c;背景通常被定义为相对稳定的部分&#xff0c;例如墙…

vue2中 vue-count-to组件让数字从某个数字动态的显示到某个数字(后附vue3的用法)

1、首先安装 npm install vue-count-to2、使用 2.1、先导入组件 import countTo from ‘vue-count-to’2.2、注册组件 components: { countTo },2.3、使用组件 <countTo> <template><div class"home"><countTo class"count-to&qu…

【查找算法概念】与【线性表的相关查找算法】

1.知识回顾 2.查找算法相关问题汇总 2.1在哪里查找 查找表 2.2通过什么进行查找 关键字的对应 主关键字&#xff1a;比如我们可以通过一个学号来唯一确定一名学生 这里的学号就是一种主关键字。 次关键字&#xff1a;而通过一个名字李华&#xff0c;我们可能会确定不止一名…

selenium的webdriver常用方法和属性介绍(2)

selenium的webdriver介绍 从selenium导入webdriver模块&#xff0c;在pycharm中跳转webdriver模块的__init__.py文件&#xff0c;内容如图所示&#xff1a;从selenium包的子目录中导入了很多模块并做了重命名&#xff0c;用于支持如下 Chrome/Edge/Ie/Firefox/Safari浏览器。 使…

基于深度学习的多焦点图像融合系统【数据集+深度学习模型+源码+PyQt5界面】

深度学习多焦点聚焦图像融合 文章目录 研究背景代码下载链接一、效果演示1.1 界面设计1.2 图像融合演示11.3 图像融合演示21.4 图像融合演示3 二、技术原理2.1 引言2.2 融合策略2.3 深度特征的提取2.4 融合策略2.4.1 利用深度特征计算模糊度2.4.2 去噪与平滑2.4.3 图像融合 三、…

计算机网络——p2p

流媒体是指在网络上以流式传输技术实时播放的多媒体内容&#xff0c;如音频、视频等。以下是关于流媒体的详细介绍&#xff1a; 一、工作原理 数据分割与传输&#xff1a; 流媒体技术将多媒体文件分割成较小的数据包。这些数据包按照特定的顺序进行编号&#xff0c;然后通过网络…

Luminar激光雷达公司裁员重组的深度分析

在科技行业风起云涌的今天,每一家企业都面临着前所未有的挑战与机遇。当地时间9月23日,美国激光雷达领域的领军企业Luminar Technologies向美国证券交易委员会(SEC)提交了一份8-K报告,正式宣布了一项重大的业务重组计划,其核心内容是通过进一步裁员来优化成本结构,以期在…

【英语】3. 词源

文章目录 前言动词变名词解释e.g. 一、词根二、介词短语spect/spec: means see, look 合成词三、介词本身的意思总结参考文献 前言 进行英语前后缀的复习 动词变名词 解释 外国的表达方式&#xff1a;更多地偏向静态&#xff0c;因此更多地使用名词 e.g. (rather Chinglish…

【数据结构与算法】排序算法

3.7 排序算法 概述 比较排序算法 算法最好最坏平均空间稳定思想注意事项冒泡O(n)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)Y比较最好情况需要额外判断选择O( n 2 n^2 n2)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)N比较交换次数一般少于冒泡堆O( n l o g n nlogn nlogn)O( n l o g n nlogn …

【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示

前言 大家好吖&#xff0c;欢迎来到 YY 滴 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》…

高效医疗:Spring Boot医院管理解决方案

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

算法题总结(十一)——二叉树下

257、二叉树的所有路径 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5] 输出&#xff1a;["1->2->5",&…

【设计模式】软件设计原则——依赖倒置合成复用

依赖倒置引出 依赖倒置 定义&#xff1a;高层模块不应该依赖低层模块&#xff0c;二者都应该依赖抽象&#xff1b;抽象不应该依赖细节&#xff0c;细节应该依赖抽象。面向接口编程而不是面向实现编程。 通过抽象使用抽象类、接口让各个类or模块之间独立不影响&#xff0c;实现…

Charles安卓抓包环境配置

下载安装Charles 官网搜索然后直接下载就可以了 抓HTTP的包 HTTP代理 在Proxy->Proxy Settings里配置HTTP代理 手机上配置代理 进入WIFI&#xff0c;找到连接的网络&#xff0c;打开高级选项&#xff0c;里面有一个代理选项&#xff0c;将其改为手动&#xff0c;然后…

<<机器学习实战>>12-14节笔记:机器学习模型可信度、逻辑回归模型及多分类问题处理

12机器学习模型可信度 是否检验模型的指标好就一定说明模型可用&#xff1f;不是&#xff0c;必须得保证训练的样本和整天基本满足同一分布。 统计学习和机器学习区别&#xff1a;统计学习是根据样本模拟总体规律进而去预测&#xff08;当然要比对样本和总体的统计量是否一致&…