js学习总结----移动端事件基础及常⽤的事件库
⼀、事件基础
PC:click、mouseover、mouseout、mouseenter、mouseleave、mousemove、mousedown、mouseup、mousewheel、keydown、keyup、load、scroll、blur、focus、
移动端:click(单击)、load、scroll、blur、focus、change、input(代替keyup、keydown)...TOUCH事件模型(处理单⼿指操作)、GESTURE事件模型(处理多⼿指操作)
TOUCH:touchstart、touchmove、touchend、touchcancel
GESTURE:gesturestart、gesturechange、gestureend
1、click:在移动端click属于单击事件,不是点击事件,在移动端的项⽬中我们经常会区分单击做什么和双击做什么,所以移动端的浏览器在识别click的时候,只有确定是单击后
才会把它执⾏:
在移动端使⽤click会存在300ms的延迟:浏览器在第⼀次点击结束后,还需要等到300ms看是否触发了第⼆次点击,如果触发了第⼆次点击就不属于click了,没有触发第⼆次
点击才属于click
下⾯代码是移动端模拟click时间的代码
function on(curEle,type,fn){
curEle.addEventListener(type,fn,false);
}
var oBox = document.querySelector('.box');
//移动端采⽤click存在300ms延迟
// oBox.addEventListener('click',function(){
// this.style.webkitTransform = 'rotate(360deg)'
// },false)
//使⽤TOUCH事件模型实现点击操作(单击&&双击)
on(oBox,'touchstart',function(ev){
//ev:TouchEvent事件属性 type、target、preventDefault(returnValue)、stopPropagation、changedTouches、touches
//changedTouches和touches都是⼿指信息的集合(touchList),touches获取到值的必要条件只有⼿指还在屏幕上才可以获取,所以在touchend事件中如果想获取⼿指离开的瞬间坐标只能使⽤changedTouches获取var point = ev.touches[0];
this['strX'] = point.clientX;
this['strY'] = point.clientY;
this['isMove'] = false;
})
on(oBox,'touchmove',function(ev){
var point = ev.touches[0];
js控制css3动画触发
var newX = point.clientX,
newY = point.clientY;
//判断是否发⽣滑动,我们需要判断偏移的值是否在30PX以内
if(Math.abs(newX-this['strX'])>30 || Math.abs(newY-this['strY'])>30){
this['isMove'] = true;
}
})
on(oBox,'touchend',function(ev){
if(this['isMove'] === false){
//没有发⽣移动点击
this.style.webkitTransitionDuration = '1s';
this.style.webkitTransform = 'rotate(360deg)';
var delayTimer = window.setTimeout(function(){
this.style.webkitTransitionDuration = '0s';
this.style.webkitTransform = 'rotate(0deg)';
}.bind(this),1000);
}else{
//滑动
this.style.background = 'red';
}
})
同时也可以使⽤fastclick.js来解决移动端click事件的300ms延迟(github地址github/zhouxiaotian/fastclick)
2、点击、单击、双击、长按、滑动、左滑、右滑、上滑、下滑
单击和双击(300MS)
点击和长按(750MS)
点击和滑动(X/Y轴偏移的距离是否在30PX以内,超过30PX就是滑动)
左右滑动和上下滑动(X轴偏移的距离 > Y轴偏移的距离 = 左右滑相反就是上下滑)
左滑和右滑(偏移的距离 >0 = 右滑相反就是左滑)
⼆、常⽤的事件库
FastClick.js :解决CLICK事件300MS的延迟
TOUCH.js:百度云移动⼿势库 GitHub地址 github/de.baidu
实例如下:
var oBox = document.querySelector('.box');
/
/单击
<(oBox,'tap',function(ev){
this.style.webkitTransitionDuration = '1s';
this.style.webkitTransform = 'rotate(360deg)';
var delayTimer = window.setTimeout(function(){
this.style.webkitTransitionDuration = '0s';
this.style.webkitTransform = 'rotate(0deg)';
window.clearTimeout(delayTimer)
}.bind(this),1000)
})
//双击
<(oBox,'doubletap',function(ev){
this.style.webkitTransitionDuration = '1s';
this.style.webkitTransform = 'rotate(-360deg)';
var delayTimer = window.setTimeout(function(){
this.style.webkitTransitionDuration = '0s';
this.style.webkitTransform = 'rotate(0deg)';
window.clearTimeout(delayTimer)
}.bind(this),1000)
})
//长按
<(oBox,'hold',function(ev){
this.style.backgroundColor = 'red';
})
HAMMER.js
Zepto.js:被誉为移动端的⼩型JQ,JQ由于是在PC端使⽤的,所以代码中包含了⼤量对于ie低版本浏览器的兼容处理,⽽ZEPTO只应⽤在移动端开发,所以在JQ的基础上没有对低版本的ie进⾏⽀持
JQ中提供了很多的选择器类型及DOM操作⽅法,但是ZEPTO只是实现了部分常⽤的选择器和⽅法。例如:JQ中的动画⽅法有animate、hide、show、fadeIn、fadeOut、fadeToggle、slideDown、slideUp、但是在ZEPTO中只有animate
ZEPTO的源代码⼤⼩⽐JQ⼩很多
ZEPTO专门为移动端开发⽽诞⽣,所以相对于JQ来说更适合移动端:
ZEPTO的animate动画⽅法⽀持了CSS3动画的操作
ZEPTO专门的准备了移动端常⽤的事件操作:tap、singleTap、doubleTap、longTap、swipe、swipeUp、swipeDown、swipeLeft、swipeRight
实例代码如下:
$('.box').singleTap(function(ev){
$(this).animate({
rotate:'360deg'
},1000,'linear',function(){
this.style.webkitTransform = 'rotate(0)'
})
})
$('.box').on('touchstart',function(){
$(this).css('background','red')
})
$.ajax({
url:'',
type:'get',
dataType:'json',
cache:false,
success:function(){
}
})
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论