jQuery和CSS3制作回到页面顶部和底部

当一个页面的篇幅太长时,用户的检验就有点烦,特别是当用户要到页面的底部或顶部时,只靠scrollBar来操作的确不爽,我有时也烦。当然,W3cplus也有这样的不足之处,好多朋友都有提过,于是在第二版本中我加了一个回到顶部的效果,但不知道怎么加回到底的效果。因为自己的jQuery还处在学习的初级阶段,属于半吊子中的半吊子,时常依赖别人的插件来做效果。比如说,前面介绍的《jQuery制作go to top按钮》中介绍的回到页面顶部的四个demo效果,都是到处整来的,有时只知道其表,不知道其质。真是感到惭愧呀。

今天在Codrops站上看到了cody利用Jamesspecial scroll events写了一篇有关于回到页面顶部和底部的教程——Scrolling to the Top and Bottom with jQuery。于是我也认真学习了一回,虽然不懂那个插件怎么来的,但还是明白了如何利用这个插件来做这要的效果。于是我在这个效果上整了一些CSS3的效果,制作了一个类似于本站的回到页面顶部Button的效果。整理了出来与大家分享,希望对不懂的朋友有所帮助。那我们开始吧:

要实现的效果

正如上图所示,两个Button将固定在浏览器的右下角,当scrollBar在移动动,两个buttons会改变其透明度,当你停止移动scrollbar时,又将恢复到默认状态。最主要的是你点击“回到顶部”的button时,页面将到达顶部,反之,你点击“到达页面底部”的button时,页面将到达底部。下面我们就一起来看看如何实现上面的效果。

HTML Markup

      <body>
        <div id="wrapper">content here</div>
        <div id="topBottomBar">
          <div id="goToTop" class="goToTop">回到顶部</div>
          <div id="goToBottom" class="goToBottom">回到顶部</div>
        </div>
      </body>
    

这个结构可是相当的简单了,我把页面所有的内容放置在元素“div#wrapper”容器之中,而两个buttons放在了“div#topBottomBar”容器之中。这里不花太多时间,我想没人不懂的。

CSS Code

有了结构,那接下来就需要使用CSS来制作两个button的外观,我在此处配合了图片和CSS3制作了两个相对称的效果,具体的大家请看下面代码:

      *{
        margin: 0;
        padding: 0;
      }
      /*==固定buttons在浏览器的右下角处==*/
      #topBottomBar {
        position: fixed;水月
        right: 50px;
      	bottom:5px;
        z-index: 9000;
      }
      /*==制作buttons的外型==*/
      #topBottomBar div {
        /*==button中间的箭头==*/
      	background: url("images/gototop.png") no-repeat scroll center #F3F3F3;
      	/*==多颜色边框效果==*/
        border-color: rgba(203, 78, 255, 0.2) rgba(213, 178, 255, 0.1) rgba(113, 178, 133, 0.1) rgba(220, 100, 200, 0.1);
        /*==不规则圆角效果==*/
      	-moz-border-radius: 45px 80px 0 125px / 70px 130px 12px 69px;
      	-webkit-border-radius: 45px 80px 0 125px / 70px 130px 12px 69px;
        border-radius: 45px 80px 0 125px / 70px 130px 12px 69px;
        border-style: solid;
        border-width: 1px;
        /*==多层阴影==*/
      	-moz-box-shadow: 0 0 5px rgba(125, 25, 125, 0.3) inset, 1px 1px 1px rgba(125, 25, 125,0.1), 2px 2px 1px rgba(125, 25, 125,0.3), -1px -1px 2px rgba(125, 25, 125,0.1), -2px -2px 1px rgba(125, 25, 125,0.2);
      	-webkit-box-shadow: 0 0 5px rgba(125, 25, 125, 0.3) inset, 1px 1px 1px rgba(125, 25, 125,0.1), 2px 2px 1px rgba(125, 25, 125,0.3), -1px -1px 2px rgba(125, 25, 125,0.1), -2px -2px 1px rgba(125, 25, 125,0.2);
        box-shadow: 0 0 5px rgba(125, 25, 125, 0.3) inset, 1px 1px 1px rgba(125, 25, 125,0.1), 2px 2px 1px rgba(125, 25, 125,0.3), -1px -1px 2px rgba(125, 25, 125,0.1), -2px -2px 1px rgba(125, 25, 125,0.2);
        display: block;
        height: 50px;
        overflow: hidden;
        text-indent: -9999px;
        width: 52px;
        cursor: pointer;
        float: left;
        /*==动态变化效果==*/
      	-webkit-transition: all 0.5s ease .03s;
        -moz-transition: all 0.5s ease .03s;
        -o-transition: all 0.5s ease .03s;
        transition: all 0.5s ease .03s;
      }
      /*==悬停效果==*/
      #topBottomBar div:hover {
      	-moz-transform: rotate(-10deg) scale(1.1) translateX(-3px);
      	-webkit-transform: rotate(-10deg) scale(1.1) translateX(-3px);
      	-o-transform: rotate(-10deg) scale(1.1) translateX(-3px);
      	transform: rotate(-10deg) scale(1.1) translateX(-3px);
      }
      /*==向下button效果==*/
      #topBottomBar .goToBottom {
        	-moz-transform: rotate(92deg);
        	-o-transform: rotate(92deg);
        	-webkit-transform: rotate(92deg);
        	transform: rotate(92deg);
        	margin-left: 5px; 
        	background-image: url("images/gotobottom.png");
      }
      /*==向下button的悬停效果==*/
      #topBottomBar .goToBottom:hover {
        -moz-transform: rotate(100deg) scale(1.1) translateY(-3px);
      	-webkit-transform: rotate(100deg) scale(1.1) translateX(3px);
      	-o-transform: rotate(100deg) scale(1.1) translateX(3px);
      	transform: rotate(100deg) scale(1.1) translateX(3px);
      }
      /*==容器样式==*/
      #wrapper {
       width: 960px;
       margin: 50px auto;
       padding: 10px;
       border: 1px solid #ccc;
       -moz-border-radius: 5px;
       -webkit-border-radius: 5px;
       border-radius: 5px;
      }
    

这样button效果就出来了,大家千万别小看这两个button的样式哟,可以说,他使用了一些常用的css3属性方法,我点了一下,总共使用了css3的五种属性。比如:border-color写的多颜色边框效果、boder-radius制作的不规则圆角效果、box-shadow写的阴影效果、transition做的动画效果、transform做的旋转,移位之类特效。要是您还没有接触的话,可以去看看,很有意思的。

special scroll events插件

下面是一个关键之处,这是一个special scroll events插件,因为我们后面制作效果需要这个插件,具体代码是什么意思,我也不太懂,我是从James Padolsey复制过来的。大家一起看看吧,希望有朋友能解说一下其意思:

      <script type="text/javascript">
        (function(){
          var special = jQuery.event.special,
              uid1 = 'D' + (+new Date()),
              uid2 = 'D' + (+new Date() + 1);

          special.scrollstart = {
            setup: function(){
              var timer,
                  handler = function(evt) {
                    var _self = this,
                        _args = arguments;

                    if(timer) {
                      clearTimeout(timer);
                    } else {
                      evt.type = 'scrollstart';
                      jQuery.event.handle.apply(_self,_args);
                    }

                    timer = setTimeout(function(){
                      timer = null;
                    },special.scrollstop.latency);
                  };
              jQuery(this).bind('scroll',handler).data(uid1,handler);    
            },
            teardown: function(){
              jQuery(this).unbind('scroll',jQuery(this).data(uid1));
            }
          };

          special.scrollstop = {
            latency: 300,
            setup: function(){
              var timer,
                  handler = function(evt) {
                    var _self = this,
                        _args = arguments;

                    if(timer) {
                      clearTimeout(timer);
                    }

                    timer = setTimeout(function(){
                      timer = null;
                      evt.type = 'scrollstop';
                      jQuery.event.handle.apply(_self,_args);
                    },special.scrollstop.latency);
                  };
              jQuery(this).bind('scroll',handler).data(uid2,handler);    
            },
            teardown: function() {
              jQuery(this).unbind('scroll',jQuery(this).data(uid2));
            }
          };
        })();
      </script>
    

jQuery Code

有了插件,我们实现效果就好办多了,别的不多说,大家看代码吧,因为我自己也不是很懂jQuery,就不浪费大家时间了:

      <script type="text/javascript">
         $(function(){
           //the element inside of which we want to scroll
           var contentWrap = $("#wrapper");
           var btns = $("#topBottomBar div");
           //show the buttons
           btns.fadeIn("slow");
           //whenever we scroll fade out both buttons
           $(window).bind("scrollstart",function(){
             btns.stop().animate({"opacity":"0.2"});
           });
           //...and whenever we stop scrolling fade in both buttons
           $(window).bind("scrollstop",function(){
             btns.stop().animate({"opacity":"1"});
           });
           //clicking the "goToBottom" button will make the page scroll to the contentWrap's height
           $("#goToBottom").click(function(e){
             $("html,body").animate({scrollTop:contentWrap.height()},800);
           });
           //clicking the "goToTop" button will make the page scroll to the top of the page
           $("#goToTop").click(function(e){
             $("html,body").animate({scrollTop:"0px"},800);
           });
         });
       </script>
    

当然大家记得要把jQuery的版本库加载进来,不然是没有效果的哟。

到此时,效果就出来了,大家一起来看看吧:

希望上面的效果对大家有所帮助,如果你还不太清楚,你也可以点击Scrolling to the Top and Bottom with jQueryspecial scroll events。如果你有更好的效果,可以与我们一起分享受。

返回顶部