亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

列表頁曝光埋點實現(xiàn)

pf_miles / 3204人閱讀

摘要:列表頁曝光埋點實現(xiàn)以商品為例要求商品一半以上出現(xiàn)在視窗中時上報該行的商品快速滑動過去的商品不上報滑動過程中如果一行商品一直未消失在視野中一半以上,不能重復上報滑出視野的商品,再次滑入視野時需要再次上報分析需要以下信息商品所在行的高度固定值商

列表頁曝光埋點實現(xiàn)
以商品為例
要求

商品一半以上出現(xiàn)在視窗中時 上報該行的商品

快速滑動過去的商品不上報

滑動過程中如果一行商品一直未消失在視野中(一半以上),不能重復上報

滑出視野的商品,再次滑入視野時需要再次上報

分析

需要以下信息

商品所在行的高度rowHeight(固定值)

商品的可視區(qū)域的高度contentHeight(半固定值,不考慮瀏覽器的resize)

可視區(qū)域距離視窗頂部的高度headHeight(固定值)

content的滾動高度(與scroll事件相關(guān),考慮到滑動快時不觸發(fā)上報,需要throttle)

實現(xiàn)
/**
 * 滾動事件處理
 * @param {number} headHeight content區(qū)域距離頂部的高度
 * @param {number} rowHeight 每一行的高度
 * @returns {Function}
 */
export function handleScroll(headHeight, rowHeight) {
  let lastActive = []
  let deactived = []
  /**
   * @param   {number} contentTop 區(qū)域的top值
   * @return  {Array}  當前活躍的的行
   */
  return function(contentTop) {
    let topDiff = contentTop - headHeight
    // 可視區(qū)域高度
    let visibleHeight =
      window.innerHeight - (topDiff <= 0 ? headHeight : contentTop)
    /**
     * 當前能顯示的行數(shù)
     * 顯露一半就需要上報 則使用四舍五入
     */
    let rowCount = Math.round(visibleHeight / rowHeight)
    /**
     * 獲取當前顯示的下標
     */
    let index = topDiff > 0 ? 0 : Math.round(-topDiff / rowHeight)
    let _active = Array.from({ length: rowCount }).reduce(
      (pre, cur, i) => pre.concat(index + i),
      []
    )
    /**
     * 之前上報過,未從屏幕上消失過的 不上報
     * 之前上報過,從屏幕中消失又出現(xiàn)的 上報
     */
    let active = _active.filter(
      v => !lastActive.includes(v) || deactived.includes(v)
    )
    /**
     * 收集非活躍狀態(tài)的行,只收集滾上去的元素,active下面的行屬于待活躍狀態(tài),由于和行的總數(shù)相關(guān)(商品的總行數(shù)知道與否不影響上報),會額外增加不必要的工作 所以此處不做考慮
     */
    deactived = Array.from({ length: index }).map((val, i) => i)
    /**
     * 上次活躍的行,用來避免重復上報
     */
    lastActive = [].concat(deactived).concat(_active)
    return {
      lastActive,
      active,
      deactived
    }
  }
}

圖示

使用
let target = document.getElementById("wrapper")
let onScroll = handleScroll(100, 420)
let _scroll = _.throttle(function(){
 let row = onScroll(target.getBoundingClientRect().y)
 // 此時row.active就是需要上報的行的下標,active可能為空數(shù)組
 ...
}, 1000)
target.addEventListener("scroll", _scroll)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/53368.html

相關(guān)文章

  • 列表曝光埋點實現(xiàn)

    摘要:列表頁曝光埋點實現(xiàn)以商品為例要求商品一半以上出現(xiàn)在視窗中時上報該行的商品快速滑動過去的商品不上報滑動過程中如果一行商品一直未消失在視野中一半以上,不能重復上報滑出視野的商品,再次滑入視野時需要再次上報分析需要以下信息商品所在行的高度固定值商 列表頁曝光埋點實現(xiàn) 以商品為例 要求 商品一半以上出現(xiàn)在視窗中時 上報該行的商品 快速滑動過去的商品不上報 滑動過程中如果一行商品一直未消失在視...

    miqt 評論0 收藏0
  • 如何通過Vue自定義指令實現(xiàn)前端埋點詳析

      獲取用戶的交互習慣及喜好,進一步提升轉(zhuǎn)化率,可以在之前的埋點方案實現(xiàn)中,都是在具體的按鈕或者圖片被點擊或者被曝光時主動通過事件去上報埋點。但這種方法適合在埋點比較少時還行的項目,遇見項目中需要大量埋點時,添加的代碼就太多了,就會埋點邏輯與業(yè)務邏輯的高耦合?! ∮纱诵枰獡Q種方式。我先給大家普及下埋點上報方式都有哪些?  手動埋點  可視化埋點  無痕埋點  手動埋點,顧名思義就是純手動寫代碼,調(diào)...

    3403771864 評論0 收藏0
  • 如何實現(xiàn)元素曝光上報

    摘要:進行數(shù)據(jù)上報的時候,經(jīng)常會遇到列表數(shù)據(jù)曝光上報的問題,只對在當前可視范圍內(nèi)的數(shù)據(jù)內(nèi)容進行曝光上報,而對于未在可視范圍內(nèi)的數(shù)據(jù)不進行曝光上報,等待用戶滾動頁面或者區(qū)域使元素出現(xiàn)在可視范圍內(nèi)時才進行曝光上報。 進行數(shù)據(jù)上報的時候,經(jīng)常會遇到列表數(shù)據(jù)曝光上報的問題,只對在當前可視范圍內(nèi)的數(shù)據(jù)內(nèi)容進行曝光上報,而對于未在可視范圍內(nèi)的數(shù)據(jù)不進行曝光上報,等待用戶滾動頁面或者區(qū)域使元素出現(xiàn)在可視范...

    VincentFF 評論0 收藏0
  • Android埋點系統(tǒng)設計

    摘要:一埋點架構(gòu)設計埋點的核心邏輯抽象將生產(chǎn)的用戶數(shù)據(jù)組織發(fā)送給服務器。普通埋點定義頁面進入,頁面離開,頁面元素點擊,頁面元素曝光。無埋點進入退出都使用,如何區(qū)分增加了一個字段,用表示頁面進入退出。如何修改字節(jié)碼庫基礎使用。 一、埋點架構(gòu)設計 埋點的核心邏輯抽象:將APP生產(chǎn)的用戶數(shù)據(jù)組織發(fā)送給服務器。showImg(https://segmentfault.com/img/bVba4Lw?...

    trigkit4 評論0 收藏0

發(fā)表評論

0條評論

pf_miles

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<