js禁止滑到最頂端時微信瀏覽器中顯示當前網址
阿新 • • 發佈:2019-02-17
做移動端開發的小夥伴們應該遇到過一個問題:h5頁面在微信端開啟的時候,滑到最頂部再網上滑就會出現一段黑色的背景, 並且顯示當前頁面url,雖然一般情況下不會有太大的影響,但是如果要自定義顯示內容就會影響我們的需求了。找了很多方法, 都是簡單粗暴地直接e.preventDefault(),但這樣會禁止內部Scroll,導致頁面不能滾動,上拉載入失效, 太殘暴了,找了很久,終於找到了辦法,可以達到禁止微信黑底並且不影響頁面其他滑動,在此記錄下:
// 首先禁止body document.body.ontouchmove = function (e) { e.preventDefault(); }; // 然後取得觸控點的座標 var startX = 0, startY = 0; //touchstart事件 function touchSatrtFunc(evt) { try { //evt.preventDefault(); //阻止觸控時瀏覽器的縮放、滾動條滾動等 var touch = evt.touches[0]; //獲取第一個觸點 var x = Number(touch.pageX); //頁面觸點X座標 var y = Number(touch.pageY); //頁面觸點Y座標 //記錄觸點初始位置 startX = x; startY = y; } catch (e) { alert('touchSatrtFunc:' + e.message); } } document.addEventListener('touchstart', touchSatrtFunc, false); // 然後對允許滾動的條件進行判斷,這裡講滾動的元素指向body var _ss = document.body; _ss.ontouchmove = function (ev) { var _point = ev.touches[0], _top = _ss.scrollTop; // 什麼時候到底部 var _bottomFaVal = _ss.scrollHeight - _ss.offsetHeight; // 到達頂端 if (_top === 0) { // 阻止向下滑動 if (_point.clientY > startY) { ev.preventDefault(); } else { // 阻止冒泡 // 正常執行 ev.stopPropagation(); } } else if (_top === _bottomFaVal) { // 到達底部 如果想禁止頁面滾動和上拉載入,講這段註釋放開,也就是在滾動到頁面底部的製售阻止預設事件 // 阻止向上滑動 // if (_point.clientY < startY) { // ev.preventDefault(); // } else { // // 阻止冒泡 // // 正常執行 // ev.stopPropagation(); // } } else if (_top > 0 && _top < _bottomFaVal) { ev.stopPropagation(); } else { ev.preventDefault(); } };
檢視原文:http://lidada.org/wechart-stop/