首頁  >  文章  >  web前端  >  詳細介紹JavaScript行動端事件的基礎及常用事件庫的總結

詳細介紹JavaScript行動端事件的基礎及常用事件庫的總結

巴扎黑
巴扎黑原創
2017-08-17 16:06:501391瀏覽

這篇文章主要為大家詳細介紹了js行動端事件基礎及常用事件庫,具有一定的參考價值,有興趣的夥伴們可以參考一下

一、事件基礎

PC:click、mouseover、mouseout、mouseenter、mouseleave、mousemove、mousedown、mouseup、mousewheel、keydown、keyup、load、scroll、blur、focus、change...



行動端: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];
   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位址https://github.com/zhouxiaotian/fastclick)#######2、點擊、點擊、雙擊、長按、滑動、左滑、右滑、上滑、下滑#### ##點擊和雙擊(300MS)######點擊和長按(750MS)######點擊和滑動(X/Y軸偏移的距離是否在30PX以內,超過30PX就是滑動) ######左右滑動和上下滑動(X軸偏移的距離> Y軸偏移的距離= 左右滑相反就是上下滑)######左滑和右滑(偏移的距離>0 = 右滑  相反是左滑)#########二、常用的事件庫#########FastClick.js :解決CLICK事件300MS的延遲##### #TOUCH.js:百度雲端行動手勢庫  GitHub位址  https://github.com/Clouda-team/touch.code.baidu.com######實例如下:  ########### ##
var oBox = document.querySelector('.box');
  //单击
  touch.on(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)
  })
  //双击
  touch.on(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)
  })
  //长按
  touch.on(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、slideToggle...但是在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(){
    
   }
  })

以上是詳細介紹JavaScript行動端事件的基礎及常用事件庫的總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn