JavaScript 中的 DOM 尺寸测量与节流技巧

news/2024/10/16 7:15:13 标签: javascript, 开发语言, ecmascript

“今日事,今日毕”

文章目录

  • 前言
    • 文章有误敬请斧正 不胜感恩!
    • 一、如何获取元素的尺寸
      • 1. `Element.clientHeight` 和 `Element.clientWidth`
      • 2. `Element.scrollHeight` 和 `Element.scrollWidth`
      • 3. `Element.scrollTop` 和 `Element.scrollLeft`
    • 二、节流(Throttle)与防抖(Debounce)
      • 1. 节流(Throttle)
      • 2. 节流和防抖的应用场景
  • 总结


前言

写在开始:

在开发网页时,我们经常需要获取元素的宽高,或者处理一些像滚动、窗口调整这样的事件。不过,如果不加以优化,频繁触发这些事件可能会影响页面性能。今天这篇文章会介绍如何通过 JavaScript 获取 DOM 元素的尺寸,同时聊聊如何使用节流(Throttle)来优化高频事件处理,让你的网页跑得更流畅。


文章有误敬请斧正 不胜感恩!

以下是本篇文章正文内容,


一、如何获取元素的尺寸

JavaScript 提供了不少方法来获取元素的宽度和高度,下面是几个常用的。

1. Element.clientHeightElement.clientWidth

  • clientHeight:返回元素的高度,包括 padding,但不包括 bordermargin 和滚动条。
  • clientWidth:返回元素的宽度,逻辑跟 clientHeight 类似。

这些属性很适合用来获取元素的实际可见区域,比如你需要知道某个元素在页面上占了多大的空间。

// 获取浏览器视口的高度
let viewportHeight = document.documentElement.clientHeight;

// 获取某个元素的宽度
let elementWidth = document.querySelector('.my-element').clientWidth;

2. Element.scrollHeightElement.scrollWidth

这两个属性代表元素的总高度总宽度,包括那些超出可视范围的内容,适用于有滚动条的元素。

// 获取页面的总高度
let pageHeight = document.documentElement.scrollHeight;

// 获取某个滚动区域的总宽度
let elementScrollWidth = document.querySelector('.scrollable-element').scrollWidth;

3. Element.scrollTopElement.scrollLeft

  • scrollTop:表示已经向下滚动了多少像素。
  • scrollLeft:表示已经向右滚动了多少像素。

这两个属性经常用来监听滚动事件,比如你想在用户滚动到一定位置时触发加载更多内容。

// 获取当前页面滚动的垂直距离
let scrollTop = document.documentElement.scrollTop;

二、节流(Throttle)与防抖(Debounce)

在开发中,像滚动、窗口调整这样的事件有时候触发得非常频繁。如果每次事件触发都去执行某些耗时操作,页面可能会变得很卡。这时我们可以使用节流防抖来优化这些操作。

1. 节流(Throttle)

节流的作用是让某个函数在固定时间内只能执行一次。不管这个时间段内事件被触发了多少次,函数都只会在时间间隔内执行一次。

function throttle(fn, delay) {
  let valid = true;
  return function() {
    if (!valid) {
      return;
    }
    valid = false;
    setTimeout(() => {
      fn();
      valid = true;
    }, delay);
  };
}

// 示例:每隔 300 毫秒打印一次滚动条的位置
function showScrollPosition() {
  let scrollTop = document.documentElement.scrollTop;
  console.log('滚动条位置:' + scrollTop);
}

window.onscroll = throttle(showScrollPosition, 300);

2. 节流和防抖的应用场景

  • 搜索框:当用户在搜索框中输入时,使用节流来减少过于频繁的请求,比如每隔 500 毫秒发送一次请求。
  • 窗口调整(resize):在页面调整大小时,通常我们只想在用户停止调整后执行一次操作,这时候可以使用防抖。

总结

今天通过 JavaScript 获取 DOM 元素的尺寸,以及使用节流(Throttle)来优化高频事件处理的内容到此为止,下期再见.


http://www.niftyadmin.cn/n/5707537.html

相关文章

重置SteamVR

在Vr开发过程中,有时候会出现Unity启动便卡死的情况,那么最简单的操作就是重置一下SteamVR 操作步骤 关闭Steam和SteamVR找到并删除以下所有文件 C:\Program Files (x86)\Steam\steamapps\common\SteamVR\resources\settings\default.vrsettingsC:\Pro…

内核定时器API实现点灯

1.内核定时器 定时器是一个很常用的功能,需要周期性处理的工作都要用到定时器。 Linux 内核定时器 采用系统时钟来实现,并不是6ull里面的硬件定时器。 Linux 内核定时器使用很简单,只需要提供超时时间(相当于定时值)和定时处理函数即…

R语言手工实现主成分分析 PCA | 奇异值分解(svd) 与PCA | PCA的疑问和解答

几个问题: pca可以用相关系数矩阵做吗?效果比协方差矩阵比怎么样?pca做完后变量和样本的新坐标怎么旋转获得?pca做不做scale和center对结果有影响吗?pca用因子分解和奇异值分解有啥区别?后者怎么获得变量和样本的新坐标?1. 用R全手工实现 PCA(对比 prcomp() ) 不借助包…

进程的优先级详解(在Linux中观察进程优先级,优先级的概念,优先级范围,进程的切换和切换的过程和理解)

文章目录 进程的优先级什么是进程的优先级?进程的优先级的划分1. 优先级的级别划分2. 动态与静态优先级 那么为什么要有优先级呢?区分 那么是怎么确定优先级的呢? Linux中的优先级Linux中的进程优先级补充 Linux优先级的范围进程的切换切换过…

python机器学习(网络搜索和交叉验证)

""" 网格搜索: 指的是 GridSearchCV这个工具的功能, 可以帮助我们寻找最优的 超参数. 超参数解释: 在机器学习中, 我们把需要用户手动传入的参数称之为: 超参数. 交叉验证: 指的是对数据集进行划分, 即: 把数据分成N份进行验证 第1次:…

【Python语言进阶(二)】

一、函数的使用方式 将函数视为“一等公民” 函数可以赋值给变量函数可以作为函数的参数函数可以作为函数的返回值 高阶函数的用法(filter、map以及它们的替代品) items1 list(map(lambda x: x ** 2, filter(lambda x: x % 2, range(1, 10)))) # filter…

《诺贝尔物理学奖一百年》一书

郭奕玲、沈慧君编著,上海科学普及出版社2002年出版,我当时买到一本。全书400多页,讲解了从1901年至2001年所有物理诺奖得主的生平以及代表工作。 (1)高中物理课本是很厚的一本,当年我参加高考,据…

Java 二分查找算法详解及通用实现模板案例示范

1. 引言 二分查找(Binary Search)是一种常见的搜索算法,专门用于在有序数组或列表中查找元素的位置。它通过每次将搜索空间缩小一半,从而极大地提高了查找效率。相比于线性查找算法,二分查找的时间复杂度为 O(log n)&…