一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - 如何利用JS檢查元素是否在視口內

如何利用JS檢查元素是否在視口內

2022-03-01 16:29冷石 js教程

這篇文章主要給大家介紹了關于如何利用JS檢查元素是否在視口內的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

分享兩個監測元素是否在視口內的方法

1. 位置計算

使用 Element.getBoundingClientRect() 方法返回元素相對于視口的位置

?
1
2
3
const isElementVisible = (el) => {
 const rect = el.getBoundingClientRect();
};

獲取瀏覽器窗口的寬高

?
1
2
3
4
5
const isElementVisible = (el) => {
 const rect = el.getBoundingClientRect();
  const vWidth = window.innerWidth || document.documentElement.clientWidth;
  const vHeight = window.innerHeight || document.documentElement.clientHeight;
};

判斷元素是否在視口內,如圖所示

如何利用JS檢查元素是否在視口內

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const isElementVisible = (el) => {
  const rect = el.getBoundingClientRect()
  const vWidth = window.innerWidth || document.documentElement.clientWidth
  const vHeight = window.innerHeight || document.documentElement.clientHeight
 
  
  if (
    rect.right < 0 ||
    rect.bottom < 0 ||
    rect.left > vWidth ||
    rect.top > vHeight
  ) {
    return false
  }
 
  return true
}

getBoundingClientRect 方法會使瀏覽器發生回流和重繪,性能消耗稍大,但兼容性比 Intersection Observer 要好。

2. Intersection Observer

The Intersection Observer API provides a way to asynchronously observe changes in the intersection of a target element with an ancestor element or with a top-level document's viewport.

Intersection Observer API提供了一種異步檢測目標元素與祖先元素或 viewport 相交情況變化的方法。在目標元素與視口或者其他指定元素發生交集時和觸發配置的回調函數。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 獲取要監測的元素
const boxes = document.querySelectorAll('.box')
 
// 創建觀察者,配置回調函數
// 通過 isIntersecting 屬性判斷元素與視口是否相交
const observer = new IntersectionObserver((entries, observer) => {
 entries.forEach((entry) => {
    console.log(
      entry.target,
      entry.isIntersecting ? "visible" : "invisible"
    );
  });
})
 
boxes.forEach((box) => {
  observer.observe(box);
});

參考

how-to-check-an-element-is-in-viewport-4bcl

Intersection Observer API

總結

到此這篇關于如何利用JS檢查元素是否在視口內的文章就介紹到這了,更多相關JS檢查元素在視口內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://coldstone.fun/post/2021/04/13/js-check-element/

延伸 · 閱讀

精彩推薦
  • js教程如何在現代JavaScript中編寫異步任務

    如何在現代JavaScript中編寫異步任務

    這篇文章主要給大家介紹了關于如何在現代JavaScript中編寫異步任務的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考...

    瘋狂的技術宅11842022-01-12
  • js教程js動態添加帶圓圈序號列表的實例代碼

    js動態添加帶圓圈序號列表的實例代碼

    這篇文章主要介紹了js動態添加帶圓圈序號列表的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參...

    一晃的春夏秋冬7322022-01-21
  • js教程javascript模擬實現計算器

    javascript模擬實現計算器

    這篇文章主要為大家詳細介紹了javascript模擬實現計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    HelloWorld11622022-02-23
  • js教程Javascript實現打鼓效果

    Javascript實現打鼓效果

    這篇文章主要為大家詳細介紹了Javascript實現打鼓效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    qq_413093507612022-01-11
  • js教程three.js顯示中文字體與tween應用詳析

    three.js顯示中文字體與tween應用詳析

    這篇文章主要給大家介紹了關于three.js顯示中文字體與tween應用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習...

    郭志強10002021-12-24
  • js教程JavaScript中跨域問題的深入理解

    JavaScript中跨域問題的深入理解

    這篇文章主要給大家介紹了關于JavaScript中跨域問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要...

    三七安6842022-02-10
  • js教程你不知道的 JS 沙箱隔離

    你不知道的 JS 沙箱隔離

    本文接下來的內容,將介紹我在探索基于 Web Worker 實現 JavaScript 沙箱隔離方案過程中的一些資料收集、理解以及我的踩坑和思考的過程。...

    前端大全10352021-12-29
  • js教程微信小程序開發篇之踩坑記錄

    微信小程序開發篇之踩坑記錄

    這篇文章主要給大家介紹了關于微信小程序開發篇之踩坑記錄的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習...

    孫夢舸8542022-02-16
主站蜘蛛池模板: 日本大巴车强thepro | 午夜剧场1000 | 精品日本三级在线观看视频 | 免费亚洲视频 | 村上里沙40分钟在线观看 | a亚洲视频 | 精品国产区一区二区三区在线观看 | 波多野结衣xxxxx在线播放 | 亚洲羞羞裸色私人影院 | 女人被男人躁得好爽免费视频 | 美国一级大黄大色毛片 | 西西人体大胆77777视频 | 青青草原免费在线视频 | 农村妇女野外牲交一级毛片 | 国产一级在线观看 | 5x社区在线观看直接进入 | 国产欧美久久久精品影院 | 91tv破解版不限次数 | 美女扒开腿让男生捅 | gogort99人体专业网站 | 干妞网免费视频 | 日韩在线观看一区二区不卡视频 | 国内精品99 | 亚洲精品国产国语 | 天天操婷婷 | 秒播影视 午夜福利毛片 | 性欧美高清强烈性视频 | 国色天香社区视频在线观看免费完整版 | 国产日韩精品一区二区 | 欧美草逼网站 | 日本高清色视影www日本 | 亚洲激情自拍偷拍 | anal22日本人视频 | 国产日韩一区二区 | 精品国产国产精2020久久日 | 欧美黑人换爱交换乱理伦片 | 亚洲品质自拍视频网站 | 91色视 | 国产rpg迷雾之风冷狐破解 | 亚洲精品影视 | 天天夜夜草草久久伊人天堂 |