由于触摸事件上的类切换/高度变化而导致可点击区域错位

2024-05-08

如果您切换上方元素的高度,则触摸设备上的链接可点击区域会出现奇怪的行为。如果您运行以下代码片段(例如,将其保存在本地并使用 chrome 来模拟触摸事件),您会注意到哈希值#mylink在某些情况下,您没有点击红色链接区域,会将 url 添加到 url 中。而且有时你点击红色区域,它不会被添加。

E.g.

  • 如果单击上部灰色区域(前 200 像素),灰色区域会切换高度。 => 好的。
  • 如果单击增强的下部灰色区域 (200px - 400px),#mylink添加到网址中,就像您单击了红色链接区域一样。 => 为什么?
  • 如果单击上方的红色区域(前 200px,灰色区域最小化),#mylink未添加到网址中。 => 为什么?
  • 如果点击下方的红色区域(最后200px,灰色区域增强),#mylink未添加到网址中。 => 为什么?
<html>
<head>
	<style type="text/css">
		.test {
			background: grey;
			height: 200px;
		}

		.test.is-visible {
			height: 400px;
		}

		.link {
			height: 600px;
			display: block;
			background: red;
		}
	</style>
	<script type="text/javascript">
	  (function() {
	    window.addEventListener( 'touchstart' , function() {
	    	document.getElementsByClassName("test")[0].classList.toggle('is-visible');
	    });	
		})();
	</script>
</head>

<body>
	<div class="test">
		Click the grey area. Element enhances and minimizes itself. Now click on the lower half of the enhanced grey area (if grey = enhanced) or on the white area up to 200px below of the red area (if grey = minimized). #mylink is added to the url as if you had clicked on the red area. Why?
	</div>
	<a href="#mylink" class="link">The red area is the "normal" click area.</a>
</body>

</html>

我在 iOS、Android 上尝试过,并在 Chrome 和 Firefox 中模拟了触摸事件。他们的行为都是一样的。

如果我听click代替touchstart or touchend事件,它按预期工作。

造成这种差异的原因是什么?如果我监听触摸事件而不是点击事件,为什么链接区域会不同/错位?


这是当您增强灰色区域并触摸下半部分时会发生的情况:

  • 当您触摸灰色区域的下半部分时,您的touchstart事件被触发
  • 您的函数运行并切换(删除)is-visible灰色元素上的类
  • 灰色元素的高度变小
  • 红色元素移动200px upwards
  • 您的触摸并未移动,但页面上的元素已移动 - 您现在正在触摸红色元素
  • 当您松开触摸时,touchend事件在红色元素上触发,该事件是确定链接是否被触摸的事件

当您点击该区域时也会发生同样的事情200px红色元素下方:

  • 当您触摸红色元素下方的区域时,您的touchstart事件被触发
  • 您的函数运行并切换(添加)is-visible灰色元素上的类
  • 灰色元素的高度变大
  • 红色元素移动200px向下
  • 您的触摸并未移动,但页面上的元素已移动 - 您现在正在触摸红色元素
  • 当您松开触摸时,touchend事件在红色元素上触发,该事件是确定链接是否被触摸的事件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于触摸事件上的类切换/高度变化而导致可点击区域错位 的相关文章

  • R Shinydashboard 自定义 CSS 到 valueBox

    我一直在尝试将 valueBox 的颜色更改为自定义颜色 超出 validColors 中可用的颜色 但一直无法这样做 我知道有一种方法可以使用标签来包含自定义 CSS 但是我无法将它们放在正确的位置 ui lt dashboardPage
  • 限制 Dropzone 仅上传特定类型的文件

    我正在使用 Dropzone 上传文件 这是我的代码 div div
  • 宽度:适合内容;在 Chrome 上工作,但在资源管理器上不工作

    我构建了一个应用程序 所有内容都在 Chrome 中完美显示 但如果我在 Windows 资源管理器中打开该应用程序 容器会比应有的小 我在用着width fit content 这是只适用于 Chrome 的东西吗 我怎样才能使其适用于所
  • 避免在 ES6 的函数内定位 this 的对象作用域

    例如 我正在使用 D3 js 运行一个项目 导入特定模块并调用它们的函数 Setup TypeScript ES6 导入特定的 D3 组件 角6 我有一个对象 在本例中是一个角度指令 并在 SVG 画布上绘制一些圆圈 并希望它们在拖动事件上
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • 如何防止弹性项目高度因其内容而溢出[重复]

    这个问题在这里已经有答案了 我刚刚开始学习 Flex 到目前为止我印象深刻 但是 我对包含页眉 页脚和三列的全页应用程序遇到了问题 第一列包含一个项目列表 由于我无法为其父级设置固定高度 因此每次列表增长时 它都会将页脚向下推 这是一个带有
  • 将输入中每个单词的第一个字符设为大写

    我想知道如何在输入区域自动生成单词的第一个字符 目前我的代码是 Name
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • Twitter bootstrap 3表单水平和单行多个输入列

    我需要将多列输入放在单行中 如下所示 我通过将多个输入分组为一个来做到这一点form group 但是这样我不能使用has error class div class form group div
  • 没有类的 CSS 选择器

    我正在使用选择器来选择不具有一个类的所有元素 list th not foo some rules 我怎样才能将其应用到多个班级 list th not foo list th not bar some rules 上面的 CSS 当然不会
  • 根据特定字符获取整个字符串或子字符串

    我有一个包含 MIME 类型的字符串 例如application json 现在我想将其与实际的 HTTP 标头进行比较 在本例中content type 如果标头包含 MIME 类型 那么就很简单 if mimeType contentT
  • Javascript onload 不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • 如何在桌面应用程序中调出 Windows 8 屏幕键盘

    我有一个全屏 DirectX 桌面应用程序 并且希望在用户点击游戏中的文本框时显示屏幕键盘 有没有办法在全屏模式下执行此操作 执行 osk exe 将弹出更老式的屏幕键盘 执行后会弹出Windows 8触摸键盘 C Program File
  • 水平对齐输入字段

    我正在尝试获取一个输入字段 并且它与同一水平线上的关联提交按钮相关 但事实证明这是一个挑战 这是我的代码
  • 搜索多维数组 JavaScript

    我有一个如下所示的数组 selected products 0 r1 7up 61 Albertsons selected products 1 r3 Arrowhead 78 Arrowhead selected products 2 r
  • 在具有多级分组的 HTML 表格中显示数据

    我必须通过使用 rowspan 进行分组来显示 HTML 表中的一些数据 下面是预期的 GUI 我有如下所示的 JSON 数据 JSON数据here https jsoneditoronline org id 1014438e5489485
  • ReactJs 警告:不推荐使用改变“style”。考虑事先克隆它

    我收到以下警告 inWarning div was passed a style object that has previously been mutated Mutating style is deprecated Consider c
  • p5 向量减法“sub”返回错误

    我一直在尝试将 p5 草图上传到 React 构建中 使用react p5 wrapper 我能够成功在屏幕上渲染画布 但是 某些矢量函数会导致错误 var distance this position dist ball position
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航

随机推荐

  • gitlab runner ssh私钥644文件权限错误

    运行 gitlab ci cd 管道时 ssh 给出 0644 badpermission 错误 变量作为文件类型存储在 gitlab 的 settings gt variable 部分中 gitlab ci yml 文件如下所示 stag
  • QT 中的应用程序->处理消息?

    在 Borland 6 中 我经常使用它来解除程序操作的卡住 Application gt Processmessages 现在 对于 QT 4 8 1 我在这个外国 对我来说 QT 文档中找不到 谁能帮我 在 Qt 中 您可以使用静态函数
  • Python社区模块,限制每个社区的规模?

    我正在使用社区模块 http perso crans org aynaud communities api html http perso crans org aynaud communities api html 检测图中社区的最佳划分函
  • Sharepoint 2013 MVC 5 提供商托管的应用程序。无法使用 [SharePointContextFilter] 在 HttpPost 上进行身份验证

    过去一周我一直在绞尽脑汁 无法解决对共享点提供商托管的应用程序进行正确身份验证的一些问题 我目前正在为公司的 Sharepoint 在线开发一个 sharepoint 应用程序 我正在使用 Visual Studio 2013 我将该应用程
  • Response.WriteFile / Response.BinaryWrite / Response.TransmitFile (ASP.NET) 出现问题

    我有一个简单的网页 可以生成一个 CSV 文件 我希望用户在创建完成后能够下载该文件 我的情况总结如下 CSV 文件可以在内存中或磁盘上创建 对我来说没关系 完成 CSV 文件传输后 我不希望它继续驻留在磁盘上 我尝试过使用 Respons
  • 在 Ext JS 构造函数中将项目推入数组会产生多个项目

    我有一个我定义的 Ext JS 类 在这个班级的constructor 我将一个文本字段推送到我的项目数组上 然后添加到我的测试字符串中 数组和字符串在类定义中都声明为空 但是 如果您尝试创建多个类实例 您将看到项目数组在每个实例之间共享
  • XML 序列化和命名空间前缀

    我正在寻找一种使用 C 的方法 可以将类序列化为 XML 并添加命名空间 但定义该命名空间将使用的前缀 最终我尝试生成以下 XML
  • 如何在没有 Cloud Explorer 的情况下从 Azure 应用服务获取事件日志文件?

    我有 Azure 应用服务 在 Visual Studio 2019 中 我可以执行以下操作来从中获取事件日志 Open 云浏览器窗户 查看 gt 云资源管理器 使用我的 Azure 凭据登录 展开订阅 然后展开资源组 然后展开应用服务 展
  • 如何正确链接 php-fpm 和 Nginx Docker 容器?

    我正在尝试链接 2 个单独的容器 nginx 最新 https registry hub docker com nginx php fpm https registry hub docker com php 问题是 php 脚本不起作用 也
  • AWS SNS 发布到订阅的 Lambda 函数记录空字段

    试图将其发布到 AWS 论坛 但无论这意味着什么 我的帐户似乎 尚未准备好 我设置了一个 AWS Lambda 函数 用 Java 编写 该函数接受 POJO 以允许自动反序列化 JSON 我使用的测试 JSON 如下所示 表示一旦一切启动
  • XCode5无法在iOS模拟器上安装应用程序

    我多次成功安装该应用程序 突然 我收到一条消息 我的应用程序 意外退出 失去连接 iOS 6 x 和 7 会发生这种情况 我已经尝试从模拟器中手动删除应用程序 重置 清理 退出 重新启动 一切 有什么建议吗 在 iOS 模拟器菜单中 执行
  • Spring Boot CSRF

    尝试在最新的Spring Boot上实现CSRF保护 互联网上的所有示例都是基于用户登录和身份验证 我不需要 我的网站没有任何需要身份验证的部分 我想 1 休息请求来自站点内部 不允许来自外部的 wget 直接请求 2 所有页面 路由 必须
  • 链接悬停时的淡入淡出效果?

    在许多网站上 例如http www clearleft com http www clearleft com 您会注意到 当将鼠标悬停在链接上时 它们会淡入不同的颜色 而不是立即切换 默认操作 我假设 JavaScript 是用来创建这种效
  • Express.js在控制器中获取http方法

    我正在构建一个注册表单 本地护照作为身份验证 表单作为表单助手 因为注册只知道 GET 和 POST 我想在一个函数中完成整个处理 换句话说 我正在寻找类似的东西 exports register function req res if r
  • 从 Air Native 扩展返回结构

    是否可以从本机代码返回结构 返回 int 或 boolean 相对简单 但是如何将更复杂的结构返回给动作脚本 您可以返回任何可以在本机代码中表示为 FREObject 的对象 这实际上包括任何 Actionscript 类或 Actions
  • viewDidLoad 中的帧大小错误[重复]

    这个问题在这里已经有答案了 可能的重复 为什么我必须在 viewDidLoad 中手动设置视图的框架 https stackoverflow com questions 6757018 why am i having to manually
  • Angular-ui State - 多个视图看不到我的解析数据

    由于某种原因 当使用多个命名视图 angular ui ui router 时 控制器看不到我的resolvedData 有人遇到过这个问题吗 stateProvider state page abstract true templateU
  • Windows 批处理文件:如何启用命令的内联回显

    如果在 Windows 批处理文件中默认禁用 echo 是否有办法为特定命令 内联 启用它 我知道可以回显特定命令disabled通过在命令前添加 但是有没有办法做相反的事情呢 例如 假设有一个像这样的批处理文件 echo off cmd1
  • UITableView 顶部出现间隙[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不确定现在问这个问题是否合适 我正在表视图上使用 Xcode 5 预览版 现在的问题是我的表格视图是否被选择为group比我在第一个单元
  • 由于触摸事件上的类切换/高度变化而导致可点击区域错位

    如果您切换上方元素的高度 则触摸设备上的链接可点击区域会出现奇怪的行为 如果您运行以下代码片段 例如 将其保存在本地并使用 chrome 来模拟触摸事件 您会注意到哈希值 mylink在某些情况下 您没有点击红色链接区域 会将 url 添加