原生JS實現平滑回到頂部組件_javascript技巧

來源:互聯網
上載者:User

返回頂部組件是一種極其常見的網頁功能,需求簡單:頁面滾動一定距離後,顯示返回頂部的按鈕,點擊該按鈕可以將捲軸滾回至頁面開始的位置。

實現思路也很容易,只要改變document.documentElement.scrollTop或document.body.scrollTop的值即可。

本文拋棄所有加速減速的酷炫效果,迴歸軟體的本質,提供一個最簡潔的實現,只追求實用性,不追求所謂的使用者體驗,效果如下

由于思路跟代碼都很簡單,所以就直接貼出實現細節了:

var BackTop = function (domE,distance) {if (!domE) return;var _onscroll = window.onscroll,_onclick = domE.onclick;window.onscroll = throttle(function(){typeof _onscroll === 'function' && _onscroll.apply(this, arguments);toggleDomE();},100);domE.onclick = function(){typeof _onclick === 'function' && _onclick.apply(this, arguments);document.documentElement.scrollTop = 0;document.body.scrollTop = 0;};function toggleDomE(){domE.style.display = (document.documentElement.scrollTop || document.body.scrollTop) > (distance || 500) ? 'block' : 'none';}function throttle(func, wait) {var timer = null;return function () {var self = this, args = arguments;if (timer) clearTimeout(timer);timer = setTimeout(function () {return typeof func === 'function' && func.apply(self, args);}, wait);}}}; 

調用方式:

<script>new BackTop(document.getElementById('backTop'))</script> 

之所以寫這篇部落格,弄這麼個簡單的東西,有兩個方面的原因:

1)這段時間一直在手寫一些常見的簡單組件,這算是一個簡單中更簡單的一個,為了讓這系列的部落格更加完整,所以把這個組件補充了進來;

2)我想表達自己在工作過程中的一個觀點:就是不要過渡用使用者體驗來裝飾你的軟體或者說產品,使用者體驗這個東西說白了就是兩個詞,一個是好印象,第二個就是好玩,但這並不是產品開發運營的最終目的,你把東西做的再漂亮,產品的核心價值和服務做的不夠的話,就算把返回頂部這種功能做成超級無敵的火箭也是徒勞無功的。做前端開發,得鍛煉點控制產品經理瞎提使用者體驗功能的度,以這個組件來說,我認為做加速或減速效果都是多餘的,既增加開發時間,又耽誤使用者使用的時間,拋棄自己心中那點對技術玩弄的固執,可以讓自己的工作做的更加完美。

下面給大家分享幾種常用網頁返回頂部代碼

一、使用HTML的錨標記最簡單了

但是唯一的缺點就是樣式不怎麼樣,會顯示這個錨標記。

複製代碼 代碼如下:

<aname="top"id="top"></a>

置放位置在<body>標籤之後隨便找個地方放都可以,只要靠近頂部即可。

頁面底部放置:

複製代碼 代碼如下:

<ahref="#top"target="_self">返回頂部</a>

二、使用Javascript Scroll函數返回頂部

scrooll函數用來控制捲軸的位置,有兩種很簡單的實現方式:

方式1(推薦:簡單方便):

複製代碼 代碼如下:

<ahref="javascript:scroll(0,0)">返回頂部</a>

scroll第一個參數是水平位置,第二個參數是垂直位置,比如要想定位在垂直50像素處,改成scroll(0,50)就可以了。

方式2(注重效果:緩慢向上):

本方式是漸進式返回頂部,要好看一些,代碼如下:

functionpageScroll() {window.scrollBy(0,-10);scrolldelay=setTimeout('pageScroll()',100);}<ahref="pageScroll();">返回頂部</a>

這樣就會動態返回頂部,不過雖然返回到頂部但是代碼仍在運行,還需要在pageScroll函數加一句給停止掉。

if(document.documentElement.scrollTop==0)clearTimeout(scrolldelay);

三、使用Onload加上scroll功能實現動態返回頂部

首先在網頁body標籤結束之前加上:

<divid="gotop">返回頂部</div>

2、再調用以下JS指令碼部分:

BackTop=function(btnId){varbtn=document.getElementById(btnId);vard=document.documentElement;window.onscroll=set;btn.onclick=function(){btn.style.display="none";window.onscroll=null;this.timer=setInterval(function(){d.scrollTop-=Math.ceil(d.scrollTop*0.1);if(d.scrollTop==0)clearInterval(btn.timer,window.onscroll=set);},10);};functionset(){btn.style.display=d.scrollTop?'block':"none"}};BackTop('gotop');

這些可以放到網頁中中,也可以獨立存成一個js檔案,比如gotop.js,再通過以下形式:

<scriptsrc="/js/gotop.js"type=text/javascript></script>

來調用,當然了位置最好放在“返回頂部”標籤的下面,該調用方法已假設檔案路徑為JS,放在其它位置請根據實際修改。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.