jQuery中頁面返回頂部的方法總結(jié)
當(dāng)頁面過長時,通常會在頁面下方有一個返回頂部的button,總結(jié)一下,大概三種實(shí)現(xiàn)方法,下面說下各方法及優(yōu)缺點(diǎn)。
方法一 錨點(diǎn)定位
<a href="#" class="top" id="top">返回頂部</a>
這種方法設(shè)置方便,但缺點(diǎn)是會刷新頁面(我是在同事的樂視手機(jī)上發(fā)現(xiàn)的)。
方法二 window.scrollTo(x,y)
<a href="javascript:scrollTo(0,0)" class="top" id="top">返回頂部</a>
這種方法也很方便,并且不會刷新頁面,缺點(diǎn)是沒有滾動效果。
scrollTo接收的參數(shù)用來定位視口左上角在整個滾動內(nèi)容區(qū)域的坐標(biāo),比如我設(shè)置scrollTo(100,100),就是讓滾動內(nèi)容的坐標(biāo)(100,100)的點(diǎn)處在視口的左上角。
方法三 設(shè)置帶有動畫效果的滾動
原生方法
/* html部分 */
<body>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<a href="javascript:;" class="top" id="top">返回頂部</a>
</body>
<style>
/* css部分 */
div {
height: 150px;
}
div:nth-child(odd) {
background-color: #8ae238;
}
div:nth-child(even) {
background-color: #66d9ef;
}
.top {
position: fixed;
right: 50px;
bottom: 50px;
display: block;
width: 50px;
height: 50px;
font-size: 20px;
background-color: white;
display: none;
}
</style>
<script>
/* js代碼 */
var topBtn = document.getElementById('top');
// 獲取視窗高度
var winHeight = document.documentElement.clientHeight;
window.onscroll = function () {
// 獲取頁面向上滾動距離,chrome瀏覽器識別document.body.scrollTop,而火狐識別document.documentElement.scrollTop,這里做了兼容處理
var toTop = document.documentElement.scrollTop || document.body.scrollTop;
// 如果滾動超過一屏,返回頂部按鈕出現(xiàn),反之隱藏
if(toTop>=winHeight){
topBtn.style.display = 'block';
}else {
topBtn.style.display = 'none';
}
}
topBtn.onclick=function () {
var timer = setInterval(function () {
var toTop = document.documentElement.scrollTop || document.body.scrollTop;
// 判斷是否到達(dá)頂部,到達(dá)頂部停止?jié)L動,沒到達(dá)頂部繼續(xù)滾動
if(toTop == 0){
clearInterval(timer);
}else {
// 設(shè)置滾動速度
var speed = Math.ceil(toTop/5);
// 頁面向上滾動
document.documentElement.scrollTop=document.body.scrollTop=toTop-speed;
}
},50);
}
</script>
大概的思路就是:
為window綁定scroll事件,監(jiān)聽頁面滾動距離,當(dāng)超過一屏高度時,顯示返回頂部的按鈕
為按鈕綁定點(diǎn)擊事件,返回頂部的方法就是獲取頁面滾動的距離,然后計(jì)算步長,這里采用滾動距離除以5的方式,滾動速度由快到慢。這里使用定時器控制滾動的頻率,建議設(shè)置較小一點(diǎn)的值,如果時間間隔過大會有‘跳幀'的感覺。
這種方法優(yōu)點(diǎn)是有了動畫效果,只是實(shí)現(xiàn)起來比較麻煩,下面介紹一下jQuery方法。
jQuery方法
jQuery方法只是在js代碼部分不同,具體代碼如下
<script>
/* js代碼 */
$(window).on('scroll', function () {
// 判斷顯示還是隱藏按鈕
if($(this).scrollTop()>=$(this).height()){
$('#top').fadeIn('slow');
}else {
$('#top').fadeOut('slow');
}
});
$('#top').on('click',function () {
// 設(shè)置滾動動畫,這里注意使用的是$('body')不是$(window)
$('body').animate({scrollTop:'0'},500);
});
</script>
jQuery方法的優(yōu)點(diǎn)是方便,而且動畫效果比較流暢。
這里需要注意設(shè)置animate方法時使用的是jQuery封裝的body對象而不是window對象,因?yàn)槲覀兪且O(shè)置body的scrollTop屬性。
總結(jié)
三個方法各有優(yōu)劣,不過總體來講,jQuery的方法更適合大多數(shù)場景。
以上所述是小編給大家介紹的jQuery中頁面返回頂部的方法總結(jié),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
JQuery解析XML數(shù)據(jù)的幾個簡單實(shí)例
下面小編就為大家?guī)硪黄狫Query解析XML數(shù)據(jù)的幾個簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05
jquery last-child 列表最后一項(xiàng)的樣式
發(fā)開中個人是比較喜歡用Repeater控件,特別是前臺可老是遇到一個問題就是一個列表的最后一項(xiàng)總是和上面的樣式不一樣 如上面的都有下邊框,最后一個就沒有2010-01-01
jQuery數(shù)組處理代碼詳解(含實(shí)例演示)
jQuery數(shù)組處理代碼詳解,需要的朋友可以參考下2012-02-02
jquery遍歷checkbox的注意事項(xiàng)說明
本篇文章主要是對jquery遍歷checkbox的注意事項(xiàng)進(jìn)行了說明介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-02-02
jQuery EasyUI tree增加搜索功能的實(shí)現(xiàn)方法
擴(kuò)展jQuery EasyUI tree搜索樹節(jié)點(diǎn)的方法,使其支持節(jié)點(diǎn)名稱的模糊匹配,將不匹配的節(jié)點(diǎn)隱藏。下面通過本文給大家分享jQuery EasyUI tree增加搜索功能,需要的朋友可以參考下2017-04-04
jquery的flexigrid無法顯示數(shù)據(jù)提示獲取到數(shù)據(jù)
升級了IE10,發(fā)現(xiàn)flexigrid無法顯示數(shù)據(jù),提示獲取到了數(shù)據(jù),但沒任何報錯任何顯示,經(jīng)過試驗(yàn)和跟蹤,修改如下,有類似問題的朋友可以參考下哈2013-07-07

