文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vue怎么自定义指令进行前端埋点

2023-07-02 18:16

关注

本文小编为大家详细介绍“vue怎么自定义指令进行前端埋点”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么自定义指令进行前端埋点”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

代码实现

Click 类封装

点击事件的处理相对比较简单,每次点击触发数据上报即可:

// src/directives/track/click.jsimport { sendUBT } from "../../utils/ctrip"export default class Click {  add(entry) {    // console.log("entry", entry);    const traceVal = entry.el.attributes["track-params"].value    const traceKey = entry.el.attributes["trace-key"].value    const { clickAction, detail } = JSON.parse(traceVal)    const data = {      action: clickAction,      detail,    }    entry.el.addEventListener("click", function() {      console.log("上报点击埋点", JSON.parse(traceVal))      console.log("埋点key", traceKey)      sendUBT(traceKey, data)    })  }}

Exposure 类封装

曝光的相对复杂一些。

首先通过new IntersectionObserver() 实例化一个全局_observer,如果得到有效曝光的(这里当元素出现一半以上则进行曝光),就去获取 DOM 节点上的trace-key(埋点 key)和track-params(埋点 value)。

// src/directives/track/exposure.jsimport "intersection-observer"import { sendUBT } from "../../utils/ctrip"// 节流时间调整,默认100msIntersectionObserver.prototype["THROTTLE_TIMEOUT"] = 300export default class Exposure {  constructor() {    this._observer = null    this.init()  }  init() {    const self = this    // 实例化监听    this._observer = new IntersectionObserver(      function(entries, observer) {        entries.forEach((entry) => {          // 出现在视窗内          if (entry.isIntersecting) {            // 获取参数            // console.log("埋点节点", entry.target.attributes);            const traceKey = entry.target.attributes["trace-key"].value            const traceVal = entry.target.attributes["track-params"].value            console.log("traceKey", traceKey)            console.log("traceVal", traceVal)            const { exposureAction, detail } = JSON.parse(traceVal)            const data = {              action: exposureAction,              detail,            }            // 曝光之后取消观察            self._observer.unobserve(entry.target)              self.track(traceKey, data)          }        })      },      {        root: null,        rootMargin: "0px",        threshold: 0.5, // 元素出现面积,0 - 1,这里当元素出现一半以上则进行曝光      }    )  }    add(entry) {    this._observer && this._observer.observe(entry.el)  }    track(traceKey, traceVal) {    // console.log("曝光埋点", traceKey, JSON.parse(traceVal));    sendUBT(traceKey, traceVal)  }}

指令封装

有了点击和曝光类,下一步就是 Vue 指令的封装了,也是之所以能实现半自动埋点的核心。

这里存在一个场景就是对于同一个按钮或者图片,同时存在既需要点击埋点又需要曝光埋点的场景。所以在指令的设计时支持了单独传入和同时传入的场景:

// src/directives/track/index.jsimport Vue from "vue"import Click from "./click"import Exposure from "./exposure"// 实例化曝光和点击const exp = new Exposure()const cli = new Click()Vue.directive("track", {  bind(el, binding) {    // 获取指令参数    const { arg } = binding    arg.split("|").forEach((item) => {      // 点击      if (item === "click") {        cli.add({ el })      } else if (item === "exposure") {        exp.add({ el })      }    })  },})

同时需要在src/index.js引入即可:

import "./directives/track"

使用

在需要埋点的地方使用也是很简单的:

<img  ref="imageDom"  trace-key="o_img"  v-track:click|exposure  :track-params="    JSON.stringify({      exposureAction: 's_pictures',      clickAction: 'c_pictures',      detail: {        value: '测试',      },    })  "/>

读到这里,这篇“vue怎么自定义指令进行前端埋点”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯