mobile_点透_传透_touch-action
点透(传透)
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
PC 的 click 事件 在移动端,会有 300 ms 的延迟。就是因为避免和手机双击行为发生冲突

- 点透现象:(面试题)
- 轻轻触碰 box ,box 消失
当点击 非文字覆盖区域 时,盒子正常消失。
当点击 文字区域时,页面发生跳转。
- 理想情况:
无论点击哪个区域,只要是点击盒子,盒子都消失,而不影响 a
- 解决方案1:(面试阐述)
click 事件监听,
缺点: PC 端的 click 事件 在 移动端有 300 ms 的延迟
- 解决方案2(模拟器测试无效, 移动端有效):
① 让 a 元素不能跳转,即取消浏览器的默认行为
document.addEventListener("touchstart", function(e){
e.preventDefault();
}, false);
② box 盒子消失,点击 a 元素,a 应该跳转,即给 a 元素指定一个全新的跳转动作
// 点透(传透)
(function(){
// 1. 取消默认行为
document.addEventListener("touchstart", function(e){
e.preventDefault();
}, false); var aNodes = document.querySelectorAll('a');
for (var i=0;i<aNodes.length;i++) {
aNodes[i].addEventListener('touchstart',function(){
window.location = this.href; // 2. 获取 a 的跳转地址, 交给 window 实现跳转
}, false);
};
})(); /**** 模拟器测试无效, 实际测试有效
window.location 是一个只读对象,所有字母必须小写
但是仍然可以赋予一个对象 DOMString
两种写法,效果一致
window.location = "https://www.baidu.com";
window.location.href = "https://www.baidu.com";
****/
关于浏览器报错
[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. See…
是因为在取消浏览器默认行为后,浏览器将触屏事件识别为被动,而报错
- 需求:
会影响交互操作,例如,自定义滚动,或者元素拖拽效果等,
会触发浏览器原生的滚动,产生不好的交互体验效果
- 解决:
1. 加入 css //
html {
touch-action: none;
}
缺点:
- iOS Safari浏览器不支持
- 干掉了可能需要的原生的touch相关行为
2. 直接传递 {passive:false} ,告诉浏览器是主动要求阻止默认行为的,解决 treated as passive 错误
document.addEventListener("touchstart", function(e){
e.preventDefault();
}, {passive: false});
总结:
在使用以上方法去除错误后,
需要自定义所有 点击,滑动,缩放等等事件!!!
否则你就会出现滑动失效这一类的错误了!
touch-action: auto;
移动端一个与手势触摸密切相关的 CSS 属性,
源自windows phone手机, 后被广大浏览器引入
移动端可以畅行的CSS属性
可选值:
- touch-action: auto;
默认值,表示手势操作什么的完全有浏览器自己决定
- touch-action: manipulation;
浏览器只允许进行滚动和持续缩放操作,类似双击缩放这种非标准操作就不可以。
想当初,click事件在移动端有个300ms延时,就是因为避免和手机双击行为发生冲突
设置后就干掉了双击行为,避免浏览器click事件300ms延时问题
有了 touch-action:manipulation,我们可以在网页中放心大胆使用click事件了
auto 和 manipulation 是 Safari 唯一支持的两个 touch-action 属性值
其他关键字,正如字面意思,要么只能左移,要么只能左右移动,要么只能右移之类
- touch-action: none;
不进行任何touch相关默认行为
例如,你想用手指滚动网页就不行,双击放大缩小页面也不可以,所有这些行为要自定义
任意组合如: touch-action: pan-left pan-up pan-zoom; 表示可以左移,上移和缩放。
- touch-action: pinch-zoom;
手指头可以用来缩放页面
- touch-action: pan-x;
手指头可以水平移来移去
- touch-action: pan-left;
手指头可以往左移动,移动开始后还是可以往右恢复的
- touch-action: pan-right;
手指头可以可以往右移动,移动开始后还是可以往左恢复的
- touch-action: pan-y;
手指头可以垂直移来移去
- touch-action: pan-up;
手指头可以往上移,移动开始后还是可以往下恢复的
- touch-action: pan-down;
手指头可以往下移,移动开始后还是可以往上恢复的
mobile_点透_传透_touch-action的更多相关文章
- 前台的url通过 ActionName?var1=xx&var2=yy 的形式传给特定action
本文对自己开发的基于lucene和J2EE技术的搜索引擎开发经验进行简单总结.今后可能会从性能的角度总结lucene开发经验.当数据上TB级别后,分布式lucene以及结合分布式文件系统(如HDFS) ...
- 实时竞价RTB广告平台_传漾科技_中国领先的智能数字营销引擎
实时竞价RTB广告平台_传漾科技_中国领先的智能数字营销引擎 Programmatic Framework™ 传漾程序化购买框架
- jsp页面传参到action出现乱码
jsp页面以连接方式传参到后台action时( <a href="http://localhost:8080/SocialBook/pages/bookdetail?book.id=& ...
- 将 jsp 页面的值 传到struts2 action中(不是表单中的值)
JSP: 页面: <%@ page language="java" pageEncoding="GBK"%> <%@taglib prefi ...
- day8——ajax传参到action(Struts2)
第一种:url+?+参数 jsp中: $(function(){ $("[name='delemp']").click(function(){ $this = $(this); $ ...
- js对象传到后台ACTION使用
需的包 <script type="text/javascript" src="s"></script>gson-1.2.3.jar谷歌 ...
- 4_爬NMPA药监总局_动态加载_传ID
http://scxk.nmpa.gov.cn:81/xk/ import requests url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAc ...
- 4G DTU为什么要具有透传的功能
4G DTU为什么要透传 透传的目的就是为了在数据传输的过程中不对数据做任何出来,实现发送方和接收方的数据完全一样,长度和内容完全没有变化.它主要是使用在智能设备之间的远程串口数据传输,是一种和传输方 ...
- Struts2 Action 动态传参数
Struts2的两个Action之间传参的问题. 需求功能是这样:Action1 获取数据库配置内容,得到相应Model的 动态URL ,这里的URL 有的是Action有的是JSP页面. 1.使用r ...
随机推荐
- ACM-ICPC 2018 徐州赛区网络预赛 F Features Track(STL模拟)
https://nanti.jisuanke.com/t/31458 题意 有N个帧,每帧有K个动作特征,每个特征用一个向量表示(x,y).两个特征相同当且仅当他们在不同的帧中出现且向量的两个分量分别 ...
- [物理学与PDEs]第4章第2节 反应流体力学方程组 2.2 反应流体力学方程组形式的化约
1. 粘性热传导反应流体力学方程组 $$\beex \bea \cfrac{\rd \rho}{\rd t}&+\rho \Div{\bf u}=0,\\ \cfrac{\rd Z}{\rd ...
- 02 Redis关闭服务报错---(error) ERR Errors trying to SHUTDOWN. Check logs.
127.0.0.1:6379> shutdown (error) ERR Errors trying to SHUTDOWN. Check logs. 1.在redis.conf中修改日志文件的 ...
- 用Navicat连接阿里云ECS服务器上的MySQL数据库
今天用navtive连接阿里云服务器(Linux)的数据库时,老是连接不上,并且报10060错误,要通过以下两个步骤解决: 1.先进入linux连接数据库并输入密码: mysql -uroot -p ...
- 不用写代码的框架 - RobotFramework+Eclispe环境安装篇
环境安装是学习任何一个新东西的第一步,这一步没走舒坦,那后面就没有心情走下去了. 引用名句:工欲善其事必先利其器!! Robotframework:一款 自动化测试框架. Eclipse:一款编辑工具 ...
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week4 特殊应用:人力脸识别和神经风格转换
一.什么是人脸识别 老实说这一节中的人脸识别技术的演示的确很牛bi,但是演技好尴尬,233333 啥是人脸识别就不用介绍了,下面笔记会介绍如何实现人脸识别. 二.One-shot(一次)学习 假设我们 ...
- 剑指Offer编程题1——二维数组中的查找
剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...
- Qt websocket
1.pro 添加 QT += websockets #ifndef MYWEBSOCKETSERVER_H #define MYWEBSOCKETSERVER_H #include <QObj ...
- git使用随笔
详细:https://blog.csdn.net/qq_31117191/article/details/77141825 git是分为三部分,一部分是你自己的文件,另外一个是缓存区,最后一个是本 ...
- Android的路接下来该怎么走?
其实想写这篇文章好久了,很多小伙伴们也经常在群里探讨android移动开发者的走向,一部分人都想多快好省,间歇性踌躇满志.持续性混吃等死 ,只想用CV的开发模式们快速完成工作,然后回家王者农药.其实这 ...