几个事件的问题

news2025/1/26 15:45:39

1.PC端的click是点击事件,移动端的lick会存在300ms延迟

移动端的click是单击事件,单击事件:第一次点击后,监测300ms, 看是否有第二次点击操作,如果有就是单击,如果有就是双击。

如何解决:
单手指事件模型: touch模拟!!!touchstart,touchmove,touchend

要在React中模拟双击事件,可以使用浏览器本身的touchstarttouchend事件,配合setTimeout来实现。

具体的实现思路如下:

  1. 监听touchstart事件,并记录下当前的时间戳timestamp1和点击的坐标coordinate1。

  2. 监听touchend事件,并在其中记录下当前的时间戳timestamp2和离开的坐标coordinate2。

  3. 判断timestamp2 - timestamp1是否在一定的时间范围内,比如500毫秒。

  4. 判断coordinate1coordinate2之间的距离是否在一定的范围内,比如20像素。

  5. 如果以上两个条件都满足,则视为一次双击事件,并执行相应的逻辑。

下面是一个示例代码,可以放在组件的componentDidMount或者使用钩子函数进行挂载。

let lastTap = null;
let touchEndListener = null;

function handleTouchStart(e) {
  const currentTime = new Date().getTime();
  const tapLength = lastTap ? currentTime - lastTap : Infinity; // 两次触摸事件相隔的时间
  lastTap = currentTime;
  if (tapLength < 500 && tapLength > 0) { // 判断是否为双击事件
    touchEndListener && clearTimeout(touchEndListener); // 清除touchend事件监听器
    console.log('Double Tap detected'); // 输出双击事件信息
  } else { // 否则,重新设置touchend事件监听器
    touchEndListener = setTimeout(() => {
      touchEndListener = null;
      console.log('Single Tap detected'); // 输出单击事件信息
    }, 500);
  }

  // 记录当前的触摸坐标
  const { pageX, pageY } = e.touches[0];
  this.touchStartPosition = { x: pageX, y: pageY };
}

function handleTouchEnd(e) {
  const { pageX, pageY } = e.changedTouches[0];
  const deltaX = pageX - this.touchStartPosition.x;
  const deltaY = pageY - this.touchStartPosition.y;

  // 判断当前的触摸距离是否在有效的双击范围内,比如20像素
  if (Math.abs(deltaX) < 20 && Math.abs(deltaY) < 20) {
    e.preventDefault(); // 阻止默认事件
  }
}

在以上代码中,我们设置了一个lastTap变量来记录上一次的触摸事件的时间戳,以判断当前的触摸事件是否为双击事件。在handleTouchStart函数中,我们记录了当前触摸事件的时间戳和坐标,用来在后续计算双击事件是否有效。在handleTouchEnd函数中,我们计算了当前的触摸坐标和起始坐标之间的位移,并判断是否在一定的范围内,以确定当前的触摸事件是否有效。如果有效,则使用e.preventDefault()来阻止默认事件的触发。


2.在React中,我们给循环「创建」的元素做"循环事件绑定",好还是不好?

在这里插入图片描述

按照常理来讲,此类需求用事件委托处理是组好的! ! !但是在react中本身就是通过事件委托来做的,这种循环并没有给每个span绑定,而是给每一个渲染出来的span加了一个属性。以后点击某个span都是传递到root上,然后去通知对应span上那个onclick去执行

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

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

相关文章

Linux 操作系统原理 — tc 流量控制技术解析

目录 文章目录 目录Traffic ControlTraffic Control 的基本实现原理流量处理的三个层面流量处理的关键流程流量队列的类型FIFO 队列PFIFO_FAST 队列SFQ 队列令牌桶队列 Kernel Traffic Control 的工作原理Qdisc&#xff08;队列描述&#xff09;Class&#xff08;分类&#xff…

电子元器件解析之电容(二)——电容分类与应用场景

书接上文&#xff1a;电子元器件解析之电容(一)——定义与性能参数&#xff1a;https://blog.csdn.net/weixin_42837669/article/details/131142286 摘要 本文总结了各种不同介质电容的特性&#xff0c;包括陶瓷电容、电解电容、薄膜电容等&#xff1b;同时对一些特殊场合的电容…

Transformer Block运算量

参考&#xff1a;Swin Transformer论文精读【论文精读】_哔哩哔哩_bilibili 在看朱毅老师讲解Swin Transformer论文时&#xff0c;里面有一个Transformer Block的计算复杂度的推导计算&#xff0c;感觉清晰明了&#xff0c;这里做一下记录&#xff0c;先说一下结果&#xff0c;…

Android:Handler

参考来源 参考来源 参考来源 参考来源 Handler机制&#xff08;面试版&#xff09; Binder/Socket用于进程间通信&#xff0c;而Handler消息机制用于同进程的线程间通信 handler机制是android系统运行的基础&#xff0c;它采用生产者&#xff0c;消费者模式进行设计。其中生产…

基于SSM的青少年编程学习系统设计与实现

摘 要&#xff1a;在智能技术飞速发展的今天&#xff0c;各国都努力争取在人工智能时代的发展中占据优势&#xff0c;青 少年编程教育就显得格外重要。不过&#xff0c;相比一些青少年编程教育发展更先进的国家&#xff0c;我国青少 年编程教育仍处在初级阶段&#xff0c;很多青…

服务器(裸机)如何安装Centos 7系统

1. 下载系统镜像&#xff08;可以选择自己对应的版本&#xff09; http://mirrors.aliyun.com/centos/7/isos/x86_64/2. 制作linux系统U盘 下载UltraISO制作工具并安装 再准备一个空U盘&#xff08;注意&#xff1a;这个操作会将U盘内数据全部删除操作之前请将U盘内文件备份&…

Swift学习笔记(一)基础语法

文章目录 前言开发工具变量与常量变量和常量的定义和使用变量和常量的命名规范注释初识基本数据类型浮点型数据布尔型数据两种特殊的基本数据类型元组可选值类型 为类型取别名模拟面试 字符、字符串与集合类型字符串类型字符串的组合字符类型转义字符 字符串类型中的常用方法集…

Redis的大key

什么是 redis 的大 key redis 的大 key 不是指存储在 redis 中的某个 key 的大小超过一定的阈值&#xff0c;而是该 key 所对应的 value 过大对于 string 类型来说&#xff0c;一般情况下超过 10KB 则认为是大 key&#xff1b;对于set、zset、hash 等类型来说&#xff0c;一般…

K8s in Action 阅读笔记——【13】Securing cluster nodes and the network

K8s in Action 阅读笔记——【13】Securing cluster nodes and the network 13.1 Using the host node’s namespaces in a pod Pod中的容器通常在不同的Linux名称空间下运行&#xff0c;这使得它们的进程与其他容器或节点默认名称空间下运行的进程隔离开来。 例如&#xff…

初学Nginx要掌握哪些概念

文章目录 为什么要使用Nginx&#xff1f;什么是Nginx&#xff1f;Nginx的作用&#xff1f;反向代理负载均衡动静分离 为什么要使用Nginx&#xff1f; 小公司项目刚刚上线的时候&#xff0c;并发量小&#xff0c;用户使用的少&#xff0c;所以在低并发的情况下&#xff0c;一个…

Android 逆向安全行业前景如何?

前言 Android 逆向是指对已经发布的 Android 应用进行分析和研究&#xff0c;通过逆向工程&#xff0c;将 Android 应用中的底层实现原理、业务逻辑、源代码以及恶意行为等等信息进行破解和掌握。逆向工程可以让研究者深入了解 Android 应用的实现细节&#xff0c;从而识别和修…

算法刷题-数组-螺旋矩阵

59.螺旋矩阵 力扣题目链接 给定一个正整数 n&#xff0c;生成一个包含 1 到 n^2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 思路 这道题目可以说在面试中出现频率较高的题目&#x…

3.DIY可视化-拖拽设计1天搞定主流小程序-前后分离框架运行

3.DIY可视化-拖拽设计1天搞定主流小程序-前后分离框架运行 前言 话不多说,直接实操。一、导入 diygw-ui-admin项目到vscode 克隆项目 : git clone https://gitee.com/diygw/diygw-ui-admin.git进入项目 桌面 cmd 运行: cd diygw-ui-admin推荐使用yarn 也可参照后面直接使用npm…

react合成事件+底层原理+发展历程

React中的合成事件 合成事件是围绕浏览器原生事件&#xff0c;充当跨浏览器包装器的对象;它们将不同浏览器的行为合并为一个API&#xff0c;这样做是为了确保事件在不同浏览器中显示一致的属性!保证兼容性 合成事件的基本操作 基础语法&#xff1a;在JSX元素上&#xff0c;直…

2023蓝桥杯大学A组C++决赛游记+个人题解

Day0 发烧了一晚上没睡着&#xff0c;感觉鼻子被打火机烧烤一样难受&#xff0c;心情烦躁 早上6点起来吃了个早饭&#xff0c;思考能力完全丧失了&#xff0c;开始看此花亭奇谭 看了六集&#xff0c;准备复习数据结构考试&#xff0c;然后秒睡 一睁眼就是下午2点了 挂了个…

交通 | GAMS快速入门及其在运输问题求解的应用

推文作者​&#xff1a;AmieeXue 第一部分 GAMS编程求解运输问题 GAMS&#xff0c;全称The General Algebraic Modeling System&#xff0c;是一款通用的高级数学建模工具&#xff0c;它支持线性规划、非线性规划、混合整数规划问题、二次约束规划&#xff08;QCP&#xff09;…

《面试1v1》List

我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 《面试1v1》 连载中… 面试官&#xff1a; 小伙子,听说你对Java集合挺在行的? 候选人&#xff1a; 谢谢夸奖,我对Java集合还在学习中,只能算入门水平。特别是List这…

vue 3 第三十五章:集成 tailwind Css

文章目录 1. tailWind css介绍2. tailWind css基本使用2.1. 步骤一&#xff1a;安装Tailwind CSS2.2. 步骤二&#xff1a;创建配置文件2.3. 步骤三&#xff1a;配置PostCSS2.4. 步骤四&#xff1a;引入样式文件2.5. 步骤五&#xff1a;模板中使用tailWind css 3. 补充3.1. 语法…

【P60】JMeter Jtl 文件的 html 格式输出

文章目录 一、汇总报告&#xff08;Summary Report&#xff09;参数说明二、准备工作三、测试计划设计四、Jtl 文件的 html 格式输出 一、汇总报告&#xff08;Summary Report&#xff09;参数说明 可以查看事务或者取样器在某个时间范围内执行的汇总结果 使用场景&#xff1…

Shell脚本攻略:Linux防火墙(二)

目录 一、理论 1.SNAT 2.DNAT 3.tcpdump抓包工具 二、实验 1.SNAT实验 2.DNAT实验 3.tcpdump抓包 一、理论 1.SNAT &#xff08;1&#xff09;概念 SNAT又称源地址转换。 源地址转换是内网地址向外访问时&#xff0c;发起访问的内网ip地址转换为指定的ip地址 &#…