博客
关于我
小程序 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。当达到 initialRatio 或 thresholds 中的阈值时,回调会被触发。

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


###核心方法

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

  • ###参考方法

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

    .relativeTo(string selector, Object margins)

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

  • 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/

    你可能感兴趣的文章
    Python内置函数详解——总结篇
    查看>>
    Python.对象集合中的标识.和散列
    查看>>
    Python.硒.拖放错误“AttributeError:move_to 需要 WebElement“
    查看>>
    Python内置函数详解
    查看>>
    Python/Kivy:从一个类调用函数到另一个类并在 Python 中显示小部件
    查看>>
    Python/Kivy:我可以在双击标签时调用函数吗
    查看>>
    python内置函数5-frozenset()
    查看>>
    Python/Plotly:如何使用要显示的信息自定义悬停模板?
    查看>>
    Python/Selenium - 无法单击 www.instagram.com 上的“接受 cookie“按钮
    查看>>
    Python内置函数(35)——next
    查看>>
    python写入mysql
    查看>>
    python写入csv老是乱码或者各种不好
    查看>>
    Python内置函数
    查看>>
    Python2 安装MySQLdb库
    查看>>
    Python2 已终结,入手Python 3,你需要这30个技巧
    查看>>
    python写下拉列表在excel,无法使用python获取Excel下拉列表(组合框)值
    查看>>
    python2.7安装
    查看>>
    Python2.7安装ncmbot时提示:Microsoft Visual C++9.0 is required
    查看>>
    PYTHON2.Git.1
    查看>>
    python20181211
    查看>>