点透问题及解决
2018-12-27 07:41:21来源:博客园 阅读 ()
一、问题描述
实际学习与工作中可能会有这样的需求:在移动web中给有重叠的两个元素都添加了点击事件,当触发上方的元素的时候同时也会透过该元素触发下面的元素。这就是点透,然而这并不是我想要的效果。
二、例子
下面通过多种方式来模拟感受点透:
<div class="tap">tap</div>
<div class="click">click</div>
1、使用原生js
直接给两个盒子绑定点击事件:
var tap = document.querySelector('.tap');
var click = document.querySelector('.click');
//一、为tap添加touch事件 touch事件只是针对移动端,pc端无效
tap.addEventListener('touchstart',function(e) {
tap.style.visibility = "hidden";
});
click.addEventListener('click',function(e) {
click.style.backgroundColor = "blue";
})
在移动端如下效果:仅仅点击tap盒子,tap盒子隐藏,click盒子也被触发改变了背景颜色。
一、问题描述
实际学习与工作中可能会有这样的需求:在移动web中给有重叠的两个元素都添加了点击事件,当触发上方的元素的时候同时也会透过该元素触发下面的元素。这就是点透,然而这并不是我想要的效果。
二、例子
下面通过多种方式来模拟感受点透:
<div class="tap">tap</div>
<div class="click">click</div>
1、使用原生js
直接给两个盒子绑定点击事件:
var tap = document.querySelector('.tap');
var click = document.querySelector('.click');
//一、为tap添加touch事件 touch事件只是针对移动端,pc端无效
tap.addEventListener('touchstart',function(e) {
tap.style.visibility = "hidden";
});
click.addEventListener('click',function(e) {
click.style.backgroundColor = "blue";
})
在移动端如下效果:仅仅点击tap盒子,tap盒子隐藏,click盒子也被触发改变了背景颜色。
问题1:点透
问题2:touch在PC端无效
问题3:click事件在移动端有延迟约300ms的问题(详细见移动端click延迟和tap事件)
2、使用自己封装的tap事件
封装的tap事件代码详见上一篇:移动端click延迟和tap事件
idcast.tap(tap,function(e){
tap.style.visibility = "hidden";
})
idcast.tap(click,function(e) {
click.style.backgroundColor = "blue";
})
结果:移动端没有出现点透,但是PC端无效。
问题1:封装的tap事件由touchstart和touchend实现,touch事件在pc端无效
3、使用zepto
$('.tap').on("tap",function() {
$(this).hide();//zepto中tap事件在touch.js中
});
$('.click').on("click",function() {
$(this).css("backgroundColor","blue");
})
该版本zepto的点透问题已经解决可以放心使用,但是PC端仍然无效。
三、解决
综合上述:web想同时移动端和PC端呈现,又要解决点透问题,可以直接使用一个fastclick.js插件:fastclick
如下的使用:可以完美解决以上三者问题
if ('addEventListener' in document) {
document.addEventListener('DOMContentLoaded', function() {
FastClick.attach(document.body);//给body绑定attach事件,是body中所有的元素都添加了attach事件
}, false);
}
tap.addEventListener('click',function() {
$(this).hide();
})
click.addEventListener('click',function() {
$(this).css("backgroundColor","blue");
})
当然不是拿来主义,而是充分利用各种工具以提高自己学习和工作的效率。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:浅谈CSS三栏布局的N种实现
下一篇:HTML浏览器标题栏如何设置
- Vue 打包后自定义样式无法覆盖elementUI组件原有样式问题 2020-05-31
- 关于浏览器兼容问题 2020-05-27
- 解决微信小程序引用echarts视图模糊的问题 2020-04-24
- 解决 vs code 打开文件总是只有一个tab标签页,新打开的tab 2020-04-23
- 11.行盒垂直对齐和图片的底部白边问题 2020-04-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash