监听项目中指定属性数据,点击或模块显示时

2024-01-29 07:28

本文主要是介绍监听项目中指定属性数据,点击或模块显示时,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当项目中,需要获取某个页面上、某个标签上、有指定自定义属性时,需要在点击该元素时进行公共逻辑处理,或该元素在显示的时候进行逻辑处理,这时可以定义一个公共的方法,在每个页面引用,并写入数据即可

(通过IntersectionObserver 监听页面元素是否显示,MutationObserver监听DOM元素等实现)

效果图

找到页面中 标签 含有 自定义属性 sen-trace="tracesen_bi"    获取到 senEventId 和 senJson里面的数据,点击的时候进行逻辑处理;

找到标签中 含有 自定义属性 senShow="trace_exposure"  获取到senJson里面的数据,在该元素显示的时候进行逻辑处理;

<div class="box"><div  sen-trace="tracesen_bi" senEventId="test1" senShow="trace_exposure" senExposureId="test4" senJson='{"modle":"内容1","id":1}' class="item">内容1</div><div  sen-trace="tracesen_bi"  senEventId="test2" senShow="trace_exposure" senExposureId="test5" senJson='{"modle":"内容2","id":3}' class="item">内容2</div><div  sen-trace="tracesen_bi" senEventId="test3" senShow="trace_exposure" senExposureId="test6" senJson='{"modle":"内容3","id":3}' class="item">内容3</div>
</div>

元素可见时操作

//监听元素曝光
function observeElements(elements) {const observer = new IntersectionObserver((entries) => {entries.forEach((entry) => {if (entry.isIntersecting) {const element = entry.target;const senExposureId = element.getAttribute('senExposureId');const senJson = JSON.parse(element.getAttribute('senJson'));// 在这里执行你希望执行的操作等console.log(`senExposureId: ${senExposureId}`);console.log(`senJson:`, senJson);// 一旦元素曝光后,可以停止观察该元素以提高性能observer.unobserve(element);}});});elements.forEach((element) => {observer.observe(element);});
}// 创建MutationObserver实例
const mutationObserver = new MutationObserver((mutationsList, observer) => {for(let mutation of mutationsList) {if (mutation.type === 'childList') {// 获取新增的节点const addedNodes = mutation.addedNodes;// 检查新增节点中是否有需要观察的元素const elementsToObserve = Array.from(addedNodes).filter((node) => {return node.nodeType === Node.ELEMENT_NODE && node.matches('[senShow="trace_exposure"]');});// 如果有需要观察的元素,则调用observeElements函数进行观察if (elementsToObserve.length > 0) {observeElements(elementsToObserve);}}}
});// 监听document中子节点的变化,因为有节点是通过ajax动态插入的所以需要监听节点变化
mutationObserver.observe(document, { childList: true, subtree: true });// 页面加载完成后,开始观察初始存在的目标元素
window.addEventListener('load', () => {const initialElements = document.querySelectorAll('[senShow="trace_exposure"]');observeElements(initialElements);
});

点击操作

document.addEventListener('click', function(event) {var target = event.target;// 检查是否带有指定属性的元素被点击if (target.hasAttribute('sen-trace') && target.getAttribute('sen-trace') === 'tracesen_bi') {// 获取senEventId和senJson的值var eventId = target.getAttribute('senEventId');var jsonValue = target.getAttribute('senJson');// 进行日志记录或其他逻辑处理console.log('js点击',eventId,jsonValue)}
});

也可以用jquery方式

$(document).on('click', '[sen-trace="tracesen_bi"]', function() {// 获取senEventId和senJson的值var eventId = $(this).attr('senEventId');var jsonValue = $(this).attr('senJson');// 日志记录或其他逻辑处理console.log('jauery点击',eventId,jsonValue)
});

这篇关于监听项目中指定属性数据,点击或模块显示时的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/656170

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

vue监听属性watch的用法及使用场景详解

《vue监听属性watch的用法及使用场景详解》watch是vue中常用的监听器,它主要用于侦听数据的变化,在数据发生变化的时候执行一些操作,:本文主要介绍vue监听属性watch的用法及使用场景... 目录1. 监听属性 watch2. 常规用法3. 监听对象和route变化4. 使用场景附Watch 的

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

python pymodbus模块的具体使用

《pythonpymodbus模块的具体使用》pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值... 目录一、详解1、 基础概念2、核心功能3、安装与设置4、使用示例5、 高级特性6、注意事项二、代码示例