我在半年前接觸過相關案例,最近重新看了一下,新增了詳盡的註釋,希望對初學者能有所幫助。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>加速回到頂部</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
.container{
width:900px;
overflow: hidden;
margin:0 auto;
}
#backToTop {
width:40px;
height:40px;
position:fixed;
left:50%; /* 將其左上角置於容器的水平方向上的中點 */
margin-left:450px; /* 向右移動圖片容器的寬度的一半,以實現其左側貼緊圖片的邊線的效果 */
bottom:0;
background:url(http://img.mukewang.com/583ac6bb00010e9c00400080.png) no-repeat 0 0;
display:none; /*將按鈕隱藏*/
transition:all 0.5s ease; /* 增加過渡效果 */
}
/*滑鼠懸浮時改變樣式*/
#backToTop:hover {
bottom:14px;
background-position: 0 -40px;
}
</style>
</head>
<body>
<div class="container">
<img alt="..." src="http://img.mukewang.com/583ac6d30001a4ad13253338.png" />
</div>
<!-- 此處設定href的值的是為了阻止其回到頂部的預設行為。 -->
<a href="javascript:;" id="backToTop" title="回到頂部"></a>
<script type="text/javascript">
window.onload = function () {
var backToTop = document.getElementById("backToTop");//獲取用於設定回到頂部功能的按鈕
var clientHeight = document.documentElement.clientHeight;//獲取可視區的高度
var speed; /*宣告控制滾動速度的變數*/
// 新增全域性的滾動事件
window.onscroll = function () {
//獲取滾動條到頂部的距離,即滾動條滾動了的距離
var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;
//若滾動條到頂部的距離大於可視區的高度,即滾動的距離超過一屏,則顯示按鈕,反之,則隱藏。
backToTop.style.display = (scrollTop>clientHeight)?"block":"none";
}
//實現加速滾動的函式
function scrollToTop() {
var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;
if(scrollTop>0){
//將滾動條向上移動
document.documentElement.scrollTop = document.body.scrollTop = scrollTop - speed;
speed += 4; //增加步長,以實現加速滾動的效果
setTimeout(scrollToTop,40); //每隔40ms,滾動一次
}
}
//為按鈕繫結單擊事件
backToTop.onclick = function () {
speed = 10; //設定步長的初值
scrollToTop(); //開始滾動
}
}
</script>
<!-- attentions:
1.問題:Chrome瀏覽器、Safari瀏覽器、opera瀏覽器不支援document.documentElement.scrollTop,只支援document.body.scrollTop;而IE和Firefox都只支援document.documentElement.scrollTop,而不支援document.body.scrollTop
解決方案:通過 || 操作符提供後備值。
2.步長speed的初始化不能放到其宣告的位置,而應該放到用於回到頂部的按鈕上的單擊事件裡,當再次觸發單擊事件時,將其值還原到初始狀態。
3.不要因為該語句(var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;)出現重複而將其轉移到外層以實現複用,那是錯誤的。
如果轉移到了最外層,scrollTop將無法獲取到更新後的值
-->
</body>
</html>
作者: 人生還有多少個二十年
連結:http://www.imooc.com/article/…
來源:慕課網
本文原創釋出於慕課網 ,轉載請註明出處,謝謝合作!