技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類目錄

贊助商

最新文章

搜索

JS兩種方法滾動(dòng)條上滾下滾顯示隱藏導(dǎo)航欄【親測(cè)可用】

作者:admin    時(shí)間:2022-4-25 10:9:6    瀏覽:

在前面文章介紹過【親測(cè)!3種方法】JS判斷滾動(dòng)條上滾下滾,非常詳細(xì)地分析了JS如何判斷滾動(dòng)條上滾下滾。我們可以利用這個(gè)代碼,實(shí)現(xiàn)對(duì)導(dǎo)航欄的顯示、隱藏的控制。當(dāng)滾動(dòng)條上滾時(shí),顯示導(dǎo)航欄,當(dāng)滾動(dòng)條下滾時(shí),隱藏導(dǎo)航條。這正是本文要介紹的內(nèi)容,本文將通過兩種方法,介紹如何通過JS實(shí)現(xiàn)滾動(dòng)條上滾下滾時(shí),顯示隱藏導(dǎo)航欄。

通過代碼測(cè)試的瀏覽器有:Chrome、Firefox、IE11、安卓手機(jī)UC。

JS兩種方法滾動(dòng)條上滾下滾顯示隱藏導(dǎo)航欄

demodownload

JS實(shí)現(xiàn)滾動(dòng)條上滾下滾顯示隱藏導(dǎo)航欄:方法一

JS代碼

function scroll(fn)
{
    var beforeScrollTop = $(this).scrollTop(),
        fn = fn || function() {};
    window.addEventListener("scroll", function()
    {
        var afterScrollTop = $(this).scrollTop(),
            delta = afterScrollTop - beforeScrollTop;
        if (delta === 0) return false;
        fn(delta > 0 ? "down" : "up");
        beforeScrollTop = afterScrollTop;
    }, false);
}
//第一種寫法
scroll(function(direction)
{
    console.log(direction);
    if (direction == "up")
    {
        document.getElementById("tip").style.display = "block";
    }
    else if (direction == "down")
    {
        document.getElementById("tip").style.display = "none";
    }
});
//第二種寫法執(zhí)行完事件后的回調(diào)函數(shù)
/*
   function fn(direction) {
        console.log(direction); //down or up   
    };

    window.onscroll=function(){
         scroll( fn );
    }
*/

demodownload

經(jīng)測(cè)試,上面兩種寫法均可用。

$(this).scrollTop() 是判斷滾動(dòng)條的位置,通過對(duì)比前后的位置,判斷滾動(dòng)條是上滾還是下滾。

獲得是down還是up之后,我們就可以控制顯示隱藏導(dǎo)航欄了。

這方法比較好理解,實(shí)現(xiàn)代碼也比較簡(jiǎn)單。

JS實(shí)現(xiàn)滾動(dòng)條上滾下滾顯示隱藏導(dǎo)航欄:方法二

JS兩種方法滾動(dòng)條上滾下滾顯示隱藏導(dǎo)航欄

demodownload

這個(gè)方法其實(shí)是第一種方法的加強(qiáng)版,因?yàn)閾?jù)說第一種方法在蘋果手機(jī)使用時(shí),導(dǎo)航欄有跳動(dòng)現(xiàn)象。第一種方法是時(shí)刻判斷滾動(dòng)條下滾上滾從而不斷執(zhí)行顯示/隱藏導(dǎo)航條的代碼,這就可能導(dǎo)致閃動(dòng)現(xiàn)象出現(xiàn),而第二種方法,是它在滾動(dòng)條持續(xù)下滾或上滾時(shí),只執(zhí)行一次,在下滾或上滾過程中,是不執(zhí)行顯示隱藏導(dǎo)航欄代碼的,從而就可以避免了閃動(dòng)的現(xiàn)象出現(xiàn)。具體詳細(xì)的分析請(qǐng)看【親測(cè)!3種方法】JS判斷滾動(dòng)條上滾下滾。

JS代碼如下:

function scrollDirect(fn)
{
    var beforeScrollTop = $(this).scrollTop(); //滾動(dòng)條頂部位置
    fn = fn || function() {};
    window.addEventListener("scroll", function(event)
    {
        event = event || window.event;
        var afterScrollTop = $(this).scrollTop(); //滾動(dòng)條頂部位置
        //console.log("afterScrollTop=" + $(this).scrollTop());
        delta = afterScrollTop - beforeScrollTop;
        beforeScrollTop = afterScrollTop;
        var scrollTop = $(this).scrollTop(); //滾動(dòng)條頂部位置
        //console.log("$(this).scrollTop()=" + $(this).scrollTop());
        var scrollHeight = $(document).height(); //文檔高度
        //console.log("$(document).height()=" + $(document).height());
        var windowHeight = $(this).height(); //窗口高度
        //console.log("$(this).height()=" + $(this).height());
        if (afterScrollTop < 10 || afterScrollTop > $(document.body).height() - 10)
        {
            fn('up');
        }
        else
        {
            if (Math.abs(delta) < 10)
            {
                return false;
            }
            fn(delta > 0 ? "down" : "up");
        }
    }, false);
}
var upflag = 1;
var downflag = 1;
//scroll滑動(dòng),上滑和下滑只執(zhí)行一次!
scrollDirect(function(direction)
{
    if (direction == "down")
    {
        if (downflag)
        {
            console.log("down");
            document.getElementById("tip").style.display = "none";
            downflag = 0;
            upflag = 1;
        }
    }
    if (direction == "up")
    {
        if (upflag)
        {
            console.log("up");
            document.getElementById("tip").style.display = "block";
            downflag = 1;
            upflag = 0;
        }
    }
});

demodownload

總結(jié)

本文通過兩種方法,介紹了如何通過JS實(shí)現(xiàn)在滾動(dòng)條上滾下滾時(shí),顯示隱藏導(dǎo)航欄。第一種方法較為簡(jiǎn)單,但可能在蘋果手機(jī)表現(xiàn)欠佳,第二種方法是第一種方法的改良版,在各種設(shè)備表現(xiàn)良好。本文實(shí)例代碼均經(jīng)過本人測(cè)試可用,通過代碼測(cè)試的瀏覽器有:Chrome、Firefox、IE11、安卓手機(jī)UC。

相關(guān)文章

x
  • 站長(zhǎng)推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */