移动端js知识总结
Posted 百年美
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移动端js知识总结相关的知识,希望对你有一定的参考价值。
1.如果使用jquery
绑定touch
事件的话,获取touchstart
,touchmove
的触点坐标用 e.originalEvent.targetTouches[0].pageX
,
获取touchend
则用 e.originalEvent.changedTouches[0].pageX
2.有些版本的iphone4
中, audio
和video
默认播放事件不会触发
比如使用window.onload
或计时器等都不能触发播放,必须用JS
写事件让用户手动点击触发才会开始播放,比如
$(document).one(‘touchstart‘,function(){
audio.play();
})
3.想要在touchmove:function(e,参数一)
加一个参数,结果直接使用e.preventDefault()
就会 e
报错,处理方法为
touchmove:function(e,参数一){
var e=arguments[0];
e.preventDefault();
}
4.点击一个元素时,使用touchstart
会立即触发,而使用click
则用有大概0.3s
的延迟
想模拟一个立即触发的点击事件有两种方法,fastclick.js
和zepto.js
里的tap
事件
5.不过zepto
的tap
事件有一个事件穿透的问题。
假如你tap
一个弹出层元素(这个元素遮罩了一个a
标签),这个元素立即消失,这样由于上述的0.3s
延迟tap
事件就会传递给a
标签成click
事件造成a标签跳转。
以上面的例子来说,解决方案视情况而定:
① tap
时让遮罩渐隐消失,这个过程超过400ms
就不会穿透到下一层去了
② 在touchend
事件回调中加入preventDefault
, 并在下一层中加上pointer-events:none
。(这个没用过)
③ 有的时候比如弹出一个iphone
上滑动出来的层,点击黑色半透明区域弹出层消失,这种可以在黑色区域绑定touchend
也是和tap
差不多的效果
1.当弹窗出现时,想禁止屏幕的滑动,给那个遮罩层添加touchmove
事件即可,用e.preventDefault()
会阻止的scroll
,click
等事件,消失时再off
掉,
$(".body_cover").on("touchmove", function(e) {
e.preventDefault();
});
2.使用input file
上传文件时,可以指定接受的类型,accept="image/png,image/jpeg,image/gif"
,
同时在android
上默认不能使用相机,可以加capture="camera"
同时,由于原生的样式不好看,可以通过设置input的display:none,然后使用id.click()去触发input元素的点击。
3.给元素加:active伪类时,如果要求高,兼容性好的话,就得用js监控touchstart然后加相应的class
$(document).on("touchstart", function(e) {
var target = $(e.target);
if (target.hasClass("is_hover")) {
target.addClass("hover_css");
}
});
以上是关于移动端js知识总结的主要内容,如果未能解决你的问题,请参考以下文章