国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

vue結合preventDefault()和頁面滾動高度計算,解決ios橡皮筋效果

JerryWangSAP / 1846人閱讀

摘要:第一種方法我嘗試了,覺得不是很好用,而且頁面的滑動變得卡頓,橡皮筋效果還是時而出現,因此考慮第二種辦法。由上面的定義可知,當頁面滑動到頂部時,為,當頁面出現橡皮筋時,小于當頁面滑動到底部時,。

    感謝的啟發,方法很有用!
    好幾個月以前,我寫了一個類似于自動回復那種的客服頁面,嵌入到公司開發的app里。上周測試突然找到我,說
頁面在滑動的時候,輸入框也會跟著上下滑動,而這個問題只在ios系統上出現,Android沒問題。測試的同學希望我
做點什么,把頁面固定住,不要隨著手指的滑動上下動。修改前的界面大概像下面的示意圖這樣:   

    經過百度,知道了這叫做橡皮筋效果,是ios系統在引入網頁時專有的一種效果.要去掉這種效果,可以采用fixed
布局,也可以監聽touchmove事件,利用event.preventDefault()解決。第一種方法我嘗試了,覺得不是很好用,而
且頁面的滑動變得卡頓,橡皮筋效果還是時而出現,因此考慮第二種辦法。
    event.preventDefault()說白了就是監聽touchmove,在手指滑動屏幕的時候,禁止掉頁面隨手指滑動而滾動的
默認事件。看到這里問題就來了,我的頁面是一個聊天頁面,聊天記錄還是可以通過上下滑動手指來查看的,如果禁止
了滾動頁面,豈不是動不了了?
    所以,需要給preventDefault()增加一個限制條件,即只有頁面滑動到頂部或者底部了,才調用preventDefault(),
阻止對應的滑動事件。那么,如何判斷頁面是否已經滑動到兩端呢?利用clientHeight、scrollHeight和scrollTop
三個屬性。
    我們對這三個屬性做一下區分(對頁面中同一個元素而言):
        clientHeight是元素展示在頁面中的固定高度;
        scrollHeight是當元素中內容很多,出現滾動條時,元素中內容的實際高度,scrollHeight>=clientHeight,
    當不需要滾動頁面時,二者相等;
        scrollTop是當頁面滾動時,頁面中內容向上卷起來的距離,即內容的頂部距離固定的元素頂部的距離。

    由上面的定義可知,當頁面滑動到頂部時,scrollTop為0,當頁面出現橡皮筋時,scrollTop小于0.當頁面滑動
到底部時,scrollTop + clientHeight = scrollHeight。因此,我們可以寫下這樣的代碼:
mounted(){
//判斷是不是ios
      let u = navigator.userAgent;
      let isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端

      //如果是ios,執行下面的代碼
      if(isiOS){
      //因為要禁止整個頁面的滑動,所以定義一個box,里面裝有chatBody和foot兩個子元素
        const box = document.getElementById("longbox");  
        const chatBody = document.getElementById("chatContainer");
        //開始滑動,此處使用box元素的事件監聽,來禁止整個頁面的滑動
        box.addEventListener("touchmove", function(e){
            //如果滑到頂端或底端,禁止滑動
          if(chatBody.scrollTop<=0 || chatBody.scrollTop + chatBody.clientHeight>=chatBody.scrollHeight){
            e.preventDefault();
          }
        })
      }
  }
    測試一下,發現一個問題,的確當滑動到頂部時,無法繼續上滑了,但同時也無法下滑了。為什么?因為e.preventDefault()組織的是所有方向上的滑動事件,所以當頁面滑到頂端或者底端時,禁止了一切的滑動,頁面就動不了了。因此,考慮改進代碼,增加一個上滑或者下滑的判斷:
mounted(){
//判斷是不是ios
      let u = navigator.userAgent;
      let isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端

      //如果是ios,執行下面的代碼
      if(isiOS){
      //因為要禁止整個頁面的滑動,所以定義一個box,里面裝有chatBody和foot兩個子元素
        const box = document.getElementById("longbox");
        const chatBody = document.getElementById("chatContainer");
        var startY,endY; //定義滑動的起點和終點
        //監聽touchstart事件,記錄滑動起點的位置
        box.addEventListener("touchstart", function(e){
          startY = e.touches[0].pageY;
        })
        //開始滑動,此處使用box元素的事件監聽,來禁止整個頁面的滑動
        box.addEventListener("touchmove", function(e){
          endY = e.touches[0].pageY;  //記錄此時的滑動y軸坐標
         
          //頁面向上滑動
          //頁面滾動上去的長度scrollTop
          if(endY>startY&& chatBody.scrollTop<=0){
            e.preventDefault();
          }

          //頁面向下滑動
          //頁面的總長度(包括滾動上去的部分)scrollHeight
          if(endY=chatBody.scrollHeight){
            e.preventDefault();
          }
        })
      }
  }
   再測試,解決橡皮筋效果~
   啰嗦一下,上面的代碼是最終解決版的代碼,但其實中間還是遇到了一個小坑的,就是在多層div嵌套時,父容器的
   高度可能不定,由子容器撐開。比如我這個聊天頁面,父容器box只標注了height:100%; container包括兩個子容
   器:子容器chat是需要滑動的div,不定高,還有一個高度為47px的foot子容器。這時候,需要禁止整個頁面(其
   實就是父容器)的滑動,子容器chat可以滑動,所以,要監聽box的事件,禁止的也是box的滑動,而是否滑動到頁
   面頂端/底端的判斷依據,則需要對chat的scrollHeight和scrollTop進行判斷。
   第一次寫文章,說的不對的地方,還請多多指正!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100170.html

相關文章

  • Vue開發——實現吸頂效果

    摘要:因為項目需求,最近開始轉到微信公眾號開發,接觸到了框架,這個效果的實現雖說是基于框架下實現的,但是同樣也可以借鑒到其他地方,原理都是一樣的。上面我們得到了一個的屬性值,接下來我們只需要根據它的值來設置吸頂元素的屬性就可以了。 因為項目需求,最近開始轉到微信公眾號開發,接觸到了Vue框架,這個效果的實現雖說是基于Vue框架下實現的,但是同樣也可以借鑒到其他地方,原理都是一樣的。 進入正題...

    amuqiao 評論0 收藏0
  • 阻止微信瀏覽器下拉滑動效果ios11.3 皮筋效果

    摘要:一前言瀏覽器在移動端有一個默認觸摸滾動的效果,讓我們感觸最深的莫過于微信瀏覽器里面,下拉時自帶橡皮筋的效果。二解釋微信在端和端使用的不是同樣的瀏覽器內核版微信瀏覽器瀏覽器內核相當于使用的版微信瀏覽器相當于使用的所以下面分別使用和來分析。 在升級到 ios11.3 系統后,發現之前阻止頁面滾動的代碼e.preventDefault代碼失效了。于是自己折騰了一番,找到了解決辦法,分享給大家...

    cangck_X 評論0 收藏0
  • 【前端詞典】滾動穿透問題的解決方案

    摘要:接下就說下我對滾動穿透問題解決方案探索的過程,希望對大家有點啟發。心想來了突然意識到寫彈窗的時候忘記處理滾動穿透的問題了。下期預告前端詞典繼承必懂知識點傳送門前端詞典代理的概念及其應用前端詞典滾動穿透問題的解決方案 背景 產品有三寶,彈窗,浮層加引導; 設計有三寶,透明,陰影加圓角; 運營有三寶,短信,推送加紅包; 程序員有一寶,這個做不了。 隨著移動端市場的份額越大,需求就越多...

    _Dreams 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<