当前位置: 首页 > wzjs >正文

做网站销售 优帮云金昌网站seo

做网站销售 优帮云,金昌网站seo,WordPress中文章固定链接,怎么在微信创建公众号文章目录 1、前言2、代码实现3、使用场景4、兼容性5、成熟的Hooks推荐 1、前言 IntersectionObserver 是浏览器原生提供的一个Api。可以"观察"我们的元素是否可见,原理是判断目标元素与可见区域的交叉比例,所以也被称为"交叉观察器"…

文章目录

  • 1、前言
  • 2、代码实现
  • 3、使用场景
  • 4、兼容性
  • 5、成熟的Hooks推荐

1、前言

IntersectionObserver 是浏览器原生提供的一个Api。可以"观察"我们的元素是否可见,原理是判断目标元素与可见区域的交叉比例,所以也被称为"交叉观察器"。本文通过一个Demo代码,讲解如何使用IntersectionObserver,来实现根据目标元素可见度的交互效果。并附有兼容性,使用场景,完整代码实现,以及成熟的Hooks推荐。

2、代码实现

下面代码(React 18)是使用 IntersectionObserver 来监听列表元素的可见度,当卡片元素完全进入浏览器视口时,会标记该元素为活动状态;当元素离开视口时,取消活动状态。

  • 代码
import { useEffect, useRef, useState } from 'react'
import moduleStyle from './index.module.scss'/*** @description Demo*/
export default function DemoPage() {// #region 数据const [dataList, setDataList] = useState<T_Any[]>([])const observer = useRef<T_Any>(null)// #endregion// #region 逻辑/*** @description 初始化模拟请求数据*/useEffect(() => {setTimeout(() => {const list = [...Array(10)].map((_, index) => {return { value: (index + 1).toString(), isActive: false }})setDataList(list)}, 1000)}, [])/*** @description 监听*/useEffect(() => {observer.current = new IntersectionObserver((entries) => {entries.forEach((entry, index) => {if (entry.isIntersecting) {const tempList = [...dataList]tempList[index].isActive = truesetDataList(tempList)} else {const tempList = [...dataList]tempList[index].isActive = falsesetDataList(tempList)}})},{root: null,threshold: 1.0 // 当可见度达到100%时触发})const cardElements = document.querySelectorAll('.card')cardElements.forEach((el) => observer.current.observe(el))return () => {if (observer.current) {observer.current.disconnect()}}}, [dataList])// #endregion// #region 视图return (<div className={moduleStyle['demo-wrapper']}><div className={`scrollbar-none ${moduleStyle['list-wrapper']}`}>{dataList.map((item) => (<div key={item.value} className={`card ${moduleStyle['item-wrapper']} ${item.isActive ? moduleStyle['active'] : ''}`}>{item.value}</div>))}</div></div>)// #endregion
}
  • dataList:是一个状态变量,用于存储模拟请求得到的数据列表。每个数据项包含 value 和 isActive 两个属性,value 是元素的标识,isActive 表示元素是否处于活动状态。

  • observer:是一个 useRef 创建的引用,用于存储 IntersectionObserver 实例。

  • 第一个 useEffect 钩子:用于模拟异步请求数据。在组件挂载后,通过 setTimeout 模拟接口 1 秒的延迟,生成包含 10 个元素的列表,并更新 dataList 状态。

  • 第二个 useEffect 钩子用于初始化 IntersectionObserver。当 dataList 发生变化时,创建一个新的 IntersectionObserver 实例,该实例会监听所有具有 card 类名的元素。当元素完全进入视口(可见度达到 100%)时,将其 isActive 属性设置为 true;当元素离开视口时,将 isActive 属性设置为 false。同时,在组件卸载时,断开 IntersectionObserver 的连接,避免内存泄漏。

  • 样式

.demo-wrapper {width: 100%;height: 100%;padding: 16px;.list-wrapper {display: flex;align-items: center;justify-content: flex-start;flex-wrap: wrap;gap: 16px;width: 100%;height: 100%;overflow-y: auto;.item-wrapper {display: flex;align-items: center;justify-content: center;width: calc(50% - 8px);height: 320px;color: #ffffff;font-size: 24px;background-color: #cccccc;transition: ease 0.3s;border-radius: 8px;overflow: hidden;}.active {background-color: #6212d6 !important;}}
}

3、使用场景

  • 懒加载图片:在图片较多的页面中,可以使用 IntersectionObserver 监听图片元素的可见性。当图片元素进入视口时,再加载图片,从而减少初始加载时的资源消耗,提高页面性能。
  • 无限滚动加载:在社交网站、新闻列表等场景中,当用户滚动页面接近底部时,通过监听底部元素的可见性,触发加载更多数据的操作,实现无限滚动加载的效果。
  • 动画触发:当某个元素进入视口时,触发动画效果,增强页面的交互性和视觉效果。例如,元素淡入、滑动等动画。

4、兼容性

环境版本支持情况
Chrome51+支持
Firefox55+支持
Edge79+(新版本基于Chromium)支持
Safari12.1+支持
iOS Safari13+支持
Opera38+支持
Safari on macOS12.1+支持
Android Browser通常跟随WebView版本需要检查具体设备
Chrome for Android51+支持

如果不支持,可以使用 IntersectionObserver polyfill 来实现兼容性支持。

5、成熟的Hooks推荐

  • Vue

    • useElementVisibility
  • React

    • useInViewport

本次分享就到这儿啦,我是鹏多多,如果您看了觉得有帮助,欢迎评论,关注,点赞,转发,我们下次见~

往期文章

  • flutter-使用extended_image操作图片的加载和状态处理以及缓存和下载
  • flutter-制作可缩放底部弹出抽屉评论区效果
  • flutter-实现Tabs吸顶的PageView效果
  • Vue2全家桶+Element搭建的PC端在线音乐网站
  • 助你上手Vue3全家桶之Vue3教程
  • 助你上手Vue3全家桶之VueX4教程
  • 助你上手Vue3全家桶之Vue-Router4教程
  • 超详细!Vue的九种通信方式
  • 超详细!Vuex手把手教程
  • 使用nvm管理node.js版本以及更换npm淘宝镜像源
  • vue中利用.env文件存储全局环境变量,以及配置vue启动和打包命令

个人主页

  • CSDN
  • GitHub
  • 简书
  • 博客园
  • 掘金
http://www.dtcms.com/wzjs/363397.html

相关文章:

  • 中国设计网站推荐百度seo手机
  • 如何做外贸网络推广如何快速优化网站排名
  • 注册公司需要提供的资料及公司注册流程网站seo价格
  • 怎样做自己的 优惠卷网站网站设计公司网站制作
  • 做的网站名外贸网站免费推广b2b
  • 免费自助建站网站建设免费信息发布引擎搜索优化
  • 做商城网站要什么手续费今天发生的重大新闻5条
  • 上海网站设计公司推荐亿企邦短视频赚钱app软件
  • 做网站交易平台网络营销策略包括
  • 武汉电商代运营公司排名网站优化推广价格
  • 石家庄网站建设蓝龙关键词调价工具哪个好
  • 专门做10s视频的网站软文自助发布平台系统
  • 淘宝做网站费用已备案域名购买平台
  • 石家庄做网站电话企业文化建设方案
  • 企业网站建设运营方案潍坊今日头条新闻
  • 泉州网站建设公司深圳外贸网站推广
  • 域名和网站绑定代哥seo
  • 天河网站建设设计拼多多seo是什么意思
  • 地税局内网网站建设湖南企业seo优化
  • 二级域名免费网站怎么申请电商网络销售是做什么
  • 自做衣服网站技术培训学校机构
  • 便民服务佛山企业用seo策略
  • 网络安全建设方案如何获取网站的seo
  • 中投中原建设有限公司官方网站如何开发一个软件平台
  • 网站开发 浏览器兼容性国内新闻最新消息今天
  • 福建seo网页怎么优化
  • 一级a做爰片免费网站天天看哈尔滨百度公司地址
  • 大城县建设局网站赣州是哪个省
  • 微信网站开发技术最强大的搜索引擎
  • 二级建造师个人注册查询系统搜索引擎优化seo