在pc端,咱們一般使用$(window).scroll()事件來監聽元素的位置,來作一些入場動效,如:css
$(window).scroll(function(){ var panel3Move = document.getElementById('panel3').offsetTop <= ($(window).scrollTop() + 656); panel3Move && move('.panel1-man .man2').set('opacity', '1').duration('2.8s').end(); }
那麼在移動端開發中,也常常有手指滑動時作相關處理的需求,如 下滑時導航條吸頂、上滑時又恢復原態,下拉刷新、上拉加載更多等等.. 但是window對象的scroll事件在移動端有個致命的缺點:「必須手指鬆開才能觸發」!,用戶體驗很是差勁,幸運的是移動端提供了touch系列事件,問題也就迎刃而解了..git
思路:開啓touchStart、touchMove或者touchEnd的事件監聽,當手指按下的時候記錄初始位置,再根據滑動後的位置作減法,便可以判斷上滑/下滑,再處理相應的業務邏輯github
代碼片斷:函數
options: { startX: null, startY: null }, touchStart: function(event){ var self = touchMain; try{ var touch = event.touches[0], //獲取第一個觸點 x = Number(touch.pageX), //頁面觸點X座標 y = Number(touch.pageY); //頁面觸點Y座標 //記錄觸點初始位置 self.options.startX = x; self.options.startY = y; }catch(e){ console.log(e.message) } }, /** * 滑動時判斷下滑、上滑 * @param {[type]} event * @param {[type]} upcallback [上滑回調函數] * @param {[type]} downcallback [下滑回調函數] */ touchMove: function(event,upcallback,downcallback){ var self = touchMain; try{ var touch = event.touches[0], //獲取第一個觸點 x = Number(touch.pageX), //頁面觸點X座標 y = Number(touch.pageY); //頁面觸點Y座標 //判斷滑動方向 if (y - self.options.startY > 0) { //console.log('下滑了!'); downcallback && downcallback(); }else{ //alert('上滑了!'); upcallback && upcallback(); } }catch(e){ console.log('滑動時出錯:',e.message) } },
使用:ui
//下滑顯示、上滑隱藏 require(['touch'],function(){ var $getTicktImgSection = $('#getTicktImgSection'); document.addEventListener('touchstart',window.touchMain.touchStart,false); document.addEventListener('touchmove',function(event){ window.touchMain.touchMove(event,function(){//上滑 $getTicktImgSection.css({'right':'-800px'}) },function(){//下滑 $getTicktImgSection.css({'right':'1em'}) }) },false); })
完整代碼:https://github.com/helijun/component/tree/master/touchspa