首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

对于较长的部分,IntersectionObserver在小屏幕上不起作用

基础概念

IntersectionObserver 是一个用于异步观察目标元素与其祖先元素或顶级文档视口的交叉状态的方式。它可以用来检测元素是否在视口中可见,或者是否被部分或完全遮挡。

相关优势

  1. 性能优化:IntersectionObserver 可以避免频繁的 DOM 操作和重排,从而提高页面性能。
  2. 异步观察:它使用异步回调机制,不会阻塞主线程。
  3. 灵活配置:可以设置阈值(threshold)来决定何时触发回调,也可以设置根元素(root)和根边距(rootMargin)来改变观察的上下文。

类型

IntersectionObserver 主要有两种类型:

  1. 默认类型:观察目标元素与其祖先元素或顶级文档视口的交叉状态。
  2. 根类型:观察目标元素与指定根元素的交叉状态。

应用场景

  1. 懒加载:当图片或其他资源进入视口时才加载它们。
  2. 无限滚动:当用户滚动到页面底部时自动加载更多内容。
  3. 广告曝光统计:统计广告在视口中的展示次数。

问题及解决方案

问题描述

IntersectionObserver 在小屏幕上不起作用。

原因分析

  1. 阈值设置不当:可能设置的阈值过高,导致在小屏幕上无法触发回调。
  2. 根元素设置不当:如果设置了根元素,可能在小屏幕上根元素的尺寸或位置导致无法正确观察目标元素。
  3. 浏览器兼容性问题:某些旧版本的小屏幕设备浏览器可能不支持 IntersectionObserver。

解决方案

  1. 调整阈值
  2. 调整阈值
  3. 检查根元素设置
  4. 检查根元素设置
  5. 浏览器兼容性处理
  6. 浏览器兼容性处理
  7. 调试和测试
    • 确保在小屏幕设备上进行充分的测试。
    • 使用浏览器的开发者工具模拟小屏幕设备,检查观察器的行为。

参考链接

通过以上方法,可以有效解决 IntersectionObserver 在小屏幕上不起作用的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

微信程序中实现商品曝光统计

如何统计商品曝光量 想要统计曝光量,其实只需要做两件事: 判断商品组件是否屏幕(Viewport)内部 如果在屏幕内部,则将包含商品信息曝光事件(Event)发送到日志服务器 原生App和web中都有相应成熟解决方案...但是今天要讨论是微信程序中统计方式。...web中统计曝光的话,可以监听滚动事件,然后根据元素offset().top 和 body元素scrollTop进行计算元素相对于Viewport位置,从而判断当前页面中有哪些商品组件屏幕内。...微信程序IntersectionObserver接口 官方文档解释是 IntersectionObserver对象,用于推断某些节点是否可以被用户看见、有多大比例可以被用户看见。...以上是示例伪代码 何时创建IntersectionObserver对象 如果你使用原生程序进行开发,应该在组件内部ready生命周期内创建IntersectionObserver对象,组件内部创建方法有些不同

3.3K10

一文帮你搞定H5、程序、Taro长列表曝光埋点

; 优点: 性能更高:浏览器底层实现,并进行了相应优化,性能没有问题:监听不会在主线程进行(只要回调方法会在主线程触发); 计算量:这里计算量是指web开发者需要进行计算操作,因为大部分计算浏览器...Intersection Observer API类似,使用方式也基本相同,只是部分细节存在差异;具体步骤: 第一步:创建一个观察者(IntersectionObserver) 通过微信程序框架提供...、程序等多端,其IntersectionObserver接口内部对H5、微信程序、京东程序等各平台进行了对齐抹平,具体来说H5端是按照微信程序端格式进行封装,其内部实现是调用Web端...这是由于dataset是程序特殊模版属性,主要作用是可以事件回调 event 对象中获取到 dataset 相关数据,Taro对于这些能力是部分支持,Taro通过逻辑层模拟已经支持事件回调对象中通过...上一点所说,Taro 对于程序 dataset 模拟是程序逻辑层实现。并没有真正在模板设置这个属性。

1.1K21
  • 图片懒加载几种实现方式

    懒加载实现 首先不设置 src 属性,将图片真正 url 放在另外一个属性 data-src 中,图片即将进入浏览器可视区域之前,将 url 取出放到 src 中。...懒加载关键是如何判断图片处于浏览器可视范围内,通常有三种方法: 方法一 通过对比屏幕可视窗口高度和浏览器滚动距离与元素相对文档顶部距离之间关系,判断元素是否可见。...IntersectionObserver 作用就是检测一个元素是否可见,以及元素什么时候进入或者离开浏览器视口。...通过设置 option threshold 改变回调函数触发条件,threshold 是一个范围为0到1数组,默认值是[0],也就是元素可见高度变为0时就会触发。...Intersection Observer API 会注册一个回调方法,每当期望被监视元素进入或者退出另外一个元素时候(或者浏览器视口)该回调方法将会被执行,或者两个元素交集部分大小发生变化时候回调方法也会被执行

    2.6K20

    【腾讯云前端性能优化大赛】秒开艺术:Hexo 博客首屏耗时优化实践

    部分字体样式不是页面展示所必须,因此可以尝试让浏览器延迟加载该 CSS 样式文件,具体做法如下: 向 link 标签增加 media 属性,值为 only x(这个值浏览器媒体查询中与当前页面不匹配...这样做好处是,当文件内容发生变化时,文件名必定发生变化,反过来说,当浏览器已经缓存了该路径文件,则可以推断缓存文件服务器侧没有发生变化,浏览器可以直接使用缓存版本而不用进行缓存协商(通过设置比较长强制缓存...[6m5io70klb.png] Hexo 博客中要实现这种文件版本控制方法,一方面要在 Hexo 构建时修改静态资源文件名以及对应引用路径,另一方面要为带哈希值静态资源设置一个较长缓存时间...,这里是 10% 部分出现在屏幕中时会触发以上回调 threshold: [0.1], }); observer.observe(document.getElementById('comment...这里要先说明一下 Google Fonts 对于中文等大字符集在线字体提供方式。

    935141

    IntersectionObserver对象

    Intersection Observer API会注册一个回调函数,每当被监视元素进入或者退出另外一个元素时或viewport,或者两个元素相交部分大小发生变化时,该回调方法会被触发执行,这样网站主线程不需要再为了监听元素相交而辛苦劳作...,浏览器会自行优化元素相交管理,注意Intersection Observer API无法提供重叠像素个数或者具体哪个像素重叠,他更常见使用方式是当两个元素相交比例N%左右时,触发回调,以执行某些逻辑...,当其监听到目标元素可见部分穿过了一个或多个阈thresholds时,会执行指定回调函数。...rootBounds:根元素矩形区域信息,是getBoundingClientRect方法返回值,如果没有根元素即直接相对于视口滚动,则返回null。...应用 实现一个使用IntersectionObserver简单示例,两个方块分别可以演示方块1是否屏幕可见区域内以及方块2是否方块1相对可见交叉区域内,另外可以使用IntersectionObserver

    69420

    前端性能优化系列 | 加载优化

    如果能提前完后才能上述操作,那么就能带来更好用户体验,与此同时,由于建立连接部分时间是消耗等待时间上,这样也能有效优化宽度使用情况。...该属性浏览器支持度很高,并且可以明显缩短DNS查询时间,所以被普遍使用。 流媒体资源预连接就是一个很好例子,对于不同来源流媒体,我们希望连接阶段节省一些时间但不一定立即开始获取内容。...较长网页或应用中,如果图片很多,所有的图片都被加载出来,而用户只能看到可视窗口那一部分图片数据,这样就浪费了性能。 使用图片懒加载就可以解决上述问题。...滚动屏幕之前,可视化区域之外图片不会进行加载,滚动屏幕时才加载。懒加载适用于图片较多,页面较长页面场景中。 懒加载与预加载区别: 一个是提前加载,一个是迟缓甚至不加载。...懒加载对服务器前端有一定缓解压力作用,预加载则会增加服务器前端压力。

    9910

    现代浏览器观察者 Observer API 指南

    前言 前段时间研究前端异常监控/埋点平台实现。 思考方案时,想到了浏览器自带观察者以及页面生命周期API 。...IntersectionObserver 优势 Intersection Observer API通过为开发人员提供一种新方法来异步查询元素相对于其他元素或全局视口位置,从而解决了上述问题: 异步处理消除了昂贵...比如下面这个示例: ? 2....; } .post__image { flex: 0 auto; height: auto; } } 但这就很容易出现 当你超过预期屏幕(过大)查看页面时,会出现以下布局...@media查询最大问题是: 组件响应度取决于屏幕尺寸,而不是响应自身尺寸。 以下是指令版实现: ? 使用: ? 效果: ?

    3.8K40

    程序之图片懒加载

    显示 : 默认 我们知道程序页面的脚本逻辑是JsCore中运行,JsCore是一个没有窗口对象环境,所以不能在脚本中使用window,也无法脚本中操作组件。...,所以把数据写死页面上了 数据结构如下: ?...悄悄告诉你,程序里面有个onPageScroll 函数,是用来监听页面的滚动。 还有个getSystemInfo 函数,可以获取获取系统信息,里面包含屏幕高度。 接下来,思路就透彻了吧。...this.setData({ group }) }).exec() } onPageScroll(){ // 滚动事件 this.showImg() } 至此,我们完成了一个程序版图片懒加载...它是一个新API,叫做IntersectionObserver, 本文只讲解简单使用,了解更多请猛戳没错,就是点我 程序里面给它定义是节点布局交叉状态API可用于监听两个或多个组件节点在布局位置上相交状态

    1.1K40

    干货|程序性能优化几点实践技巧

    本文首先论述下如何评判一个程序页面的性能情况,之后通过具体案例重点讲解下几点实践技巧,最后再讲讲key值渲染一个列表时发挥了一个怎么样作用,以此来论述为啥key值对性能提升有帮助。...另外,由于程序视图渲染层和数据逻辑处理层是分开,不是同一个线程上面的,从用户触发页面交互,到处理数据逻辑,最后层现页面,数据到视图是需要传输,因而程序本身对数据大小也有限制,不能超过1M。...IntersectionObserver 对象,用于推断某些节点是否可以被用户看见、有多大比例可以被用户看见 通过这个api我们不用再主动去监听元素位置了,页面渲染一开始,通过这个api指明需要监听元素...2 CDN图片处理 对于页面里面的图片,最好都把图片存储cdn服务器上,一个是能充分利用cdn缓存来加快请求速度,另外一个就是cdn上能够将图片进行一定处理,比如裁剪。...实践技巧四 1 key值列表渲染中作用 key值列表渲染时候,能够提升列表渲染性能,为什么呢?

    1.4K20

    JavaScript 中 Web 性能优化

    静态资源缓存对于静态资源(如CSS、JavaScript、图片等),可以设置较长缓存时间,减少对服务器请求。...服务端渲染与客户端渲染服务端渲染(SSR)可以将部分或全部页面内容提前渲染到HTML中,减少客户端渲染时间。客户端渲染则更适合动态内容较多页面。...Service Workers:可以作为缓存层,实现更复杂缓存策略,如离线应用(PWA)。响应式设计与适配确保网站在不同设备和屏幕尺寸上都能高效加载,避免不必要资源加载。...定期清理缓存对于用户端,可以提供清理浏览器缓存提示或工具,帮助用户保持缓存最新状态。通过上述方法,可以有效地利用缓存优化前端性能,提升用户体验。...实际应用中,可能需要根据网站具体情况和目标用户群体来选择和调整优化策略。

    5800

    【前端词典】4 (+1)种滚动吸顶实现方式比较

    不包含文档卷起来部分。 ? 该函数返回一个 object 对象,有8个属性: top,right,buttom,left,width,height,x,y ?...(保存变量); 使用时候可能出现 DOM 没有初始化,就读取了该属性,这个时候会返回 0;对于这个问题我们需要等到 DOM 元素初始化完成后再执行。...因此我们优化方向就是从减少读取元素属性次数下手,查看代码发现一触发屏幕滚动事件就会调用相关方法读取元素偏移量。...第一种方案 这个方案很常见,不过其带来作用也很明显,就是吸顶效果会有些延迟,如果产品可以接受那就不失为一种好方法。...大概支持了 60% 以上,项目中还是可以使用(你需要做好兼容性处理)。 关于 IntersectionObserver 如何使用,请看 MDN 或者 阮一峰教程。

    2.1K30

    彻底玩转图片懒加载及底层实现原理

    前言 图片懒加载其实已经是一个近乎“烂大街”词语了,大大小小面试中也会被频繁问到,我之前面试中也被问到了图片懒加载原因、实现方式及底层原理,但由于自己平时很少做“图片”相关处理,对于“懒加载...基于原生 js 实现图片懒加载 相关 API 先来看几个后面会用到API document.documentElement.clientHeight 获取屏幕可视区域高度。 ?...“图片来源MDN[1] element.offsetTop 获取元素相对于文档顶部高度。 ?...getBoundingClientRect()是DOM元素到浏览器可视范围距离(不包含页面看不见部分)。...“这里我们参考阮一峰大佬关于IntersectionObserver API[3]介绍。 我们平时开发中,常常需要了解某个元素是否进入了"视口"(viewport),即用户能不能看到它。 ?

    93731

    说说懒加载怎样实现

    懒加载可以多种场景中实现,包括网页内容、图像、数据等。以下是一些常见懒加载实现方法: 对于网页内容: 动态插入: 通过JavaScript动态插入内容,而不是HTML文档加载时静态渲染。...滚动事件监听: 监听滚动事件,当滚动到页面的特定部分时才加载内容。 对于图像: Intersection Observer API: 使用这个API可以检测元素是否进入了视口。...只有当图像与视口至少有部分重叠时,才会加载它。 图像占位符: 使用小图标或占位符替换真实图像,当图像需要加载时再替换成真实图像源。...图片懒加载原理: 由于浏览器会自动对页面中img标签src属性发送请求并下载图片,可以通过html5自定义属性data-xxx 先暂存src值,然后图片出现在屏幕可视区域时候,再将data-xxx...对于数据: 分页: 只加载当前页面需要数据,而不是一次性加载所有数据。 虚拟滚动: 只渲染用户能够屏幕上看到项,对于滚动超出视窗项不进行渲染。

    25110

    几个非常有意思javascript知识点总结

    Battery Status 设备电量情况 我会对部分API做一些比较有意思案例,那么开始我们学习吧~ 1....当一个IntersectionObserver对象被创建时,其被配置为监听根中一段给定比例可见区域,并且无法更改其配置,所以一个给定观察者对象只能用来监听可见区域特定变化值;然而,我们可以同一个观察者对象中配置监听多个目标元素...来判断当前页面是否处于全屏状态,来实现屏幕切换效果.如果是react开发者,我们也可以将其封装成一个自定义hooks来实现与业务相关全屏切换功能. 7....URL URL API是URL标准组成部分,URL标准定义了构成有效统一资源定位符内容以及访问和操作URLAPI。...,改变网站颜色等,对于webapp中播放视频或者直播时,我们也可以用css画一个电量条,当电量告急时提醒用户.作为一个优秀网站体验师,这一块还是不容忽视.

    57210

    谈谈Web应用中图片优化技巧及反思

    这篇文章,我们将一起探讨,web应用中能对图片进行什么样优化,以及反思一些“负优化”手段 一、为什么要对图片进行优化 对于大多数前端工程师来说,图片就是UI设计师(或者自己)切好图,你要做只是把图片丢进项目中...使用强大IntersectionObserver IntersectionObserver提供给我们一项能力:可以用来监听元素是否进入了设备可视区域之内,这意味着:我们等待图片元素进入可视区域后,再决定是否加载它...以上介绍两种方式,其实最终实现效果是相似的,但这里还有个问题,当网速慢时候,图片还没加载完之前,用户会看到一段空白时间,在这段空白时间,就算是渐进式图片也无法发挥它作用,我们需要更友好展示方式来弥补这段空白...四、响应式图片实践 我们经常会遇到这种情况:一张普通笔记本上显示清晰图片,到了苹果Retina屏幕或是其他高清晰度屏幕上,就变得模糊了。...这是因为,同样尺寸屏幕上,高清屏可以展示物理像素点比普通屏多,比如Retina屏,同样屏幕尺寸下,它物理像素点个数是普通屏4倍(2 * 2),所以普通屏上显示清晰图片,高清屏上就像是被放大了

    2K20

    聊一聊H5营销页面的性能优化

    从问题快速排查角度来看,我们需要知道用户使用快照,包括发生问题时接口请求、页面报错等。 第一部分属于行为监控范畴,产品一般会让我们关键节点埋点,然后产品上线后,通过BI拉数据来进行分析。...我们能做并不多。 第三部分,用户使用快照这里我们接入了组内其他同学开发coffeebean系统,可对用户操作行为进行录制,排查线上问题时能给予很大帮助。...唯独第二部分,用户体验这部分数据(对应性能监控)对我们影响很大,也是我们着力提升。 本文就分享一下我们在用户体验优化和页面性能提升上做一系列改造工作,希望能给看文章你一些启发。...而在 Web Vitals 指标中,Core Web Vitals 是其中核心,目前包含三个指标: LCP:(Largest Contentful Paint) 从页面加载开始到最大文本块或图像元素屏幕上完成渲染时间...但一番试用下来,发现nfes-serviceworker-webp 工具依赖于延迟加载 sw 文件,无法图片加载时机保证 sw 注册完成,对于二次缓存有较强帮助,不适用与我们改善首次加载场景。

    89310

    前端: 如何渲染十万条数据

    同理 IntersectionObserver 和 getBoundingClientRect 都能实现 时间分片主要是分批渲染DOM,使用 requestAnimationFrame 来让动画更加流畅..., 可以通过scroll 或IntersectionObserver(交叉观察者,异步,性能消耗) 和 getBoundingClientRect 都可以使用 注意:区分虚拟列表与懒加载 懒加载与虚拟列表其实都是延时加载一种实现...setTimeout执行时间并不是确定,当 setTimeout 执行步调和屏幕刷新步调不一致,就会出现丢帧情况,从而出现闪屏 方法二:requestAnimationFrame 与setTimeout...它能保证回调函数屏幕每一次刷新间隔中只被执行一次,这样就不会引起丢帧现象。...DocumentFragments是DOM节点,但并不是DOM树部分,可以认为是存在内存中,所以将子元素插入到文档片段时不会引起页面回流。

    2.8K22

    前端面试实录CSS篇(最近一周)

    • 区别: • 伪类操作对象是文档树种已有的元素或样式 • 伪元素则是创建一个文档树以外元素或样式 • : 表示伪类 • :: 表示伪元素 • 作用: • 伪类:通过元素选择器上加入伪类改变元素状态...,有一套渲染规则,它决定了其子元素如何定位,以及其他元素关系和相互作用。... 26% • 在有损压缩情况下,具有相同精度 webp 图片,文件大小要比 jpeg 25%~34% • webp 还支持图片透明度,一个无损压缩 webp 图片,想要支持透明度,只需要 22%...rem 是相对于根元素来改变 • 使用场景: • 适配少部分移动设备,且对分辨率对页面影响大小可使用 px • 适配各种移动设备,使用 rem 21....• 1px 问题本质:一些 Retina 屏幕上,移动端页面的 1px 会变得很粗,所呈现出来不止是 1px 效果,原因就是 CSS 中 1px 不能和移动端 1px 划等号,他们之间是有一个比例关系

    11110
    领券