国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

讓你監聽頁面所有點擊事件,你會怎么做?

開發 前端
如果在做某個平臺的時候,我們需要統計用戶點擊的次數,點擊的區域,點擊元素,等等,那我們應該怎么去做比較合適呢?

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心~

背景

如果在做某個平臺的時候,我們需要統計用戶點擊的次數,點擊的區域,點擊元素,等等,那我們應該怎么去做比較合適呢?

舉個例子,我想在用戶點擊頁面上的每一個元素時,我都能把這個元素的DOM節點信息記錄下來,并且上報到服務器,便于后面產品那邊的統計用戶喜好~

公共函數?處處調用?

那我們要怎么去做呢?寫一個公共函數嗎?然后去統一做上報嗎?

我首先寫一個函數,這是一個獲取點擊元素信息的函數,我們可以在點擊的 event 參數中拿到目標元素 target

圖片圖片

const reportDOM = (e: PointerEvent) => {
  // 獲取到點擊的目標元素
  const el = e.target
  // 把目標元素解析成字符串
  const detail = htmlElementAsString(el)
  // 進行上報
  report(detail)
}

// 上報函數
export const report = (detail) => {
  request(url, detail)
}
// 解析函數
export function htmlElementAsString(target: HTMLElement): string {
  const tagName = target.tagName.toLowerCase();
  if (tagName === 'body') {
    return '';
  }
  let classNames = target.classList.value;

  classNames = classNames !== '' ? ` class='${classNames}'` : '';
  const id = target.id ? ` id="${target.id}"` : '';
  const innerText = target.innerText;
  return `<${tagName}${id}${classNames !== '' ? classNames : ''}>${innerText}</${tagName}>`;
}

寫完這幾個函數之后,我們只需要在每一個點擊事件中去插入這個函數即可

const click1 = (e: PointerEvent) => {
  reportDOM(e)
  
  // coding....
}
const click2 = (e: PointerEvent) => {
  reportDOM(e)
  
  // coding....
}
const click3 = (e: PointerEvent) => {
  reportDOM(e)
  
  // coding....
}

但是一個頁面中,點擊事件非常多啊,不可能每一個事件中去插入這個函數,非常麻煩

全局監聽 + elementFromPoint

基本做法

最好的辦法就是把 click 事件掛載在 window 身上,然后根據 elementFromPoint 去計算坐標匹配的元素,進行解析上報

window.addEventListener(
  'click',
  (e: PointerEvent) => {
    // 通過坐標計算出目標元素
    const el = getTargetDomByPointerEvent(e);
    if (!el) return;
    // 把目標元素解析成字符串
    const detail = htmlElementAsString(el);
    // 進行上報
    report(detail);
  },
  true,
);

// 通過坐標計算目標元素
export const getTargetDomByPointerEvent = (e: PointerEvent) => {
  const el = document.elementFromPoint(e.pageX, e.pageY);
  if (el) {
    return el as HTMLElement;
  }

  return null;
};

拓展做法,只上報所需元素

我們可以通過配置一個數組 globalClickListeners ,只對我們所需要的 DOM 節點進行監聽上報,

const globalClickListeners = [
  {
    selector: '.cla', // 選擇器
  },
  {
    elementText: 'report2', // 元素文本
  },
  {
    selector: '.r', // 選擇器 + 元素文本
    elementText: 'report3',
  },
];

那么我們需要對 window 的點擊監聽進行改造

window.addEventListener(
  'click',
  (e: PointerEvent) => {
    const el = getTargetDomByPointerEvent(e);
    if (!el) return;

    if (globalClickListeners.length) {
      globalClickListeners.forEach(({ selector, elementText, data = '' }) => {
        if (selector) {
          // 選擇器的情況
          const els = document.querySelectorAll(selector);
          // 點擊元素是否包含所屬選擇器范圍
          const isIncludes = [...(els as unknown as any[])].includes(el);
          // 包含則上報
          if (isIncludes) {
            const detail = htmlElementAsString(el);
            // 進行上報
            report(detail);
          }
        } else if (el.textContent === elementText) {
          // 文本相同情況
          const detail = htmlElementAsString(el);
          // 進行上報
          report(detail);
        }
      });
    }
  },
  true,
);

小結

其實上面就是埋點庫中,全局點擊上報的一種解決方案,看似小問題,但是其實面試了這么多人,感覺只有很少一部分人能回答的比較好~

結語

我是林三心

  • 一個待過小型toG型外包公司、大型外包公司、小公司、潛力型創業公司、大公司的作死型前端選手;
  • 一個偏前端的全干工程師;
  • 一個不正經的掘金作者;
  • 逗比的B站up主;
  • 不帥的小紅書博主;
  • 喜歡打鐵的籃球菜鳥;
  • 喜歡歷史的乏味少年;
  • 喜歡rap的五音不全弱雞
責任編輯:武曉燕 來源: 前端之神
相關推薦

2024-08-28 08:38:51

2021-05-13 07:32:17

培訓代碼同事

2025-04-25 07:15:00

勒索軟件企業安全

2024-03-19 00:52:52

前端網頁篡改

2021-01-14 05:23:32

高并發消息中間件

2011-07-03 21:13:04

SEO

2022-02-17 08:57:18

內存設計進程

2025-02-11 09:51:52

2020-08-30 16:30:14

VMwarevSphere 6虛擬化

2021-11-10 08:00:00

容器開發安全

2011-09-30 13:37:35

51CTO博客一周熱門薪酬

2023-02-27 10:45:16

2012-06-20 15:01:25

iOS開發

2009-11-18 18:28:27

Oracle監聽器

2021-07-09 10:11:34

Redis云數據技術

2021-07-22 06:25:14

敏捷開發用戶體驗CIO

2019-06-17 09:49:27

裁員失業品牌

2018-06-07 09:13:22

錯誤數據備份

2025-02-12 10:03:07

2011-10-25 16:06:16

服務器宕機數據中心
點贊
收藏

51CTO技術棧公眾號

国产亚洲成av人在线观看导航| 久久字幕精品一区| 日韩精品一区二区三区第95| ·天天天天操| 91影院在线免费观看| 亚洲永久激情精品| 日韩视频一区| 97人人模人人爽人人少妇| 欧美女优在线视频| 日本国产欧美一区二区三区| 精品国产亚洲一区二区三区在线| 日韩国产精品视频| 26uuu亚洲电影在线观看| 色拍拍在线精品视频8848| 精东传媒在线观看| 一二三区精品福利视频| 午夜dv内射一区二区| 99这里只有久久精品视频| 欧美日韩亚洲国产成人| 久久精品人人| 日韩欧美亚洲在线| 热久久国产精品| 麻豆精品传媒视频| 日本在线不卡一区| 四虎免费在线观看视频| 国产乱码一区二区三区| 无码毛片aaa在线| av影院午夜一区| 日韩毛片在线免费看| 1024国产在线| 欧美日韩精品二区| 欧美色图另类| 欧美一区二区视频观看视频 | 99久久综合狠狠综合久久aⅴ| 欧洲永久精品大片ww免费漫画| 日韩极品少妇| 亚洲a区在线视频| 西西裸体人体做爰大胆久久久| 日韩精品久久一区| 国产精品一区久久久久| 欧美精品99久久| 久久精品亚洲国产奇米99| 嫩草av久久伊人妇女超级a| 亚洲同性同志一二三专区| 免费福利影院| 欧美日韩亚洲综合一区二区三区| 久久久123| 久久色在线播放| 精品国产乱码久久久久久果冻传媒 | 日本一区二区在线视频| 精品亚洲欧美一区| 亚洲欧美另类动漫| 亚洲制服欧美中文字幕中文字幕| 性色视频在线观看| 亚洲成年网站在线观看| 先锋影音网一区二区| 国产成人精品日本亚洲| 校园激情久久| 国产中文字幕免费观看| 亚洲美女屁股眼交| 欧美理论电影| 7777免费精品视频| 国产精品日本欧美一区二区三区| 丁香婷婷综合激情| 婷婷六月综合亚洲| 精品免费av在线| 91丨九色丨国产在线| 国产成人丝袜美腿| 亚洲人av在线| 国产一区二区三区在线观看视频| 美女午夜精品| 少妇特黄a一区二区三区| 国产精品女主播在线观看| 日本在线观看免费| 久久久久久有精品国产| 免费亚洲一区| 久久久久久久久久久久久久久久久久久| 日韩一级高清毛片| 北条麻妃一区二区三区在线观看| 免费国产一区二区| 亚洲激情自拍偷拍| 日本精品网站| 久久99精品国产一区二区三区| 国产拍揄自揄精品视频麻豆| av网站免费在线观看| 日韩av电影院| 成人精品免费网站| 国产超级va在线视频| 日本亚洲欧洲色α| 不卡电影一区二区三区| 日本三级视频在线观看| 亚洲国产精品一区二区第一页| 午夜久久一区| 欧美人成在线视频| 欧美男gay| 日韩亚洲不卡在线| 中文字幕午夜精品一区二区三区 | 久久久久九九精品影院| 久久久最新网址| 女人帮男人橹视频播放| 中文字幕五月欧美| 美女100%一区| 日本fc2在线观看| 男同互操gay射视频在线看| 国产欧美欧洲在线观看| 亚洲午夜精品久久久久久性色| 欧美唯美清纯偷拍| 精品福利一区| 99三级在线| 午夜av一区二区| 一区二区三区四区视频免费观看| 午夜在线视频免费观看| 精品污污网站免费看| 国产曰批免费观看久久久| 欧美一区免费| 亚洲国产精品综合久久久| 亚洲国产中文在线二区三区免| av伦理在线| 啦啦啦中文在线观看日本| 欧美成人片在线| 久久久久久青草| 青青草观看免费视频在线| 超碰在线免费看| 天堂在线第六区| 瑟瑟在线观看| 国产三级电影在线| 欧美日韩在线看片| 免费在线性爱视频| 日本中文字幕电影在线观看| 中文字幕在线播放第一页| 九色视频网站| 天堂在线中文字幕| 狠狠色伊人亚洲综合网站l| 久久综合色播| 95av在线视频| 日韩在线观看免费全集电视剧网站| 国产一区欧美二区| 欧美大片一区| a欧美人片人妖| 国产91在线|亚洲| 波多野结衣精品| 日韩av高清| 亚洲激情第一页| 国产一区二区三区四| www.日韩| 日韩av黄色网址| 7m第一福利500精品视频| 国产精品久久久久久久久免费相片| 91精品短视频| 免费av网页| 亚洲专区国产精品| 欧美一区二区日韩| 国产一区二区三区在线观看免费视频 | 成人黄色在线| 无码人妻精品一区二区三区在线| 久热精品视频在线观看一区| 久久精品视频在线看| 美腿丝袜亚洲图片| 色网址在线观看| 久久大香伊蕉在人线观看热2| 精品欧美一区二区在线观看| 国产在线精品不卡| 亚洲精品无播放器在线播放| 丁香婷婷激情网| 91精品国产综合久久男男| 在线精品视频小说1| 美国三级日本三级久久99 | 欧美理论电影在线精品| 黄页网址大全在线播放| 精选一区二区三区四区五区| 亚洲精品mp4| 真实原创一区二区影院| 九七影院97影院理论片久久| 国产成人在线视频| 精品视频一区二区不卡| 精品综合久久久久久8888| 97精品资源在线观看| caoporen人人| 日本成人黄色免费看| 久久精品成人动漫| 天天色综合天天| 紧缚奴在线一区二区三区| 视频成人永久免费视频| 羞羞视频在线免费看| 亚洲国产高清国产精品| 久久人91精品久久久久久不卡| 欧美日韩午夜视频在线观看| 蜜臀a∨国产成人精品| 老汉色老汉首页av亚洲| 免费在线观看av网站| 日日摸天天爽天天爽视频| 91视频免费在线| www.日韩.com| 91久久精品国产91性色tv| 国产成人一级电影| 久久综合av| 国产精品无码久久久久| 麻豆av电影在线观看| av片中文字幕| 久久天天狠狠|