博客
关于我
小程序 IntersectionObserver 使用案例
阅读量:161 次
发布时间:2019-02-28

本文共 2237 字,大约阅读时间需要 7 分钟。

小程序IntersectionObserver接口技术文档

##兼容性

###基础信息

  • 文档:基础库 > 1.9.3-兼容:支持基础库版本较高的版本
  • observeAll:基础库 > 2.0.0

##API

###创建实例通过wx.createIntersectionObserver(Object this, Object options)创建IntersectionObserver实例,options可选配置参数包括:

  • thresholds:触发阈值的集合数组,默认值为 [0]。例如,设置为 [0, 0.5, 0.8],则当监听对象与参照物相交比例达到 0 / 0.5 / 0.8 时会触发监听器回调。

  • initialRatio:初始相交比例,默认值为 0。当达到 initialRatiothresholds 中的阈值时,回调会被触发。

  • observeAll:是否同时监听多个对象,默认值为 false。此参数在基础库版本 > 2.0.0 时有效。


###核心方法

  • disconnect:停止监听。
  • observe:指定监听对象并设置回调函数。
    .observe(string targetSelector, function callback)
  • 相关属性
    • intersectionRatio:相交比例,用于判断临界点。
    • intersectionRect:相交区域的边界,包含 leftrighttopbottom 属性。
    • boundingClientRect:目标边界,包含 leftrighttopbottom 属性。
    • relativeRect:参照区域的边界,包含 leftrighttopbottom 属性。
    • time:相交检测时的时间戳。

  • ###参考方法

  • relativeTo:指定参照区域之一。

    .relativeTo(string selector, Object margins)

    margins 包含 leftrighttopbottom 属性,可设置与某一边界的达到一定距离时触发回调。

  • relativeToViewport:指定页面显示区域作为参照区域之一。

    .relativeToViewport(Object margins)

  • ##案例

    ###列表数据监控场景:统计用户浏览商品列表时的行为数据。

    interSection: function (e) {  if (this._observer) {    this._observer.disconnect()  }  this._observer = this.createIntersectionObserver({    thresholds: [1],    observeAll: true  })  .relativeToViewport({    bottom: 0  })  .observe('.item', (item) => {    const idx = item.dataset.idx    if (idx > this.data.expoIdx) {      this.setData({        expoIdx: idx      })    }  })}, getList: function() {  this.setData({    list: newList  }, this.interSection)}, logViewCount: function() {  // 上报数据  log(this.data.expoIdx)}, onHide: function() {  this.logViewCount()}, onUnload() {  if (this._observer) {    this._observer.disconnect()  }}

    ###吸顶效果场景:通过IntersectionObserver实现小程序中的吸顶效果。

    filterInterSection: function(e) {  this.filterObserver = this.createIntersectionObserver({    thresholds: [0, 0.5, 1]  })  .relativeToViewport()  .observe('.filter-container', (data) => {    if (data.intersectionRatio < 1) {      this.setData({        isFixed: true      })    } else {      this.setData({        isFixed: false      })    }  })}, onLoad: function(options) {  this.filterInterSection()}, onUnload() {  if (this.filterInterSection) {    this.filterInterSection.disconnect()  }}

    ##总结IntersectionObserver 是小程序实现页面间距控制和可见性检测的强大工具。通过灵活配置阈值和参照区域,可以实现多种交互场景,提升用户体验。

    转载地址:http://oiod.baihongyu.com/

    你可能感兴趣的文章
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>
    Openlayers图文版实战,vue项目从0到1做基础配置
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
    查看>>
    OpenMCU(一):STM32F407 FreeRTOS移植
    查看>>
    OpenMCU(二):GD32E23xx FreeRTOS移植
    查看>>
    OpenMMLab | S4模型详解:应对长序列建模的有效方法
    查看>>
    OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
    查看>>
    OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
    查看>>
    OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
    查看>>
    OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
    查看>>
    OpenPPL PPQ量化(5):执行引擎 源码剖析
    查看>>
    openpyxl 模块的使用
    查看>>
    Openresty框架入门详解
    查看>>
    OpenResty(2):OpenResty开发环境搭建
    查看>>
    openshift搭建Istio企业级实战
    查看>>
    Openstack 之 网络设置静态IP地址
    查看>>