js判斷滾動條滾動方向


//第一種寫法
        var a;
           
        function scroll( fn ) {
            var beforeScrollTop = document.body.scrollTop,
                fn = fn || function() {};
            window.addEventListener("scroll", function() {
                var afterScrollTop = document.body.scrollTop,
                    delta = afterScrollTop - beforeScrollTop;
                if( delta === 0 ) return false;
                fn( delta > 0 ? "down" : "up" );
                beforeScrollTop = afterScrollTop;
            }, false);
        }
        scroll(function(direction) { 
            // console.log(direction);
            a =  direction;
        }); 
        // 第二種寫法
        var a;
           
        function scroll( fn ) {
            var beforeScrollTop = document.body.scrollTop,
                fn = fn || function() {};
            window.addEventListener("scroll", function() {
                var afterScrollTop = document.body.scrollTop,
                    delta = afterScrollTop - beforeScrollTop;
                if( delta === 0 ) return false;
                a = fn( delta > 0 ? "down" : "up" );
                beforeScrollTop = afterScrollTop;
            }, false);
        }
        scroll(function(direction) { 
            // console.log(direction);
            return direction;
        }); 
        // 第三種寫法------這樣寫不知道fn這個函數的用意,那樣寫很明白就清楚fn的意思了,是執行完事件后的回調函數

        var a;
        var beforeScrollTop = document.body.scrollTop,
            fn = fn || function() {};
        window.addEventListener("scroll", function() {
            var afterScrollTop = document.body.scrollTop,
                delta = afterScrollTop - beforeScrollTop;
            if( delta === 0 ) return false;
            fn( delta > 0 ? "down" : "up" );
            beforeScrollTop = afterScrollTop;
        }, false);
        function fn(direction) { 
            // console.log(direction);
            a = direction;
        };

        window.onscroll=function(){
            console.log(a);
        }

  今天在做類似於京東、天貓樓層切換效果的時候,利用循環實現,需要執行一個iscroll的方法,可是這個方法卻只能在滿足條件的時候執行一次,而不是每次滾動都能夠實現,所以就想到要判斷滾動條滾動方向,所以就搜了這么一段代碼,因為涉及到js閉包的知識,本人就掛了,對閉包真的是不懂,多虧問了文傑同學,理解了這么一段代碼,寫下來,記錄一下。

(雖然最終這個效果並不需要判斷滾動條滾動方向,是自己的邏輯發生了錯誤)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM