移動端左右滑動阻止觸發上一頁下一頁操作
阿新 • • 發佈:2019-02-16
最近有個需求,就是非常簡單地橫向滑動。打算使用overflow-x:auto;來試驗原生滑動,但在安卓版UC下當滑到最左或者最右會
,導致頁面的跳轉(原生瀏覽器無此手勢)。之前好幾個專案之前視訊有使用js處理(query: 夏洛特煩惱), 橫向滑動沒有加慣性支援,非常卡頓。感覺此類對距離沒有要求的滑動用原生最好,而且overflow-x:auto;相容性支援到安卓2.1以上,使用起來也非常方便,所以打算在UC下做一下適配。
1 預設啟用UC上一頁、下一頁手勢
使用css佈局
先使用overflow-x:auto;給UL加上一下css,做出橫向滑動的效果:
1 2 3 |
overflow-x |
這樣,一個簡單地滾動效果就實現了。如圖
在UC瀏覽器安卓版下試驗,不出所料的滑到最右邊啟用了UC上一頁、下一頁手勢。
解決思路
經過無數次和@紹偉的試驗,給
1 |
body |
1 |
touchmove |
- 在滑到最左邊或者最右邊給Body繫結事件,組織預設行為
- 當手指擡起解綁事件
參考程式碼
具體參考程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
var preventUCDefault = (function() { var ua = window.navigator.userAgent, startX = 0, diffY = 0, bindPreventTouch = function() { $(document.body).on('touchmove.prevUC', function(e) { e.preventDefault(); }); }, isAndroid |
經過QA測試,低版本UC下滑動效果也很不錯呢!
優化
當然,想開啟gpu加速可以加上下句話:
1 |
-webkit-transform:translateZ(0); |
另外,使用原生滑動會出現滾動條,如果想達到極致體驗的話,@靳磊給了兩個思路:
- 外面套一層,給定高度+overflow:hidden;
- 加一個偽元素將滾動條遮起來
使用偽元素程式碼如下
1 2 3 4 5 6 7 8 9 10 |
ul::after { display: block; content: ""; position: absolute; z-index: 10; width: 100%; background-color: #fff; height: 10px; margin-top : -11px; } |
總結
對於一個問題一個人思考思維會很侷限,和大家一起討論完成學到了很多解決的辦法,能將任務完成最優而且增進團隊的融合性。
更新 2015年12月14日
隱藏滾動條還有更好地方法
1 2 3 |
ul::-webkit-scrollbar { display: none; } |
主要解決背景非純色而是虛化這樣的需求,uc下有效,但是safari下還是會出現滾動條,有點小遺憾。