jquery實現點擊上移到頂部功能(轉)


---恢復內容開始---

本文轉載自W3CPLUS, jQuery制作go to top按鈕

每每看到網友Blog的頁面底部或中間有一個按鈕回到頁面頂部,羡慕死人了,但自己就是做不出這樣的效果。后來在google和baidu搜尋了一下,仔細思考,並不像當初想象的那么復雜。經過整理貼到blog中與大家一起分享一下。

我們先來看看效果圖吧:

這個效果是“點我加到頁面頂部”按鈕在頁面底部,當然還有一種效果就是這個按鈕在頁面中間,我就不在示例了。這也是最簡單的效果,還有一種效果就是頁面一開始不顯示這個按鈕,當滾動條向下移動時,到一定的距離才顯示(也就是垂直滾動條距頂部有一定的距離時這個按鈕才顯示)。

我總結了幾種方法,現在從簡單到復雜依次看看幾種實現效果的方法:

DEMO一:

這種效果是最原始的,也是最簡單的。當頁載入時,這個按鈕就存在,並固定在頁面的底部,頁面垂直滾動條離頂部有一定的距離時,點擊“點我回到頁面頂部”按鈕時,頁面就會回到頂部。那就一起看看其實現過程吧:

HTML 代碼:

<div class="container">
    <div class="header"> 我是頭部</div>
    <div class="content">我是主內容,高度是2000px</div>
    <div class="footer">我是在最底部</div>
    <div id="goToTop"><a href="#">點我回到頁面頂部</a></div>
 </div>

為了更好測試效果,所以我們在這里多加了幾個div,其實我們觀注只是其中的一個"<div id="goToTop"><a href="#"></a></div>"這個div,因為我們需要實現的效果都是在這個div中實現的,當然還可以只在其里面的a鏈接標簽元素中實現,為了更好看測試效果,我們給上面標簽元素加上一定的樣式:

<style type="text/css">
   .container {
      width:980px;
      margin:0 auto;
      height:auto;
      min-height:100%;
      position:relative;
   }
   .content {
      height: 2000px;
      border: 1px solid red;
   }
   #goToTop {
      position: fixed;
      bottom: 20px;
      right: 10%;
   }
  #goToTop a {
     background: none repeat scroll 0 0 #336699;
     border: 1px solid #CCCCCC;
     border-radius: 3px;
     -webkit-border-radius: 3px;
     color: #FF9966;
     font-size: 14px;
     padding: 5px;
     text-decoration: none;
     text-shadow: 0 1px 0 #999;
     -webkit-text-shadow: 0 1px 0 #999;            
     }
 </style>

 

 

現在HTML和CSS都有了,只剩下給這個按鈕加上jQuery的效果了。

首先在<head></head>中加上jQuery的庫:

<script type="text/javascript" src="js/jquery.min.js"></script>

 

 

(注:后面的例子都需要這個庫,所以后面沒有特殊說明的情況下,這個庫都在head標簽中存在。)

現在我們就給其加上一定的jQuery代碼:

<script type="text/javascript">
    $(document).ready(function(){
        $('#goToTop a').click(function(){
            $('html,body').animate({scrollTop:0},'slow');
        });
    });
</script>

 

 

 

現在大家就可以去看看效果了,是不是很爽呀,不過這里說明一下,因為沒有做IE6的bug處理,所以在IE下顯示是不正常的,其他瀏覽器均測試通過,如查需要copy使用的情況下,除IE6下都可以放心正常使用。

DEMO二:

Demo二這種方法實現的更理性化,也更完美化:也就是說一開始我這個按鈕是隱藏的,只有我們的垂直滾動條距頂部有一定的距離后,這個按鈕才會淡出顯示,當回到頂滾動條回到頂部時,此按鈕就又會淡淡的隱藏。怎么樣是不是更完美了,更靚了。如果你喜歡,我們就一起看看其實現過程吧:

HTML代碼和CSS的代碼都是一樣的,為了節省大家的時間我就不在列出來了,如果需要可以參考demo一的代碼,我們主要就是看看jQuery代碼的變化:

<script type="text/javascript">
    $(document).ready(function(){
        $("#goToTop").hide()//隱藏go to top按鈕
        $(function(){
            $(window).scroll(function(){
                if($(this).scrollTop()>1){//當window的scrolltop距離大於1時,go to top按鈕淡出,反之淡入
                    $("#goToTop").fadeIn();
                } else {
                    $("#goToTop").fadeOut();
                }
            });
        });
     

        // 給go to top按鈕一個點擊事件
        $("#goToTop a").click(function(){
            $("html,body").animate({scrollTop:0},800);//點擊go to top按鈕時,以800的速度回到頂部,這里的800可以根據你的需求修改
            return false;
        });
    });
</script>

 

 

試試吧,我想你會更喜歡這種效果,同時也會更有成就感。(注:這個Demo在IE6下CSS需做一定的處理,才能正常顯示)

DEMO三:

DEMO三比前面兩個DEMO都稍微更復雜一點,不過你理解了前面兩個DEMO的話,我想你對這個Demo也不會感覺復雜,首先我們先看看各位代碼的變化吧。

HTML代碼:

<div class="container">
        <div class="header"> 我是頭部</div>
        <div class="content">我是主內容,高度是2000px</div>
        <div class="footer">我是在最底部</div>
 </div>

 

 

跟前面的代碼相比較,我們可以明顯的看出,這個DEMO少了一個div:

<div id="goToTop"><a href="#">點我回到頁面頂部</a></div>

大家一定會感覺很奇怪,沒了這個按鈕,怎么點擊回到頂部呢?想得也是沒有錯,我一開始也是這么想的,但后來看完整個DEMO后才恍然大悟,所以大家先別急,接着往下看。

CSS 代碼:

#goToTop {
     position: absolute;
     right: -130px;
     z-index: 9000;
}

 

 

其他樣式代碼都是一樣的,這里只是對goToTop的div稍作修改了一下。雖然我們在HTML中暫時不存在這樣的一個div,但我們后面還是用得上的,所以先把樣式在這里修改好加上去。完成這兩步了,又到了實現效果的關鍵一步:

jQuery代碼:

<script type="text/javascript">
    $(function(){
        var topDistance = 600;//goToTop距瀏覽器頂端的距離,這個距離可以根據你的需求修改
        var showDistance = 1;//距離瀏覽器頂端多少距離開始顯示goToTop按鈕,這個距離也可以修改,但不能超過瀏覽器默認寬度,為了兼容不同分辨率的瀏覽器,我建議在這里設置值為1;
        var goToTopButton = "<div id='goToTop'><a href='#'>點我回到頁面頂部</a></div>";//定義一個變量,方便后面加入在html元素標簽中插入這個goToTop按鈕的標簽
        var thisTop = $(window).scrollTop() + topDistance;
        $("div.container").append(goToTopButton);//在container的div里插入我們前面定義好的html標簽元素
        $("#goToTop").css("top",thisTop);//設置goToTop按鈕top的css屬性和屬性值
       

        if($(window).scrollTop() < showDistance) {
            $("#goToTop").hide();//滾動條距離頂端的距離小於showDistance是隱藏goToTop按鈕
        }
      

        $(window).scroll(function(){
            thisTop = $(this).scrollTop() + topDistance;
            $("#goToTop").css("top",thisTop);//修改goToTop按鈕的top距離
            if($(this).scrollTop() < showDistance) {//當window的垂直滾動條距頂部距離小於showDistance設置的值 時
                $("#goToTop").fadeOut("fast");//goToTop按鈕淡出
            } else {
                $("#goToTop").fadeIn("fast");//反之按鈕淡入
            }
        });
         //給go to top按鈕綁定一個click事件      
        $("#goToTop a").click(function(){
            $("html,body").animate({scrollTop:0},"slow");//慢慢回到頁面頂部
            return false;
        });
    });
</script>

 

 

這個DEMO是不是更合理的呀。這里有一點需要再次解釋一下:最開始我們在HTML並沒有加上goToTop的元素,怎么就有了呢?主要是我們通過jQuery加載了這個按鈕的html標簽,大家只要留意一下,我們加載頁面后,通過firebug就可以看到這個按鈕的標簽也同時加載進來了:

這下大家清楚了吧,不清楚的可以試試。動手了就一切都明白了。(注:這個demo經過測試在各瀏覽器下都能正常運行)

DEMO四:

現在我們要看的這個Demo是通過配合jQuery的插件來實現回到頁面頂部的效果,我們一起來看看其實現的過程。其中HTML 和CSS和我們一開始說的Demo一的是一樣的,我們現在主要看其插件如何寫,接着是如何調用寫好的插件。

jQuery代碼:

<script type="text/javascript">
   //編寫jQuery的回到頁面頂部的插件
    jQuery.fn.goToTop = function(){
        if($(window).scrollTop() < 1) {
            $("#goToTop").hide();//滾動條距離頂端的距離小於showDistance是隱藏goToTop按鈕
        }
        $(window).scroll(function(){
                if($(this).scrollTop()>1){
                    $("#goToTop").fadeIn();
                } else {
                    $("#goToTop").fadeOut();
                }
            });
         //給這個按鈕綁定一個單擊事件 
        this.bind('click',function(){
            $('html,body').animate({scrollTop:0},'slow');
            return false;
        });        
    }
    //調用這個插件
    $(document).ready(function(){
        $('#goToTop').goToTop();
    });
</script>

 

 

這樣我們就完成了怎么使用插件來制作go to top的按鈕了。(注:IE6中css存在bug,其他瀏覽器測試完全通過)。

DEMO五:

這個demo也是通過插件的方式實現的,但們跟demo4還是有一定的區別,首先我們看HTML和CSS代碼:

HTML代碼:

<div class="container">
    <div class="header"> 我是頭部</div>
      <div class="content">我是主內容,高度是2000px</div>
      <div class="footer">我是在最底部</div>
</div>

 

 

CSS代碼:

#goToTop {
     position: fixed;
     right: 10%;
     z-index: 9000;
     bottom: 10px;
}

 

 

其主要的還是看jQuery的實現過程

<script type="text/javascript">
   //編寫一個插件叫做goToTop
    jQuery.fn.goToTop = function(settings) {
        settings = jQuery.extend({
            min: 1,  //設置距離頂部的最小值為1
            fadeSpeed: 200,  //設置一個淡出淡入的速度
            ieOffset: 50  //處理IE的兼容問題
        },settings);
        return this.each(function(){
            //listen for scroll
            var el = $(this);
            el.css("display","none");//in case the user forgot
            $(window).scroll(function(){
                //stupid IE hack
                if(!jQuery.support.hrefNormalized) {  //設置這個按鈕的css屬性
                    el.css({
                        "position": "absolute",
                        "top" : $(window).scrollTop() + $(window).height() - settings.ieOffset
                    });
                }
               

                if($(window).scrollTop() >= settings.min) {
                    el.fadeIn(settings.fadeSpeed);
                } else {
                    el.fadeOut(settings.fadeSpeed);
                }
            });
        });
    };
    

    $(function(){
        var goToTopButton = "<div id='goToTop'><a href='#'>點我回到頁面頂部</a></div>";
        $("div.container").append(goToTopButton);  //插入按鈕的html標簽
        if($(window).scrollTop() < 1) {
            $("#goToTop").hide();//滾動條距離頂端的距離小於showDistance是隱藏goToTop按鈕
        }
      

        $("#goToTop").goToTop({
            min:1,
            fadeSpeed: 500
        });
      

        $("#goToTop").click(function(e){
            e.preventDefault();
            $("html,body").animate({scrollTop:0},"slow");
        });
    });
</script>

 

 

大家可以對比一下,demo四和demo五的兩種插件寫法的相同與不同之處。

DEMO六:

這個Demo是我們今天要說的最后一個效果了,這個效果跟前面的每一個demo都有一點不同,主要有以下幾個不同點:第一,我們是通過jQuery給頁面加載了一個頂點的錨點和一個回到頂部的按鈕,第二點,我們是通過點擊按鈕后回到了頁面的起始錨點,所以這里需要注意一點,這個錨點必須放在頁面的最頂端,第三點,我們點擊了按鈕后,按鈕會回到錨點位置,同時按鈕也會慢慢的隱藏起來。接着我們就來看看吧

HTML代碼:

<div class="container">
    <div class="header"> 我是頭部</div>
       <div class="content">我是主內容,高度是2000px</div>
       <div class="footer">我是在最底部</div>
</div>

 

 

當頁面加入下面的jQuery代碼后,我們的HTML代碼就會自動加載一個錨點和一個按鈕的元素標簽,看看Firebug中的截圖:

CSS代碼:

#goToTop {
   position: fixed;
   right: 10%;
   z-index: 9000;
   top: 100%;
   margin-top: -50px;
}

 

 

又來到jQuery這一關鍵一步了,大家可以仔細看看下面的代碼:

<script type="text/javascript">
    $(function(){
        var topPosition = "<div id='top'></div>"; //定義頂部錨點的標簽
        var goToTopButton = "<div id='goToTop'><a href='#'>點我回到頁面頂部</a></div>";  //定義按鈕標簽
        $("div.container").prepend(topPosition); //在container的div最前面加上錨點標簽
        $("div.container").append(goToTopButton); //在container的div最后面加上按鈕標簽
        if($(window).scrollTop() < 1) {
            $("#goToTop").hide();  //滾動條距離頂端的距離小於showDistance是隱藏goToTop按鈕
        }
        var scroll_timer;
        var displayed = false;
        var $window = $(window);
        var top = $(".container").children(0).position().top;
        $window.scroll(function(){
            window.clearTimeout(scroll_timer);
            scroll_timer = window.setTimeout(function(){
                if($window.scrollTop() <= top) {
                    displayed= false;
                    $("#goToTop").fadeOut(500);
                } else if(displayed == false) { //show if scrolling down
                    displayed = true;
                    $("#goToTop").stop(true,true).show().click(function(){
                        $("#goToTop").fadeOut(500);
                    });
                }
            },100);
        });
    });
</script>

 

 

如果跟着做了的朋友,回到瀏覽器下就能看看效果了。(注:IE6下沒有做兼容處理)。

---恢復內容結束---


免責聲明!

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



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