移動端ドロップダウンリフレッシュヘッド実現原理及びコード実現


ドロップダウン・リフレッシュの実装原理
ドロップダウン・リフレッシュを実現するには、主に3つのステップに分けられます.
  • 原生touchstartイベントを傍受し、その初期位置の値、e.touches[0]を記録する.pageY;
  • オリジナルtouchmoveイベントを傍受し、現在のスライドの位置値と初期位置値の差を記録し計算し、ある臨界値より大きい場合、ドロップダウン・リフレッシュ・ヘッダを表示し、ページのoverflow属性をfalseに設定する.
  • は、オリジナルtouchendイベントをリスニングし、このとき要素スライドが最大値になったらリフレッシュ操作を行い、操作終了後、ページのoverflow属性をautoに設定する.

  • コード実装
    HTMLコード
    
    
    
        
        
            
        
    
    
        

    • 000
    • 111
    • 222
    • 333
    • 444
    • 555
    • 666
    • 777
    • 888
    • 999

    JSコード実装
    
        window.onload = function () {
            let container = document.querySelector('#refreshContainer');
            let refreshText = document.querySelector('.refreshText');
            let parent = document.querySelector('.parent');
            let startY = 0; //        Y  
            let endY = 0;   //        Y  
            let flag = false; //            
            parent.addEventListener('touchstart', function (e) {
                startY = e.touches[0].pageY;
            });
            parent.addEventListener('touchmove', function (e) {
                if (isTop() && (e.touches[0].pageY - startY) > 50) {
                    flag = true;
                    document.body.style.overflow='hidden';
                    refreshText.style.height = "80px";
                    parent.style.transform = "translateY(80px)";
                    parent.style.transition = "all ease 0.5s";
                    refreshText.innerHTML = "      ...";
                }
            });
            //    
            parent.addEventListener('touchend', function (e) {
                if (isTop() && flag) {
                    refreshText.innerHTML = "    ...";
                    //      ,     ,      
                    setTimeout(function () {
                        parent.style.transform = "translateY(0)";
                        document.body.style.overflow = 'auto';
                    }, 2000);
                }
            });
            //scrollTop    
            function isTop() {
                let t = document.documentElement.scrollTop || document.body.scrollTop;
                return t === 0 ? true : false;
            }
        }
    

    注意bodyのoverflowプロパティ設定.
    貴重な時間を費やして本を読んでくれてありがとう.もしこの本があなたに少し助けたり啓発したりしたら、あなたの称賛とStarをけちけちしないでください.あなたのは私の前進の最大の原動力に違いありません.https://github.com/YvetteLau/...