当前位置: 首页 > news >正文

手动埋点的demo

上代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>埋点示例</title>
</head>

<body>
  <!-- 多种埋点触发元素 -->
  <button id="track-button">点击事件埋点</button>
  <form id="demo-form">
    <input type="text" placeholder="输入内容" name="username">
    <button type="submit">提交表单</button>
  </form>
  <div class="ad-banner" style="height: 1000px; margin-top: 1200px;">滚动到此处触发曝光埋点</div>

  <script>
    // ====================== 核心工具函数 ======================
    // 生成唯一用户ID (持久化存储)
    const getUserId=() => {
      let userId=localStorage.getItem('userId');
      if(!userId) {
        userId=`user_${Math.random().toString(36).substr(2,9)}`;
        localStorage.setItem('userId',userId);
      }
      return userId;
    };

    // 获取页面基本信息
    const getPageContext=() => ({
      url: window.location.href,
      referrer: document.referrer,
      screen: `${window.screen.width}x${window.screen.height}`,
      userAgent: navigator.userAgent
    });

    // ====================== 埋点主函数 ======================
    function trackEvent (eventType,customData={}) {
      // 合并公共数据和自定义数据
      const eventData={
        // 基础信息
        event_type: eventType,
        timestamp: new Date().toISOString(),

        // 用户信息
        user_id: getUserId(),
        session_id: sessionStorage.getItem('sessionId')||(() => {
          const id=`session_${Date.now()}`;
          sessionStorage.setItem('sessionId',id);
          return id;
        })(),

        // 设备与页面信息
        ...getPageContext(),

        // 自定义数据
        ...customData
      };

      // 发送到测试API(实际项目替换为真实接口)
      fetch('https://httpbin.org/post',{
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify(eventData)
      })
        .then(res => res.json())
        .then(data => console.log('埋点成功:',data.json))
        .catch(err => console.error('埋点失败:',err));
    }

    // ====================== 多种埋点场景示例 ======================
    // 1. 点击事件埋点
    document.getElementById('track-button').addEventListener('click',() => {
      trackEvent('button_click',{
        button_id: 'track-button',
        button_text: '点击事件埋点'
      });
    });

    // 2. 表单提交埋点
    document.getElementById('demo-form').addEventListener('submit',(e) => {
      e.preventDefault();
      const formData=new FormData(e.target);
      trackEvent('form_submit',{
        form_id: 'demo-form',
        form_data: Object.fromEntries(formData)
      });
    });

    // 3. 广告曝光埋点(滚动到视口时触发)
    const adBanner=document.querySelector('.ad-banner');
    const observer=new IntersectionObserver((entries) => {
      entries.forEach(entry => {
        if(entry.isIntersecting) {
          trackEvent('ad_impression',{
            ad_id: 'banner_1',
            position: entry.boundingClientRect.y
          });
          observer.unobserve(adBanner); // 仅触发一次
        }
      });
    });
    observer.observe(adBanner);

    // 4. 页面生命周期埋点
    // 页面加载完成
    trackEvent('page_view',{
      page_type: 'homepage',
      load_time: performance.timing.loadEventEnd-performance.timing.navigationStart
    });

    // 页面离开时
    window.addEventListener('beforeunload',() => {
      trackEvent('page_leave',{
        time_spent: Date.now()-performance.timing.navigationStart
      });
    });
  </script>
</body>

</html>

相关文章:

  • 双击打开、输入内容即可生成二维码的便捷工具
  • 往es中写入一条数据的,请求流程
  • 使用MyBatis生成器
  • ZOJ 1012 Mainframe
  • 关于XML映射器的基本问题
  • 【线性代数】2矩阵
  • DC-8靶机渗透测试全过程
  • Unity学习part2
  • python从入门到进去
  • [高等数学] 分部积分法
  • 计网-数据链路层
  • 【华为OD机考】华为OD笔试真题解析(10)--字符串重新排序
  • 使用 Python 爬虫和 FFmpeg 爬取 B 站高清视频
  • 【Python】错误异常
  • 【深度学习】计算机视觉(CV)-目标检测-DETR(DEtection TRansformer)—— 基于 Transformer 的端到端目标检测
  • DAY04 Object、Date类、DateFormat类、Calendar类、Math类、System类
  • 什么是计算机总线?
  • 【大模型】DeepSeek 高级提示词技巧使用详解
  • Android Studio报错:Could not get unknown property ‘kotlin_version‘
  • Kubernetes控制平面组件:etcd高可用集群搭建
  • 读图|展现城市品格,上海城市影像走进南美
  • 九家企业与上海静安集中签约,投资额超10亿元
  • 招行:拟出资150亿元全资发起设立金融资产投资公司
  • 奥园集团将召开债券持有人会议,拟调整“H20奥园2”本息兑付方案
  • 大四本科生已发14篇SCI论文?学校工作人员:已记录汇报
  • 花20万骑自行车?CityRide带火“骑行经济”