目前上拉刷新,下拉加載,以及區域回彈的組件,絕大多數都是經過transform去實現的。在移動端效果很好,可是PC端使用鼠標拖拽的方式,查看下文首先不符合邏輯,其次容易點進其餘頁面。vue
起初,項目的初衷是在微信瀏覽器中查看,可是客戶反應有些頁面pc端沒辦法上下滑動(使用了vue-scroller的頁面都跪了)。鼠標滾輪默認控制的是滾動條,不是容器的transform屬性,怎麼可能上下滑動。jquery
而後就想若是能監聽到鼠標滾輪事件,而後再更改transform:translate3d(x,y,z),這樣不就能夠實現pc端vue-scroller的滾動了嗎;度娘了一下,還真有鼠標滾輪事件,叫作mousewheel,這貨但是原生JS的事件,jquery-free的同窗,能夠大膽使用。不過比較坑的是這個事件比較冷門,通常沒人用,因此官方文檔也不詳細。瀏覽器
window.onmousewheel = function (e) { if(e.wheelDelta<0){ }else{ } }
這個事件包含了一個鼠標事件所沒有的屬性,wheelDelta,這個屬性值始終是120的倍數,並且向上滑動一單位,wheelDelta值爲120的倍數,向下爲-120的倍數。微信
下文是vue-scroller在pc端的處理this
let _this = this;//此this指向的是vue window.onmousewheel = function (e) { if(e.wheelDelta<0){ _this.$refs.scrollerBottom && (_this.$refs.scrollerBottom.scrollBy(0, 30, false));//避免ref中不存在scrollerBottom }else{ _this.$refs.scrollerBottom && (_this.$refs.scrollerBottom.scrollBy(0, -30, false)); } }
vue-scroller中scrollBy和scrollTo的區別就不細講了,scrollTo就是把View移動到屏幕的X和Y位置,也就是絕對位置。而scrollBy則是相對位置。
很簡單的就實現了vue-scroller在pc端的上下滑動。(經過觸摸板滾動,其實也是調用onmousewheel)spa