對於版面較長的網頁,在底部會放上返回頂部的錨點連接,作法也很簡單,直接用HTML就能實現,不過這種效果不交呆板,緣由就是向上移動很忽然,常常會讓用戶產生莫名的感受,本文結合JS將實現一種滑動返回頂部的網頁效果,這樣用戶感受會比較舒服。javascript
‘TOP’置頂連接,說的通俗一點就是‘返回頂部的連接’,‘go to top ’通常都放在頁面的底部,它能夠快速返回頁面頂部,以節省用戶瀏覽頁面的時間。 它主要的應用場景是當你有一個很長的網頁內容時,您一般要 把 ‘TOP’錨點連接 添加在頁面底部,只要用戶一點擊‘TOP’連接 ,就能夠立刻回到 頁面的頂部了。css
咱們遇到的問題是:不是滾動到頁面底部的時候纔看到了‘TOP’,若是頁面內容超過兩屏以上時,用戶有些心煩,我不想看了,我想回到頂部看一些其餘的內容。html
若是咱們只看了第一屏的文章,不想看了,但是‘TOP’在第二屏纔會出現。java
這時候有三種狀況發生:瀏覽器
發揮鼠標特長就是拖動瀏覽器的滾動條或是滾動鼠標滑輪,回到頁面頂部。dom
繼續硬着頭皮往下看,看有沒有‘TOP’,幸運的話,立刻找到了,能夠回到頂部了。(通常人心中是沒有‘TOP’概念的,只有選擇1 和3 的方法了)ide
直接關閉網頁,或者從新打開網站,或者離開網站。函數
我想咱們已經找到了問題的所在了。網站
咱們有三種方案能夠給用戶帶來良好的用戶體驗:this
方案一:在合適的地方,手動加入一個或多個‘TOP’連接。
這是最原始的作法了,若是滾動太快,驗,那就是咱們給用戶用腳本實現一下緩衝效果,而不是直接飆到頂部。
The HTML : <a id="gototop" href="javascript:void(0);" onclick="goTop();return false;">Top of Page</a> The JavaScript : /** * 做者:我是UED ,http://www.iamued.com/qianduan/816.html * 回到頁面頂部 * @param acceleration 加速度 * @param time 時間間隔 (毫秒) **/ function goTop(acceleration, time) { acceleration = acceleration || 0.1; time = time || 16; var x1 = 0; var y1 = 0; var x2 = 0; var y2 = 0; var x3 = 0; var y3 = 0; if (document.documentElement) { x1 = document.documentElement.scrollLeft || 0; y1 = document.documentElement.scrollTop || 0; } if (document.body) { x2 = document.body.scrollLeft || 0; y2 = document.body.scrollTop || 0; } var x3 = window.scrollX || 0; var y3 = window.scrollY || 0; // 滾動條到頁面頂部的水平距離 var x = Math.max(x1, Math.max(x2, x3)); // 滾動條到頁面頂部的垂直距離 var y = Math.max(y1, Math.max(y2, y3)); // 滾動距離 = 目前距離 / 速度, 由於距離原來越小, 速度是大於 1 的數, 因此滾動距離會愈來愈小 var speed = 1 + acceleration; window.scrollTo(Math.floor(x / speed), Math.floor(y / speed)); // 若是距離不爲零, 繼續調用迭代本函數 if(x > 0 || y > 0) { var invokeFunction = "goTop(" + acceleration + ", " + time + ")"; window.setTimeout(invokeFunction, time); } }
方案二:‘TOP’默認是隱藏的,只要滾動條,滾動到必定高度時就顯示,不然就隱藏。
這樣我可能想從中間某處回到頁面的頂部成爲可能。
The HTML : <a href="#top" id="gototop" >Top of Page</a> The CSS : #gototop { display:none; position:fixed; right:5px; bottom:5px; color:green; font-weight:bold; text-decoration:none; border:1px solid green; background:Lightgreen; padding:10px; } #gototop { text-decoration:underline; } The MooTools JavaScript : 注意: 咱們須要MooTools Core 庫的同時,也須要MooTools More 庫中的 Fx.Scroll.js 和 Fx.SmoothScroll.js 兩大文件。 window.addEvent('domready',function() { new SmoothScroll({duration:700}); /* go to top */ var go = $('gototop'); go.set('opacity','0').setStyle('display','block'); window.addEvent('scroll',function(e) { if(Browser.Engine.trident4) { go.setStyles({ 'position': 'absolute', 'bottom': window.getPosition().y + 10, 'width': 100 }); } go.fade((window.getScroll().y > 300) ? 'in' : 'out') }); }); //還有一個例子是動態生成‘TOP’。 //The MooTools JavaScript : /** * back-to-top: unobtrusive global 'back to top' link using mootools 1.2.x * This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License. * http://creativecommons.org/licenses/by-sa/3.0/ */ // hide the effect from IE6, better not having it at all than being choppy. if (!Browser.Engine.trident4) { // element added onload for IE to avoid the "operation aborted" bug. not yet verified for IE8 as it's still on beta as of this modification. window.addEvent((Browser.Engine.trident ? 'load' : 'domready'), function(){ var target_opacity = 0.64; new Element('span', { 'id': 'back-to-top', 'styles': { opacity: target_opacity, display: 'none', position: 'fixed', bottom: 0, right: 0, cursor: 'pointer' }, 'text': 'back to top', 'tween': { duration: 200, onComplete: function(el) { if (el.get('opacity') == 0) el.setStyle('display', 'none')} }, 'events': {'click': function() { /*location是javascript裏邊管理地址欄的內置對象,好比location.href就管理頁面的url,用 location.href=url就能夠直接將頁面重定向url。而location.hash則能夠用來獲取或設置頁面的標籤值。好比 http://ued.alimama.com#admin的location.hash=」#admin」,利用這個屬性值能夠實現不少效果。*/ if (window.location.hash) { window.location.hash = '#top'; } else { window.scrollTo(0, 0);/*把窗口內容滾動到指定的座標。*/ } }} }).inject(document.body); window.addEvent('scroll', function() { var visible = window.getScroll().y > (window.getSize().y * 0.8); if (visible == arguments.callee.prototype.last_state) return; // fade if supported if (Fx && Fx.Tween) { if (visible) $('back-to-top').fade('hide').setStyle('display', 'inline').fade(target_opacity); else $('back-to-top').fade('out'); } else { $('back-to-top').setStyle('display', (visible ? 'inline' : 'none')); } arguments.callee.prototype.last_state = visible }); }); } //The jQuery JavaScript : //須要jQuery’s ScrollTo plugin 插件添加一些平滑的錨。 //plugin jQuery.fn.topLink = function(settings) { settings = jQuery.extend({ min: 1, fadeSpeed: 200 }, settings); return this.each(function() { //listen for scroll var el = $(this); el.hide(); //in case the user forgot $(window).scroll(function() { if($(window).scrollTop() >= settings.min) { el.fadeIn(settings.fadeSpeed); } else { el.fadeOut(settings.fadeSpeed); } }); }); }; //usage w/ smoothscroll $(document).ready(function() { //set the link $('#gototop').topLink({ min: 400, fadeSpeed: 500 }); //smoothscroll $('#gototop').click(function(e) { e.preventDefault(); $.scrollTo(0,300); }); }); 注意: Please note that this version doesn’t work with Internet Explorer due to IE’s lack of CSS 「position:fixed」 support. Here is a shotty attempt at IE support: //plugin jQuery.fn.topLink = function(settings) { settings = jQuery.extend({ min: 1, fadeSpeed: 200, ieOffset: 50 }, settings); return this.each(function() { //listen for scroll var el = $(this); el.css('display','none'); //in case the user forgot $(window).scroll(function() { //stupid IE hack if(!jQuery.support.hrefNormalized) { el.css({ 'position': 'absolute', 'top': $(window).scrollTop() + $(window).height() - settings.ieOffset }); } if($(window).scrollTop() >= settings.min) { el.fadeIn(settings.fadeSpeed); } else { el.fadeOut(settings.fadeSpeed); } }); }); }; $(document).ready(function() { $('#gototop').topLink({ min: 400, fadeSpeed: 500 }); //smoothscroll $('#gototop').click(function(e) { e.preventDefault(); $.scrollTo(0,300); }); });