最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年10月15日 08:27:36   作者:xiaoTuiMao  
這篇文章主要介紹了微信小程序列表埋點曝光指南,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

背景

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

目標(biāo)

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

怎么做

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

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

IntersectionObserver 一共有四個方法

  • IntersectionObserver.relativeTo 使用選擇器指定一個節(jié)點,作為參照區(qū)域之一。
  • IntersectionObserver.relativeToViewport(Object margins) 指定頁面顯示區(qū)域作為參照區(qū)域之一
  • IntersectionObserver.observeCallback callback) 指定目標(biāo)節(jié)點并開始監(jiān)聽相交狀態(tài)變化情況
  • IntersectionObserver.disconnect()
  • 停止監(jiān)聽?;卣{(diào)函數(shù)將不再觸發(fā)

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

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()
 }
})

最后實現(xiàn)的效果如下

 

結(jié)論

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

 聯(lián)想

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

瀏覽器是有相應(yīng)的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'));

注意這個會監(jiān)測dom元素的可見性變化,也就是說當(dāng)dom出現(xiàn)在視窗的時候會觸發(fā)回調(diào),消失在視窗的時候也會觸發(fā)回調(diào)

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

 

參考文檔

談?wù)処ntersectionObserver懶加載

微信小程序IntersectionObserver 文檔

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

万源市| 沙雅县| 株洲市| 兴国县| 定结县| 枞阳县| 永康市| 定襄县| 尼勒克县| 鹿邑县| 望奎县| 开鲁县| 榆中县| 嘉义县| 长春市| 大方县| 荔浦县| 罗源县| 策勒县| 新郑市| 烟台市| 余姚市| 法库县| 湄潭县| 贵港市| 大名县| 夏河县| 黔江区| 长泰县| 汾阳市| 新乡县| 嘉定区| 原阳县| 府谷县| 新蔡县| 华坪县| 界首市| 德格县| 泰州市| 禄丰县| 青海省|