1. 引言:许多网站都有 【返回顶部】 这个功能,如 360、新浪微博 等等。在网站 内容较多的时候代替 滚动条,给用户更好的体验。

2. 【返回顶部】的滚动

  【返回顶部】 的位置应该是固定的,例如在右下角。实现方法:

  1. 使用 相对定位,根据浏览器滚动条的 位置 设置 【返回顶部】的位置。

 这个做法很简单, 通过动态改变位置即可。但由于使用了相对定位,每次都是移动位置实现的,所以如果操作快一点,就会出现闪烁。所以 推荐使用 方法 2。

  2. 使用绝对定位,通过判断距离来显示和隐藏【返回顶部】,这样就可以 避免闪烁。但会有一些 浏览器兼容的问题,下面就来分析问题和提供解决方法。

3. 使用 html + css 设置【返回顶部】在右下角


<!--测试-->
<div id="toTop">
<em>返回顶部</em>
</div>
#toTop { 
	width:14px;
	height:65px;
	position:fixed;	
	right:30px;
	bottom:50px;
	background:gray; 	 
	padding:5px;
	color:#fff; 
	font:12px Arial;
	cursor:pointer; 
	display:none;
}


通过这样设置,在 Chrome  FireFox  就可以实现了。IE8 里要引入:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

这样在 Chrome FireFox IE8+ 就都实现了。 但 IE8- 不支持 position:fixed 这个绝对定位,如果我们用IE6查看(使用IETester),就会发现 这个 div 还是在 左上角。(万恶的 IE6...不说了)

要解决这个问题,网上的方法,都有些太复杂有些无法实现,这里是一个比较好的做法。加入如下选择器:


/*以下 设置是为了兼容 IE8- */
* html #toTop{
	position:absolute; 
	right:30px;
}

* html body{
	height:100%;
	overflow-y:auto;
}

* html{
	overflow-x:auto; 
	overflow-y:hidden;
}


也就是显示的滚动条是 body 的。

这样就将 div 设置到右下角了。但这样还会出现一个新的问题。

4. scroll 事件

   通过上面的 做法,我们只要捕捉 window 的 scroll 事件,然后 根据判断距离 控制 display 为 none 或者 bloc即可。在 Chrome FireFox IE8+ 也都测试正常。但...... IE6 测试 又出现问题,滚动不会 动态 显示 和隐藏 div。

IE6里认为 滚动的是 body 的 scroll 事件,而不是 window 的。 所以如果 捕捉 body 的 scroll 事件是    可以实现的。这就要求要兼容 这两种情况...

  兼容的写法是:分开 判断 IE8- 还是其它浏览器。

   网上 有许多 判断 IE 浏览器版本的写法。根据实际情况,这里找了更简单的方法。看到 上面最后三个 css 是给 IE8-使用的,所以在 IE8- 里,overflow-y 为 hidden,而其它浏览器为 visible。

 * 貌似 IE7 没有 overflow-y 属性。因为 我的 IETester IE7 浏览器运行不了,所以没有测试。有需要可以测试一下,或者 写 js 判断浏览器的版本。   

如下:


$(function(){	    
    //兼容写法:根据 body 的 overflow-y 属性判断
    var top = $("body").css("overflow-y"); 		
    if(top == 'visible')
	 $(window).scroll(function(){
		 var ins = $(document).scrollTop();
		 goTop(ins);
	 });
	else
	 $("body").scroll(function(){
		 var ins = $("body").scrollTop();	
		 goTop(ins);
	 });	  

    function goTop(ins){			        
		if(ins > 30)		  
			$("#toTop").css("display","block");
		else
			$("#toTop").css("display","none");
	}
})


这样,一个右下角的 【返回顶部】就可以在各个浏览器显示了。

5. 点击 【返回顶部】   

    有两种实现的方法。

   1 是如这里使用的,使用 jQuery实现,代码很简单。如下:  


//点击【返回顶部】
	 $("#toTop").click(function(){
		 $("#toTop").css("display","none");
		 $(document).scrollTop(0);
	 })


360首页就是   这么干的)