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

做网站主机选择做互联网网站待遇

做网站主机选择,做互联网网站待遇,珠海高端网站建设公司,黄骅市职教中心IntersectionObserver 基础 IntersectionObserver 可以监听一个元素和可视区域相交部分的比例#xff0c;然后在可视比例达到某个阈值的时候触发回调。比如可以用来处理图片的懒加载等等 首先我们来看下基本的格式#xff1a; const observer new IntersectionObserver(c…IntersectionObserver 基础 IntersectionObserver 可以监听一个元素和可视区域相交部分的比例然后在可视比例达到某个阈值的时候触发回调。比如可以用来处理图片的懒加载等等 首先我们来看下基本的格式 const observer new IntersectionObserver(callback, [options]);相关的API属性和方法 直接看他的Typescript结构吧 interface IntersectionObserver {// root 属性用来获取当前 intersectionObserver 实例的根元素readonly root: Element | Document | null;readonly rootMargin: string;readonly thresholds: ReadonlyArraynumber;disconnect(): void;observe(target: Element): void;takeRecords(): IntersectionObserverEntry[];unobserve(target: Element): void; }root: 如果构造函数未传入 root 或其值为null则默认使用顶级当前文档的视口。 rootMargin 是 IntersectionObserver 构造函数的一个可选属性它定义了一个矩形区域用于扩展或缩小root元素的可视区域从而影响intersectionRatio的计算 const observer new IntersectionObserver(entries {// 处理entries},{root: document.querySelector(#scrollArea), // 根元素 || 顶级当前文档rootMargin: 50px 20px 30px 10px // 上右下左} );thresholds它定义了一个监听交叉变化时触发回调的阈值列表。这些阈值是介于0和1之间的数值包括0和1表示目标元素与根元素相交的比例。举个例子当创建一个IntersectionObserver实例时你可以指定一个或多个阈值。例如如果你想要在目标元素至少有25%、50%和75%可见时触发回调你可以这样设置thresholds const observer new IntersectionObserver(entries {// 处理entries},{thresholds: [0, 0.25, 0.5, 0.75, 1]} );disconnect用于停止监听目标元素与根元素的交叉变化。当你不再需要观察元素的可见性变化时可以调用disconnect方法来停止IntersectionObserver的所有活动。 调用disconnect方法后IntersectionObserver将不再触发任何回调即使目标元素的可见性发生变化。这意味着你已经不再对目标元素的可见性感兴趣或者你想要在组件卸载时清理资源。 // 创建一个IntersectionObserver实例 const observer new IntersectionObserver(function(entries) {// 处理交叉变化entries.forEach(function(entry) {if (entry.isIntersecting) {console.log(元素现在可见);} else {console.log(元素不再可见);}}); });// 开始观察一个元素 const target document.querySelector(#my-element); observer.observe(target);// ...一段时间后...// 停止观察元素 observer.disconnect();observer: 用于开始监听一个目标元素与根元素的交叉变化。当你想要知道一个元素是否进入了视口即用户的可见区域时你可以使用observe方法来指定需要观察的元素 // 创建一个IntersectionObserver实例 const observer new IntersectionObserver(function(entries) {// 处理交叉变化entries.forEach(function(entry) {if (entry.isIntersecting) {console.log(元素现在可见);} else {console.log(元素不再可见);}}); });// 获取要观察的元素 const target document.querySelector(#my-element);// 开始观察元素 observer.observe(target);takeRecords:用于获取并清空IntersectionObserver实例的记录队列。这个方法返回一个IntersectionObserverEntry对象的数组每个对象描述了目标元素的相交状态 unobserve:用于停止监听特定目标元素与根元素的交叉变化。当你不再需要监听某个元素的可见性变化时你可以使用unobserve方法来停止对该元素的观察。 综合案例实现图片的懒加载 下面的方法使用的react可以做必要的安装哦 下面是一个设置一个组件看如下代码 /** Date: 2024-05-28 09:59:48* Description: 组件的设计*/ import { CSSProperties, FC, ReactNode, useEffect, useRef, useState } from react;interface MyLazyloadProps {className?: string; /* className 和 style 是给外层 div 添加样式的 */style?: CSSProperties;placeholder?: ReactNode; /* 是占位的内容 */offset?: string | number; /* 是距离到可视区域多远就触发加载 */width?: number | string;height?: string | number;onContentVisible?: () void; /* 进入可视化区域后所产生的回调 */children: ReactNode; }const MyLazyload: FCMyLazyloadProps (props) {const { className , style, offset 0, width, onContentVisible, placeholder, height, children } props;const containerRef useRefHTMLDivElement(null);const [visible, setVisible] useState(false);const elementObserver useRefIntersectionObserver();/* 关键函数去判断可视范围 */const lazyLoadHandler (entries: IntersectionObserverEntry[]) {const [entry] entries;const { isIntersecting, intersectionRatio } entry;if (intersectionRatio 0) {const node containerRef.current;console.log(node, entry, intersectionRatio);}if (isIntersecting) {setVisible(true);/* 可以通过这一层函数传递给外部然后通过这个函数可以在外部组件做相对应的处理等等 */onContentVisible?.();const node containerRef.current;// 展示完成后及时的销毁if (node node instanceof HTMLElement) {elementObserver.current?.unobserve(node);}}}useEffect(() {const options {/* 这边没有写root则这边的根元素就是此文档的 containerRef *//* rootMargin 这边做了一次偏移处理 */rootMargin: typeof offset number ? ${offset}px : offset || 0px,/* 设置 threshold 为 0 也就是一进入可视区域就触发 */threshold: 0,}elementObserver.current new IntersectionObserver(lazyLoadHandler, options);const node containerRef.current; // 拿到nodeif (node instanceof HTMLElement) {elementObserver.current.observe(node);}return () {if (node node instanceof HTMLElement) {elementObserver.current?.unobserve(node);}}}, []);const styles { height, width, ...style };return (div ref{containerRef} className{${className}} style{styles}{visible ? children : placeholder}/div); };export default MyLazyload; 组件的调用 /** Date: 2024-05-27 11:21:07* Description: 组件的调用*/ import { useState } from react; import img1 from ./素材1.png; import img2 from ./扑克牌1.jpg; import ./App.css; // import LazyLoad from react-lazyload; import LazyLoad from ./MyLazyLoad;function App() {const [isVisible, setIsVisible] useStateboolean(false);return (divp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/pp一一一一一一一一一一一一一一一一一一/p{/* 这边增加一些类名可以做一些的动画 */}LazyLoadclassName{isVisible ? show : hide}placeholder{divloading.../div}onContentVisible{() {console.log(comp visible);setIsVisible(true);}}{/* img src{img1}/ */}/LazyLoadLazyLoadplaceholder{divloading.../div}onContentVisible{() {console.log(img visible);}}img src{img2} //LazyLoad/div); }export default App; 我们看最后的效果 当刚进入页面的时候我们下面的元素都处于 loading中也是上面的placeholder的占位内容。 当滑动图片的位置的时候才加载出相对应的图片地址和对应的类名
http://www.dnsts.com.cn/news/179851.html

相关文章:

  • 快速建站费用WordPress字段值展示页面
  • seo网站排名优化公司哪家代做论文网站
  • 华为手机网站建设策划书网网站建设与设计
  • 编程和做网站有关系吗企石做网站
  • 外贸展示型网站建设公司网站开发实训小结
  • 深圳市光明区住房和建设局网站网站网页?问?
  • 建设通网站账号安徽省建设工程信息网网
  • 外贸网站seo公司排名免费建站的方法
  • 台州建设局网站建筑工程黑名单品牌网上和实体店质量一样吗
  • 商务网站安全方案设计哔哩哔哩网页版稍后再看在哪里
  • 南宁有做门户网站的公司吗常州网站建设技术托管
  • 网站建设怎么进后台合肥瑶海区地图全图高清版
  • 网站设计需要多少钱广州市律师网站建设怎么样
  • 外贸有哪些网站博物馆网站建设目的
  • 织梦上网站次导航怎么做网站运营方案模板
  • 魔站建站系统哪家好合肥关键词排名推广
  • 美容医院网站建设无锡市新区建设环保局网站
  • 网站专题教程wordpress文章列表获取文章摘要
  • 网页模板素材网站ip138查询网站网址域名ip
  • 哪里有零基础网站建设教学培训个人网站建设案例教程
  • 做ppt的模板网站有哪些专业百度seo排名优化
  • 网站建设公司推荐q479185700顶上公众号开发者密钥重置影响
  • 购物网站开发报告网站建设 发布
  • 修水县城乡建设局官方网站有源码手机怎么搭建网站
  • 自己怎么做机构网站.tech 域名 网站
  • 服装设计素材网站大全简易软件下载
  • 广告公司网站建设费用网站改版协议
  • 网站开发小图标免费广告网
  • 广州市白云区网站建设维护用dreamware做网站
  • 最个人网站什么叫展示型网站