在react-native中如何获取View的漏出比例和漏出时间

news2024/10/18 12:08:41

写在前面

最近在项目中遇到了一个这样的需求:给一个模块做埋点,要求埋点的触发时机是当模块露出50%且停留300毫秒才进行上报

开搞

首先要有一个View

<View></View>

然后在View里定义一个ref

<View ref = { viewRef }></View>

然后写一个定时器,每隔300毫秒触发一次

setinterval(() => {
  // do something
}, 300)

然后判断viewRef是否露出50%,如果露出50%则触发埋点

import {Dimensions} from "react-native";
    this.state = {
        // 是否可埋点
        isExpoesd: false,
        // 是否停留300毫秒
        isStayThreeHundredMilliseconds: false,
    }
setinterval(() => {
    if(this.viewRef.current){
        this.viewRef.current.measure((x, y, width, height, pageX, pageY) => {
            // 获取屏幕高度
            let windowHeight = Dimensions.get('window').height;
            // 模块露出50%坐标值
            let moduleTop = windowHeight - (height / 2);
            // // 商品露出的高度
            // let exposeHeight = windowHeight - pageY;
            // // 卡片露出的高度
            // let cardPosHeight = windowHeight - pageY;
            // // 卡片露出的比例
            // let proportion = cardPosHeight / height;
            // if(exposeHeight > height){
            //     exposeHeight = '100%'
            // }
            // if(exposeHeight < 0){
            //     exposeHeight = `商品距离显示还有${Math.abs(exposeHeight)}`;
            //     proportion = '卡片还没露出呢!'
            // }
            // if(proportion > 1){
            //     proportion = '100%'
            // }
            // let tip = `
            //     这个商品露出了${moduleTop > pageY ? '大于50' : '小于50'},
            //     具体参数如下↓↓↓↓↓

            //     商品名称:${name},
            //     商品ID:${Id}
            //     屏幕高度:${windowHeight},
            //     模块整体高度:${height},
            //     模块最高点坐标:${pageY},
            //     如果模块坐标低于${moduleTop},说明露出大于50%,
            //     商品露出了:${exposeHeight}
            //     卡片露出的比例是:${proportion}
            //     `
            // console.log('------------------------分界线开始---------------------------------')
            // console.log(tip)
            this.setState(prevState => {
                let newIsExpoesd = moduleTop > pageY ? true : false;
                // 比较当前状态与新状态
                if (newIsExpoesd !== prevState.isExpoesd) {
                    this.setState({isExpoesd: newIsExpoesd }); // 返回新的状态
                }
                // console.log(`Toggled state changed from ${prevState.isExpoesd} to ${newIsExpoesd}`);
                if((prevState.isExpoesd === newIsExpoesd) && (prevState.isExpoesd === true)){
                    // console.log('可以埋点')
                    this.state.isStayThreeHundredMilliseconds = true;
                    return true
                } else {
                    // console.log('不可以埋点')
                    this.state.isStayThreeHundredMilliseconds = false;
                    return false
                }
            });
            // console.log('------------------------分界线结束---------------------------------')
        });
    }
}, 300)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python实现屏幕录制,录音录制工具

python实现屏幕录制&#xff0c;录音录制工具 一&#xff0c;介绍 Python 实现的屏幕录制和录音录制工具是一个便捷的应用程序&#xff0c;旨在帮助用户同时捕捉计算机屏幕上的活动以及与之相关的音频输出。这个工具尤其针对教育工作者、内容创作者、技术支持人员以及任何需要…

uniapp使用html2canvas时,页面内的image元素模糊

不废话很简单只需要将image改成img就行 改之前 改之后 原因可能是因为uniapp里面的image标签做了某种处理

信息搜集 --子域名

1.证书查询 通过ssl证书指纹在crt.sh |证书搜索网站搜索 这些就是证书一样的 2.fofa等空间测绘平台查询 3.dns查询 https://dnsdumpster.com/ 4.威胁情报中心 360 微步等等 5.枚举 暴力破解 工具推荐&#xff1a;oneforall GitHub - shmilylty/OneForAll: OneForAll是一款…

QUIC(Quick UDP Internet Connections)与 RTMP(Real Time Messaging Protocol)

QUIC&#xff08;Quick UDP Internet Connections&#xff09;和 RTMP&#xff08;Real Time Messaging Protocol&#xff09;是两种不同的网络传输协议&#xff0c;它们在一些方面有不同的特点和应用场景。 QUIC 协议 特点 基于 UDP&#xff1a;QUIC 建立在 UDP 之上&#xff…

Bayes-CNN-LSTM|基于贝叶斯优化的卷积-长短期神经网络多输入数据回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、方法原理介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编…

spark:数据的关联与合并、缓存和checkpoint

文章目录 1. 数据的关联与合并1.1 join关联1.1.1 内关联1.1.2 左关联1.1.3 右关联 1.2 Union合并 2. 缓存和checkpoint 1. 数据的关联与合并 1.1 join关联 students表数据&#xff1a; 1.1.1 内关联 内关联只返回两个 DataFrame 中在连接键上匹配的行。 # join 关联 from…

Microsoft Visual Studio当程序中用了try catch ,如何定位到出错的地方。

在Microsoft Visual Studio中&#xff0c;当用了try catch的时候&#xff0c;程序报错一般会抛出异常到前端&#xff0c;无法捕捉到源代码的地方。这时候只要设置调试就行。

java基本语法(二)

continue&#xff0c;break&#xff0c;return有什么区别 在循环结构中&#xff0c;当循环条件不满足或者循环次数达到要求时&#xff0c;循环会正常结束。但是&#xff0c;有时候可能需要在循环的过程中&#xff0c;当发生了某种条件之后 &#xff0c;提前终止循环&#xff0…

安科瑞/ACREL能源管理软件能耗管理软件

综合智慧能源管理系统的参与方很多&#xff0c;包括电网、能源服务商、大中小微用能企业甚至个人等&#xff0c;这是一个需要多方参与的系统&#xff0c;系统要有很好的兼容性和易用性。首先,系统的设计需要支持多种工业接口的应用,如第三方系统接口、智能感知设备接口以及用能…

【从零开始的LeetCode-算法】3195. 包含所有 1 的最小矩形面积 I

给你一个二维 二进制 数组 grid。请你找出一个边在水平方向和竖直方向上、面积 最小 的矩形&#xff0c;并且满足 grid 中所有的 1 都在矩形的内部。 返回这个矩形可能的 最小 面积。 示例 1&#xff1a; 输入&#xff1a; grid [[0,1,0],[1,0,1]] 输出&#xff1a; 6 解释&…

Xshell使用密钥远程登录Ubuntu 22.04报错:所选的用户密钥未在远程主机上注册。请再试一次

报错截图如下&#xff1a; 问题原因&#xff1a; Ubuntu 22.04 不支持 Xshell使用的私钥。 查看系统支持的私钥&#xff1a;sudo sshd -T | egrep "pubkey" ~$ sudo sshd -T | egrep "pubkey" pubkeyauthentication yes pubkeyacceptedalgorithms ssh-ed…

一字线激光模组在道路检测方面的应用

在现代道路检测领域&#xff0c;一字线激光模组作为一项先进的检测技术&#xff0c;正发挥着越来越重要的作用。这一技术以其独特的优势&#xff0c;为道路检测提供了更为精准、高效的解决方案。接下来我们就一起了解一下关于一字线激光模组在道路检测方面的应用。 一字线激光模…

号码品牌认证是什么?为什么我的号码总被错误标记?

电话营销&#xff0c;听起来十分简单&#xff0c;但想要让客户接听并听完您的介绍&#xff0c;可没那么容易。今天&#xff0c;我就来分享几个让客户“不拒绝”的小技巧。 首先&#xff0c;您可以选择使用号码品牌认证服务&#xff0c;在您拨打电话时&#xff0c;它就像给您的电…

Zico 2 靶机 - 详细流程

✨ 准备工作 靶机 && kali 环境要求 机器名网络配置靶机Zico 2NAT 模式攻击机kaliNAT 模式 靶机下载链接&#xff1a;zico2: 1 ~ VulnHub 打开 VMware&#xff0c;将 zico2.ova 拖拽到 VMware 中 设置 虚拟机名称(A) - 存储路径(P)- 导入 若是&#xff0c;…

FreeRTOS - 单片机程序设计模式

在学习FreeRTOS过程中&#xff0c;结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源&#xff0c;整理了该篇文章。如有内容理解不正确之处&#xff0c;欢迎大家指出&#xff0c;共同进步。 单片机程序设计模式&#xff08;第2章&#xf…

10月17日

输入一个数组&#xff0c;循环输出数组的元素&#xff0c;以及各个元素的长度 arr("apple" "banana" "date")# 初始化索引 index0# 获取数组长度 arr_len${#arr[]}# 使用 while 循环遍历数组 while [ $index -lt $arr_len ]; doelement${arr[$in…

“人工智能+中职”:VR虚拟仿真实训室的发展前景

随着人工智能技术的飞速发展&#xff0c;中职教育也迎来了新的发展机遇。特别是虚拟现实&#xff08;VR&#xff09;技术在中职教育领域的应用&#xff0c;结合人工智能的加持&#xff0c;为中职教育提供了全新的教学模式和实训体验。其中&#xff0c;VR虚拟仿真实训室的发展前…

不使用U盘重装windows系统

优点&#xff1a;可以不使用U盘&#xff0c;重装速度快&#xff0c;可以保留系统的激活状态&#xff01; 然后自己设置就可以重装系统了~~~

【重学 MySQL】七十、揭秘数据库对象,打造高效数据管理之旅

【重学 MySQL】七十、揭秘数据库对象&#xff0c;打造高效数据管理之旅 数据库&#xff08;Database&#xff09;数据表&#xff08;Table&#xff09;视图&#xff08;View&#xff09;存储过程&#xff08;Stored Procedure&#xff09;触发器&#xff08;Trigger&#xff09…

初识git · 有关模型

目录 前言&#xff1a; 有关开发模型 前言&#xff1a; 其实文章更新到这里的时候&#xff0c;我们已经学习了可以满足我们日常生活中的基本需求的指令了&#xff0c;但是为什么要更新本篇文章呢&#xff1f;是因为实际生活中我们对于开发工作&#xff0c;运维工作&#xff…