中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺談微信小程序列表埋點曝光指南

發布時間:2020-10-12 15:56:38 來源:腳本之家 閱讀:773 作者:xiaoTuiMao 欄目:web開發

背景

最近項目中,開發一個小程序列表頁,PM大大給我提了一個埋點需求,列表中的每一項,出現在屏幕中的時候,需要上報一條記錄。

目標

淺談微信小程序列表埋點曝光指南

如圖中操作,要依次上報 item 1 - item7,但是上滑的時候,不再重復上報

怎么做

接到需求的第一感覺是,我難道要監聽頁面滾動,然后通過offsetTop 去算嗎!!!??? 這樣顯然不是最高效的。于是我去翻了一下微信的開發文檔,發現有一個IntersectionObserver 的API,正好滿足我的需求。

首先我們需要創建一個 IntersectionObserver wx.createIntersectionObserver(Object component, Object options)

IntersectionObserver 一共有四個方法

  • IntersectionObserver.relativeTo 使用選擇器指定一個節點,作為參照區域之一。
  • IntersectionObserver.relativeToViewport(Object margins) 指定頁面顯示區域作為參照區域之一
  • IntersectionObserver.observeCallback callback) 指定目標節點并開始監聽相交狀態變化情況
  • IntersectionObserver.disconnect()
  • 停止監聽。回調函數將不再觸發

我們這里的參照物是屏幕,所以我們使用 IntersectionObserver.relativeToViewport 來制定我們的參照物,并制定相較規則

Page({
 data: {
 list: [
  { value: 1, hadReport: false }, 
  { value: 2, hadReport: false },
  { value: 3, hadReport: false },
  { value: 4, hadReport: false },
  { value: 5, hadReport: false },
  { value: 6, hadReport: false },
  { value: 7, hadReport: false },
  { value: 8, hadReport: false },
  { value: 9, hadReport: false },
 ]
 },
 onLoad() {
 this._observer = this.createIntersectionObserver({ observeAll: true })
 this._observer.relativeToViewport({ bottom: 0 })
  .observe('.item', (res) => {
  const { index } = res.dataset;
  if (!this.data.list[index].hadReport) {
   console.log(`report ${index}`) 
   this.data.list[index].hadReport = true;
   this.setData({ list: [].concat(this.data.list)})
  }
  
  })
 },
 onUnload() {
 if (this._observer) this._observer.disconnect()
 }
})

最后實現的效果如下

淺談微信小程序列表埋點曝光指南 

結論

  1. 類似這樣的埋點,我們以后可以采用監聽dom的方式去做,而不是一昧的只想著監聽滾動計算位置。
  2. 除了可以做埋點上報,這種監聽的方式,還是很適合去做一些圖片懶加載等一系列操作。

 聯想

上述的所有操作,都是基于微信小程序去做的,那么瀏覽器有沒有相應的API呢?

瀏覽器是有相應的API的, Intersection Observer API ,具體的用法與上述的用法類似。

 var options = {
 rootMargin: '0px',
 threshold: 1.0
 }

 var observer = new IntersectionObserver((...args) => {
 console.log(args);
 }, options);
 observer.observe(document.querySelector('.item'));

注意這個會監測dom元素的可見性變化,也就是說當dom出現在視窗的時候會觸發回調,消失在視窗的時候也會觸發回調

但是瀏覽器的 IntersectionObserver 屬性兼容性一般,如果想要在瀏覽器做曝光或者懶加載可以考慮采用原始的方法,監聽瀏覽器滾動,并計算dom的offsetTop,可以參考筆者很久前寫的 圖片延時 加載原理 及應用

淺談微信小程序列表埋點曝光指南 

參考文檔

談談IntersectionObserver懶加載

微信小程序IntersectionObserver 文檔

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌平区| 若羌县| 时尚| 鄂伦春自治旗| 合山市| 南阳市| 普兰店市| 固阳县| 德昌县| 永平县| 宝兴县| 松阳县| 甘谷县| 仁化县| 青河县| 胶南市| 贡嘎县| 墨江| 淮北市| 得荣县| 新河县| 牡丹江市| 浦县| 石屏县| 神木县| 千阳县| 怀仁县| 嵊州市| 金湖县| 灌南县| 巩留县| 芷江| 敖汉旗| 新河县| 桓仁| 遂溪县| 恩施市| 涿鹿县| 通城县| 灯塔市| 平南县|