如何用JavaScript完美地区分双击和单击事件

news2025/7/5 0:21:38

通过一个悬浮球交互功能的案例来阐述问题,以及解决办法。

实现效果

类似微信里的悬浮窗效果,苹果手机的悬浮球功能效果

1.可以点击拖动,然后吸附在窗口边缘2.点击悬浮球,可以跳转界面,或者更改悬浮球的形态准备

1.移动端使用 touch事件类型:

  • touchstart当用户在触摸平面上放置了一个触点时触发 (手指放到屏幕上)* touchmove当用户在触摸平面上移动触点时触发 (手指在屏幕上滑动)* touchend当一个触点被用户从触摸平面上移除(抬起手指)* touchcancel终止触摸事件> 多点触控

2.TouchEvent.targetTouches 只读

一个 TouchList 对象,是包含了如下触点的 Touch 对象:触摸起始于当前事件的目标 element 上,并且仍然没有离开触摸平面的触点。

视口处于第四象限,原点在左上角

event.targetTouches.clientX // 触摸元素横坐标
event.targetTouches.clientY // 触摸元素纵坐标 

3.TouchEvent.touches 只读

一个 TouchList 对象,包含了所有当前接触触摸平面的触点的 Touch 对象,无论它们的起始于哪个 element 上,也无论它们状态是否发生了变化。

实现

通过设置悬浮球定位样式,拖动的时候计算坐标,然后动态的修改悬浮球的定位偏移量,结合transtion过渡效果,实现平滑的过渡

代码比较简单,就不贴了。

问题

当给元素添加了touch事件之后,click事件就不会出发了,那么怎么模拟点击效果呢?

分析

在不了解触摸事件响应机制的时候,你可能会从计算触摸目标元素的时长或者计算触摸起始位置来判定点击行为,但是这两种方式都不是最佳的,原因有以下几点:

1.计算触摸时长比较麻烦2.判断移动距离不严谨,有可能拖动了一圈又回到初始位置3.结合计算触摸时长和触摸元素起始位置两种方式,逻辑比较复杂下面看我是怎么做的:

首先应该了解触摸行为的事件响应机制:

  • 如果有拖动行为,事件执行次序为:touchstart-> touchmove-> touchend* 没有拖动行为,事件执行次序为:touchstart-> touchend从上面的分析来看,我们可以从touchmove 入手,继续往下看👇

解决

1.在touchmove事件中增加一个是否移动过的标记isMoved: true2.在touchend事件中判断isMoved是否为true,是true则按原有逻辑执行,是false则说明没有移动过,属于点击行为3.在touchend事件最后,重置isMoved为初始值false,这样每一个触摸操作都可以进入同样的逻辑,不用担心状态混乱完美解决模拟点击行为🎉🎉

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

C++ 语法基础课2 —— printf 语句与判断结构

文章目录1. printf 输出格式(#include<cstdio>)1.1 int、float、double、char 等类型的输出格式1.2 所有输出的变量均可包含在一个字符串中1.2.1 练习11.2.2 练习21.3 扩展功能2. if 语句2.1 基本 if-else 语句2.1.1 练习12.1.2 练习22.1.3 练习42.2 常用比较运算符2.3 i…

金融业数字化聚焦容器云,全闪存为什么是点睛之笔?

文|螳螂观察 作者|李永华 刻板、保守、小心翼翼…… 很多人对金融业尤其是银行在数字化创新方面的印象&#xff0c;都是如此。 这个印象到底对不对&#xff1f; 答案可能是&#xff0c;既对&#xff0c;又不对。 对的地方在于&#xff0c;出于合规等要求&#xff0c;一个…

[附源码]计算机毕业设计JAVA点餐系统

[附源码]计算机毕业设计JAVA点餐系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven…

采集平台-大数据平台数据采集系统

随着社会的发展。人们也是越来越离不开互联网&#xff0c;今天小编就给大家盘点一下免费的采集平台&#xff0c;只需要点几下鼠标就能轻松爬取数据&#xff0c;不管是导出excel还是自动发布到网站都支持。详细参考图片一、二、三、四&#xff01; 企业人员 通过爬取动态网页数…

android 静默升级 卸载功能实现

一、近期需要实现一个apk静默升级卸载自启动功能&#xff0c;首先需要获取系统root权限才能执行静默升级&#xff0c;下面不墨迹直接上代码. 首先是MainActivity 页面 package com.example.tiaoshiapkjingmo;import androidx.appcompat.app.AppCompatActivity; import okhttp3.…

如何利用 promise 影响代码的执行顺序?

如何利用 promise 影响代码的执行顺序&#xff1f; 我们写代码的时候&#xff0c;经常会遇到这样的场景。2个不同组件&#xff0c;它们的生命周期本身都是相互独立&#xff0c;毫无关联的&#xff0c;但是它们调用的接口&#xff0c;存在相互依赖的情况。 我举个例子&#xf…

windows中Mysql数据库的安装和卸载

以安装包“mysql-5.7.35-win32.zip”为例&#xff0c;推荐安装5.7最新版本 一、安装 1、根据自己操作系统版本下载32位或64位的安装包&#xff0c;也可去官网下载&#xff0c;建议下载如下图压缩包 将下载的解压包解压&#xff0c;目录结构如下&#xff1a; 2、新建文件“my.…

IC工程师入门必学,Verilog零基础入门教程

近年来&#xff0c;IC行业发展火热&#xff0c;薪资待遇高&#xff0c;发展前景好&#xff0c;所以成了很多人转行的首选。但IC行业入行门槛高&#xff0c;需要具备相关的知识技能。比如工程师必须至少掌握一种HDL语言。 一般在HDL语言中&#xff0c;Verilog相对来说更加易学、…

负载均衡架构设计技巧

负载均衡算法 轮询&随机 基本原理 轮询&#xff1a;将请求依次发给服务器 随机&#xff1a;将请求随机发给服务器 适用场景 通用&#xff0c;无状态的负载均衡 优缺点 实现简单不会判断服务器状态&#xff0c;除非服务器连接丢失 问题场景 某个服务器当前因为触发…

Java面向对象---尚硅谷Java入门视频学习

1.类和对象 1.1创建过程 对象是将内存地址赋值给了变量&#xff0c;所以变量其实引用了内存中的对象&#xff0c;所以称之为引用变量&#xff0c;而变量的类型&#xff08;即类&#xff09;称之为引用数据类型。 堆&#xff08;Heap&#xff09;&#xff0c;此内存区域的唯…

关于pytorch的数据处理-数据加载Dataset

目录 1. 数据加载 2. Dataset __init__ __getitem__ __len__ 测试一下 完整代码 3. Dataset - ImageFolder 1. 数据加载 最近在使用 Unet 做图像分割&#xff0c;设计到 处理数据有关的工作&#xff0c;查了点资料&#xff0c;做一些简单的总结 在pytorch 中&#x…

Thinkphp安装报错解决办法

跟着官方文档的步骤安装thinkphp报错该如何解决&#xff1a; 前言 ThinkPHP无需安装过程&#xff0c;但是需要把ThinkPHP框架放入WEB运行环境&#xff08;前提是你的WEB运行环境没有问题&#xff09;。 一、Thinkphp安装以及报错解决方式 Thinkphp官网&#xff1a;安装ThinkP…

Mysql为何不推荐写多表SQL

前言 在大部分情况下&#xff0c;单表并不是比多表快单表优势在于理解成本与可控性有时候你觉得单表SQL不好写的时候&#xff0c;你改更新的是表结构 现状 在我们学习MySql的路程之中&#xff0c;估计不少人告诫我们不要写长语句。 至于为什么&#xff0c;确实很少人提起。 …

2.6 用一套万能文案公式来拆解4个小红书爆文案例【玩赚小红书】

公式细分人群他们的痛点数字干货分享情感共鸣 我们一个一个来看。 ​ ​ 一、《9平次卧小房间&#xff0c;再见了传统榻榻米&#xff08;附户型图&#xff09;》 家装类&#xff1a;避坑/攻略/小价钱装出大效果/装修效果拔群 标题直接点出了目标人群的需求&#xff1a;如何…

XSS进阶之CSP绕过

目录预备知识实验目的实验环境实验步骤一实验步骤二实验步骤三预备知识 1.了解Javascript、PHP和CSP的一些特性&#xff0c;比如“strict-dynamic”。 2.CSP&#xff1a;实质就是白名单制度&#xff0c;它规定哪些外部资源可以加载和执行。它的实现和执行全部由浏览器完成。资…

python实战指西<1>pygame安装,以及vscode

目录 1&#xff0c;安装pygame 1.1&#xff0c;&#xff08;如果前一个没反应的化&#xff09; 1.2如果飘红字 1&#xff0c;检查是否开了网络代理&#xff08;不要开&#xff09; 2&#xff0c;检查是否有pip模块更新需要 2.这里顺便记录一下vscode 蛇蛇的环境搭载 2.1首…

Postgresql实验系列(4)SIMD提升线性搜索性能24.5%(附带PG SIMD完整用例)

概要 接上一篇《Postgresql引入SIMD指令集》 PG引入SIMD执行集后具体有多大性能提升&#xff1f;本篇抽取PG的simd库&#xff0c;对比线性搜索场景的性能&#xff1a; 测试场景&#xff08;文章最后提供完整程序&#xff09; 构造一个存有14亿数字的数组 uint32 cnt 14100…

【python3】3.函数、类、模块

2022.11.15 本学习内容总结于莫烦python:3.函数、类、模块 https://mofanpy.com/tutorials/python-basic/interactive-python/function1. Function 函数 我常会重复写一些功能&#xff0c;比如查询文件时间&#xff0c;查询文件名字等等.后续我只需要引用到这个功能&#xff0…

Flink架构重要概念解析-超详理解

文章目录&#x1f48e; 1.1 系统架构1.1.1 整体构成1.1.2 作业管理器&#xff08;JobManager&#xff09;1.1.3 任务管理器&#xff08;TaskManager&#xff09;&#x1f680;1.2 作业提交流程1.2.1 高层级抽象视角1.2.2 独立模式&#xff08;Standalone&#xff09;1.2.3 YARN…

网页数据采集系统-怎样利用爬虫爬网站数据

随着社会不停地发展。人们也是越来越离不开互联网&#xff0c;今天小编就给大家盘点一下免费的网页数据采集系统&#xff0c;只需要点几下鼠标就能轻松爬取数据&#xff0c;不管是导出excel还是自动发布到网站都支持。详细参考图片一、二、三、四&#xff01; 企业人员 通过爬…