这个问题,也算是个大坑了。
最开始的开始,是因为我们在做大装盘活动的时候,发现在ios上面出现了这样的问题:点击“转”按钮,ios上面会有延迟并且会出现图片的阴影,这个肯定就不好看了撒,然后,找吧,改吧。
对于延迟问题,使用以下方法解决:
FastClick消除点击延时提高程序的运行效率
引入插件的javascript文件到你的HTML网页中,像这样:
<script type='application/javascript' src='fastclick.js'></script> 注意:type属性在HTML5网页中可以省略不写。
脚本必须加载到实例化fastclick在页面的任何元素之前。
实例化 fastclick 最好在body元素的前面 $(function(){
//fastclick用于消除在移动浏览器上触发click事件与一个物理Tap(敲击)之间的300s延迟
FastClick.attach(document.body);
});
附加: 解决移动端点透问题方法:
1. 众所周知,zepto的tap事件是有点透问题的,但是最新版的zepto已经修复了这个问题。
2. 在zepto修复问题之前,有fastclick、hammer等通用库可以使用。
其中最常使用的还是fastclick,地址 :https://github.com/ftlabs/fastclick
对于点透问题,参考这位同学写的博客,写的很好:web移动前端的click点透问题
图片阴影的问题,找了好久,终于找到了解决办法:
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
// 后面的几行是新加的
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none;
-webkit-user-select: none;
outline: none;
}
好啦,大功告成。结果第二天来上班,又出现了问题,说的是所有的input框在ios上面都无法输入了,这个时候,我慌了。仔细回想,头天代码都没动,只是改了这个,好吧,又开始网上各种查各种找。
终于找到原因啦。。。。
就是-webkit-user-select: none;导致的!!!
经过查阅,网上有提供一种好的解决办法:
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-tap-highlight-color: transparent;
outline: none;
} *:not(input,textarea) {
-webkit-touch-callout: none;
-webkit-user-select: none;
}
最终完美解决了这个问题。后来查阅了一下,新加的几行代码的意思:
-webkit-tap-highlight-color
这是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中。
当用户点击iOS的Safari浏览器中的链接或JavaScript的可点击的元素时,覆盖显示的高亮颜色。
该属性可以只设置透明度。如果未设置透明度,iOS Safari使用默认的透明度。当透明度设为0,则会禁用此属性;当透明度设为1,元素在点击时不可见。
-webkit-touch-callout
当你触摸并按住触摸目标时候,禁止或显示系统默认菜单。在iOS上,当你触摸并按住触摸的目标,比如一个链接,Safari浏览器将显示链接有关的系统默认菜单。这个属性可以让你禁用系统默认菜单。
user-select
(1) 语法
user-select:none | text | all | element
默认值:text
适用范围:除替换元素外的所有元素
(2) 取值说明
none:文本不能被选择
text:可以选择文本
all:当所有内容作为一个整体时可以被选择。如果双击或者在 上下文上点击子元素,那么被选择的部分将是以该子元素 向上回溯的最高祖先元素。
Element:可以选择文本,但选择范围受元素边界的约束