jquery源码分享-回到顶部

 1 // JavaScript Document
 2 (function($){
 3     var goToTopTime;
 4     $.fn.goToTop=function(options){
 5         var opts = $.extend({},$.fn.goToTop.def,options);
 6         var $window=$(window);
 7         $body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body'); // opera fix
 8         $(this).hide();
 9         var $this=$(this);
10         clearTimeout(goToTopTime);
11         goToTopTime=setTimeout(function(){
12             var controlLeft;
13             if ($window.width() > opts.pageHeightJg * 2 + opts.pageWidth) {
14                 controlLeft = ($window.width() - opts.pageWidth) / 2 + opts.pageWidth + opts.pageWidthJg;
15             }else{
16                 controlLeft = $window.width()- opts.pageWidthJg-$this.width();
17             }
18             var cssfixedsupport=$.browser.msie && parseFloat($.browser.version) < 7;//判断是否ie6
19             var controlTop=$window.height() - $this.height()-opts.pageHeightJg;
20             controlTop=cssfixedsupport ? $window.scrollTop() + controlTop : controlTop;
21             var shouldvisible=( $window.scrollTop() >= opts.startline )? true : false;
22             
23             if (shouldvisible){
24                 $this.stop().show(opts.showBtntime);
25             }else{
26                 $this.stop().hide(opts.showBtntime);
27             }
28             
29             $this.css({
30                 position: cssfixedsupport ? 'absolute' : 'fixed',
31                 top: controlTop,
32                 left: controlLeft
33             });
34         },500);
35         
36         $(this).click(function(event){
37             $body.stop().animate( { scrollTop: $(opts.targetObg).offset().top}, opts.duration);
38             $(this).blur();
39             event.preventDefault();
40             event.stopPropagation();
41         });
42     };
43     
44     $.fn.goToTop.def={
45         pageWidth:950,//页面宽度
46         pageWidthJg:10,//按钮和页面的间隔距离
47         pageHeightJg:50,//按钮和页面底部的间隔距离      
48         startline:20,//出现回到顶部按钮的滚动条scrollTop距离
49         duration:200,//回到顶部的速度时间
50         showBtntime:100,//显示\隐藏回到顶部按钮的速度时间
51         targetObg:"body"//目标位置
52     };
53 })(jQuery);
54 $(function(){
55     $('<a href="#" class="go-top"><img src="themes/cyjy/images/go-top.png" alt="" /></a>').appendTo("body");
56 });

注意第18行变量cssfixedsupport,该插件完美支持IE6下有不支持position:fixed的bug.

var cssfixedsupport=$.browser.msie && parseFloat($.browser.version) < 7;//判断是否ie6
var controlTop=$window.height() - $this.height()-opts.pageHeightJg;
controlTop=cssfixedsupport ? $window.scrollTop() + controlTop : controlTop;

如在IE6下就用absolute进行布局,这样在鼠标滚动时要通过$window.scrollTop()获取滚动条到顶部的垂直高度来修正controlTop参数。

通过触发鼠标单击事件回到顶部!

 

posted @ 2012-04-24 15:27  zendwang  阅读(752)  评论(1编辑  收藏  举报