1. 程式人生 > >微信較完美實現禁止下拉彈性效果

微信較完美實現禁止下拉彈性效果

warning:較完美,意思就是不完美。如果朋友們有完美的解決方案,麻煩給我留言。謝謝哈。

=============我是華麗麗的分隔線===============

今天被提了一個需求:頁面在微信瀏覽器中禁止下拉露底。如:不能出現下圖這種情況。


理由未明,反正需求就是這個。
為了解決這個問題,當然就得問度娘啦。 網上提供的解決方法基本是:

這種是最坑爹的答案,雖然是把下拉彈性效果禁止了,可是也把頁面裡的滾動條禁止了,導致網頁不能滾屏。 經過了解。微信下拉彈性效果其實是瀏覽器本身的一種特性,為什麼瀏覽器的設計者要設計這種特性暫不可知,知道的朋友們麻煩告訴我一聲哈。 而下拉回彈是touchmove事件的一種預設屬性,根據這個,只要禁止瀏覽器最底層box(也就是body)的touchmove事件,就不會回彈了,於是乎就有了上面那種只圖一時之快不負責的程式碼。 既然touchmove事件不能禁用,但有時又不能生效,於是筆者想到一種方法 ,如果頁面滾動條在最頂部的時候,禁止下拉,反之允許下拉,這個問題不就順利解決啦?於是乎有了下面程式碼: /**
* 禁止瀏覽器下拉回彈 */ function stopDrop() { var lastY;//最後一次y座標點 $(document.body).on('touchstart'function(event) { lastY = event.originalEvent.changedTouches[0].clientY;//點選螢幕時記錄最後一次Y度座標。 }); $(document.body).on('touchmove'function(event) { var y = event.originalEvent.changedTouches[0].clientY; var
 st = $(this).scrollTop(); //滾動條高度   if (y >= lastY && st <= 10) {//如果滾動條高度小於0,可以理解為到頂了,且是下拉情況下,阻止touchmove事件。 lastY = y; event.preventDefault(); } lastY = y; }); } 只需要在網頁載入完後立即執行此函式,就可以較完美地實現阻止網頁回彈。當然,只是較完美,還不是完美。因為我發現,當網頁進入出現下拉回彈效果時,手指不放開再往下拉,坑爹地這時候竟然不是touchmove事件了,而是沒有事件! 好吧,瀏覽器設計者深埋雷,我們就邊踩邊挖吧,各前端狗們,大家共勉!