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

資訊專欄INFORMATION COLUMN

H5下拉刷新和上拉加載實(shí)現(xiàn)原理淺析

X1nFLY / 524人閱讀

摘要:原文鏈接前言在移動端網(wǎng)頁中,下拉刷新和上拉加載更多數(shù)據(jù)的交互方式出現(xiàn)頻率很高,開源社區(qū)也有很多類似的解決方案,如,庫等。

原文鏈接:justrockit.top

前言

在移動端H5網(wǎng)頁中,下拉刷新和上拉加載更多數(shù)據(jù)的交互方式出現(xiàn)頻率很高,開源社區(qū)也有很多類似的解決方案,如iscroll,pulltorefresh.js庫等。下面是對這兩種常見交互基本實(shí)現(xiàn)原理的闡述。

實(shí)現(xiàn)原理 下拉刷新

實(shí)現(xiàn)下拉刷新主要分為三步:

監(jiān)聽原生touchstart事件,記錄其初始位置的值,e.touches[0].pageY

監(jiān)聽原生touchmove事件,記錄并計算當(dāng)前滑動的位置值與初始位置值的差值,大于0表示向下拉動,并借助CSS3的translateY屬性使元素跟隨手勢向下滑動對應(yīng)的差值,同時也應(yīng)設(shè)置一個允許滑動的最大值;

監(jiān)聽原生touchend事件,若此時元素滑動達(dá)到最大值,則觸發(fā)callback,同時將translateY重設(shè)為0,元素回到初始位置。

示例。查看鏈接:下拉刷新demo(PC瀏覽器需調(diào)成手機(jī)模擬器模式查看)

html

  • 111
  • 222
  • 333
  • 444
  • 555
  • ...

javascript

(function(window) {
    var _element = document.getElementById("refreshContainer"),
      _refreshText = document.querySelector(".refreshText"),
      _startPos = 0,
      _transitionHeight = 0;

    _element.addEventListener("touchstart", function(e) {
        console.log("初始位置:", e.touches[0].pageY);
        _startPos = e.touches[0].pageY;
        _element.style.position = "relative";
        _element.style.transition = "transform 0s";
    }, false);
    
    _element.addEventListener("touchmove", function(e) {
        console.log("當(dāng)前位置:", e.touches[0].pageY);
        _transitionHeight = e.touches[0].pageY - _startPos;
        
        if (_transitionHeight > 0 && _transitionHeight < 60) {
            _refreshText.innerText = "下拉刷新";
            _element.style.transform = "translateY("+_transitionHeight+"px)";

            if (_transitionHeight > 55) {
              _refreshText.innerText = "釋放更新";
            }
        }                
    }, false);

    _element.addEventListener("touchend", function(e) {
        _element.style.transition = "transform 0.5s ease 1s";
        _element.style.transform = "translateY(0px)";
        _refreshText.innerText = "更新中...";

        // todo...

    }, false);
})(window);

在下拉到松手的過程中,經(jīng)歷了三個狀態(tài):

當(dāng)前手勢滑動位置與初始位置差值大于零時,提示正在進(jìn)行下拉刷新操作;

下拉到一定值時,顯示松手釋放后的操作提示;

下拉到達(dá)設(shè)定最大值松手時,執(zhí)行回調(diào),提示正在進(jìn)行更新操作。

上拉加載

上拉加載更多數(shù)據(jù)是在頁面滾動時觸發(fā)的動作,一般是頁面滾動到底部時觸發(fā),也可以選擇在滾動到一定位置的時候觸發(fā)。

以滾動到頁面底部為例。實(shí)現(xiàn)原理是分別獲得當(dāng)前滾動條的scrollTop值、當(dāng)前可視范圍的高度值clientHeight以及文檔的總高度scrollHeight。當(dāng)scrollTopclientHeight的值之和大于等于scrollHeight時,觸發(fā)callback

示例。查看鏈接:上拉加載demo

html

  • 111
  • 222
  • 333
  • 444
  • 555
  • ...

(function(window) {
    // 獲取當(dāng)前滾動條的位置 
    function getScrollTop() { 
        var scrollTop = 0; 
        if (document.documentElement && document.documentElement.scrollTop) { 
            scrollTop = document.documentElement.scrollTop; 
        } else if (document.body) { 
            scrollTop = document.body.scrollTop; 
        } 
        return scrollTop; 
    } 
    
    // 獲取當(dāng)前可視范圍的高度 
    function getClientHeight() { 
        var clientHeight = 0; 
        if (document.body.clientHeight && document.documentElement.clientHeight) { 
            clientHeight = Math.min(document.body.clientHeight, document.documentElement.clientHeight); 
        } 
        else { 
            clientHeight = Math.max(document.body.clientHeight, document.documentElement.clientHeight); 
        } 
        return clientHeight; 
    } 
    
    // 獲取文檔完整的高度 
    function getScrollHeight() { 
        return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 
    }
    
    var _text = document.querySelector(".refreshText"),
      _container = document.getElementById("refreshContainer");
    
    // 節(jié)流函數(shù)
    var throttle = function(method, context){
      clearTimeout(method.tId);
      method.tId = setTimeout(function(){
        method.call(context);
      }, 300);
    }
    
    function fetchData() {
        setTimeout(function() {
            _container.insertAdjacentHTML("beforeend", "
  • new add...
  • "); }, 1000); } window.onscroll = function() { if (getScrollTop() + getClientHeight() == getScrollHeight()) { _text.innerText = "加載中..."; throttle(fetchData); } }; })(window);

    頁面綁定onscroll事件時加入了節(jié)流函數(shù),其作用就是忽略滾動條300毫秒內(nèi)的連續(xù)多次觸發(fā)。

    小結(jié)

    上拉刷新的實(shí)現(xiàn)主要依靠的是touch事件的三個階段,以及借助CSS3動畫效果;下拉加載主要依靠頁面的onscroll事件,需要注意的是頁面滾動時可能要考慮函數(shù)節(jié)流。

    文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94308.html

    相關(guān)文章

    • H5下拉刷新和上拉加實(shí)現(xiàn)原理淺析

      摘要:原文鏈接前言在移動端網(wǎng)頁中,下拉刷新和上拉加載更多數(shù)據(jù)的交互方式出現(xiàn)頻率很高,開源社區(qū)也有很多類似的解決方案,如,庫等。 原文鏈接:justrockit.top 前言 在移動端H5網(wǎng)頁中,下拉刷新和上拉加載更多數(shù)據(jù)的交互方式出現(xiàn)頻率很高,開源社區(qū)也有很多類似的解決方案,如iscroll,pulltorefresh.js庫等。下面是對這兩種常見交互基本實(shí)現(xiàn)原理的闡述。 實(shí)現(xiàn)原理 下拉刷新...

      Bmob 評論0 收藏0
    • 總結(jié)開發(fā)過程踩到的坑(五)(小程序篇)

      摘要:最近開始接觸了小程序的開發(fā),由于時間問題,文檔閱讀的并不完備,也踩了很多坑。的使用微信小程序不支持原生頁面跳轉(zhuǎn),包括和,若要跳轉(zhuǎn)小程序應(yīng)用內(nèi)頁面,需要使用,詳見。參考文獻(xiàn)微信小程序開發(fā)者文檔 最近開始接觸了小程序的開發(fā),由于時間問題,文檔閱讀的并不完備,也踩了很多坑。不得不說,微信的野心真是越來越大了,但是它超高的流量注定了它有這個資本。 原文地址:mini programs 目...

      young.li 評論0 收藏0
    • 總結(jié)開發(fā)過程踩到的坑(五)(小程序篇)

      摘要:最近開始接觸了小程序的開發(fā),由于時間問題,文檔閱讀的并不完備,也踩了很多坑。的使用微信小程序不支持原生頁面跳轉(zhuǎn),包括和,若要跳轉(zhuǎn)小程序應(yīng)用內(nèi)頁面,需要使用,詳見。參考文獻(xiàn)微信小程序開發(fā)者文檔 最近開始接觸了小程序的開發(fā),由于時間問題,文檔閱讀的并不完備,也踩了很多坑。不得不說,微信的野心真是越來越大了,但是它超高的流量注定了它有這個資本。 原文地址:mini programs 目...

      Cympros 評論0 收藏0

    發(fā)表評論

    0條評論

    X1nFLY

    |高級講師

    TA的文章

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