欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談微信小程序列表埋點(diǎn)曝光指南

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

背景

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

目標(biāo)

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

怎么做

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

首先我們需要?jiǎng)?chuàng)建一個(gè) IntersectionObserver wx.createIntersectionObserver(Object component, Object options)

IntersectionObserver 一共有四個(gè)方法

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

我們這里的參照物是屏幕,所以我們使用 IntersectionObserver.relativeToViewport 來(lái)制定我們的參照物,并制定相較規(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()
 }
})

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

 

結(jié)論

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

 聯(lián)想

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

瀏覽器是有相應(yīng)的API的, Intersection Observer API ,具體的用法與上述的用法類(lèi)似。

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

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

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

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

 

參考文檔

談?wù)処ntersectionObserver懶加載

微信小程序IntersectionObserver 文檔

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

相關(guān)文章

  • JavaScript中DOM和BOM原理詳析

    JavaScript中DOM和BOM原理詳析

    這篇文章主要介紹了JavaScript中DOM和BOM原理詳析,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • javascipt:filter過(guò)濾介紹及使用

    javascipt:filter過(guò)濾介紹及使用

    filter是new一個(gè)新的array,這篇文章主要介紹了javascipt filter過(guò)濾介紹及使用,需要的朋友可以參考下
    2014-09-09
  • 輕松5句話(huà)解決JavaScript的作用域

    輕松5句話(huà)解決JavaScript的作用域

    作用域(scope)是javascript語(yǔ)言的基石之一,在構(gòu)建復(fù)雜程序時(shí)可能是最頭痛的東西,所以這里羅列了五句話(huà)輕松搞定并且附上了示例。給需要的朋友參考學(xué)習(xí)。
    2016-07-07
  • JS數(shù)據(jù)類(lèi)型分類(lèi)及常用判斷方法

    JS數(shù)據(jù)類(lèi)型分類(lèi)及常用判斷方法

    這篇文章主要介紹了JS數(shù)據(jù)類(lèi)型分類(lèi)及常用判斷方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • requestAnimationFrame用法優(yōu)化源碼解析

    requestAnimationFrame用法優(yōu)化源碼解析

    這篇文章主要介紹了requestAnimationFrame用法優(yōu)化源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • js實(shí)現(xiàn)自定義路由

    js實(shí)現(xiàn)自定義路由

    本文介紹了js實(shí)現(xiàn)自定義路由,主要是事件hashchange的使用,然后根據(jù)我們的業(yè)務(wù)需求封裝。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • javascript無(wú)刷新評(píng)論實(shí)現(xiàn)方法

    javascript無(wú)刷新評(píng)論實(shí)現(xiàn)方法

    這篇文章主要介紹了javascript無(wú)刷新評(píng)論實(shí)現(xiàn)方法,涉及javascript動(dòng)態(tài)添加表格元素的技巧,需要的朋友可以參考下
    2015-05-05
  • webpack常用配置項(xiàng)配置文件介紹

    webpack常用配置項(xiàng)配置文件介紹

    這篇文章主要為大家詳細(xì)介紹了webpack常用配置項(xiàng)配置文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • js的form表單提交url傳參數(shù)(包含+等特殊字符)的兩種解決方法

    js的form表單提交url傳參數(shù)(包含+等特殊字符)的兩種解決方法

    下面小編就為大家?guī)?lái)一篇js的form表單提交url傳參數(shù)(包含+等特殊字符)的兩種解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • js中創(chuàng)建對(duì)象的幾種方式示例介紹

    js中創(chuàng)建對(duì)象的幾種方式示例介紹

    JavaScript中的所有事物都是對(duì)象,本文為大家介紹下JS中創(chuàng)建對(duì)象的幾種方式,如原始方法、工廠方法等等
    2014-01-01

最新評(píng)論