在移動端頁面上,若是要實現【頂部輪播,手指觸摸左右滑動】
個人方案是,經過監聽滑動,阻止默認事件來完成瀏覽器
div.addEventListener('touchmove',function(event){ event.preventDefault();//阻止瀏覽器的默認事件 })
這樣,左右滑動能夠完成了,可是觸摸這個div的時候,頁面不能上下滑動了,怎麼辦?blog
當touchmove的時候,實時改變window的scrolltop值?事件
這樣會有原生的滑動效果嗎?ip
你們有什麼解決方案get
問題已經解決了,思路是it
var xx,yy,XX,YY,swipeX,swipeY ; div.addEventListener('touchstart',function(event){ xx = event.targetTouches[0].screenX ; yy = event.targetTouches[0].screenY ; swipeX = true; swipeY = true ; }) div.addEventListener('touchmove',function(event){ XX = event.targetTouches[0].screenX ; YY = event.targetTouches[0].screenY ; if(swipeX && Math.abs(XX-xx)-Math.abs(YY-yy)>0) //左右滑動 { event.stopPropagation();//組織冒泡 event.preventDefault();//阻止瀏覽器默認事件 swipeY = false ; //左右滑動 } else if(swipeY && Math.abs(XX-xx)-Math.abs(YY-yy)<0){ //上下滑動 swipeX = false ; //上下滑動,使用瀏覽器默認的上下滑動 } })
能夠判斷下move大概方向,而後水平的時候阻止默認行爲,其餘時候不阻止就OK了io
其實 單純判斷move是水平也是不行的,若是用戶是斜上地滑怎麼判斷?event
個人想法是,在這個輪播上實現這樣的一個覆蓋層function
當用戶從A觸發了touchstart 結束或者move到b,或者b start,在c上結束,斷定爲右滑。左滑則相反。class