回到頂部的方法

我們經(jīng)常在b端網(wǎng)站里面,使用返回頂部的效果,很早之前,借助 jq 也可以實(shí)現(xiàn);a 標(biāo)簽也可以實(shí)現(xiàn)。伴隨的 c 端的到來(lái),滿足不了需求,我們就需要用 js 來(lái)實(shí)現(xiàn)了

以下我記錄了3種方案,供大家參考
  1. a 標(biāo)簽
  2. scrollTo()
  3. scrollIntoView()

但是,scrollTo() 和 scrollIntoView() 方法有兼容性問(wèn)題,在 safari 里,不支持 scroll-behavior:smooth,所以沒(méi)有滾動(dòng)效果

具體實(shí)現(xiàn),如圖:


image.png

大家還記得jq 是如何實(shí)現(xiàn)的么?

// 是不是超級(jí)簡(jiǎn)單呢
$("#top").click(function(){
    $("html,body").animate( {"scrollTop":0},300 );
});

a 標(biāo)簽

  • 將 a 標(biāo)簽放到指定元素的附近
  • 然后通過(guò)點(diǎn)擊事件生成 a 標(biāo)簽
  • 觸發(fā) a 標(biāo)簽事件
  • 刪除 a 標(biāo)簽

代碼如下:

const backTop1 = document.getElementById('backTop1');
  backTop1.addEventListener('click', function(e) {
    let a = document.createElement('a');
    a.href = '#topAnchor'
    e.target.appendChild(a)
    a.onclick = function (e) {
      e.stopPropagation()
    }
    a.click()
    e.target.removeChild(a)
  })

不足:回到頂部,沒(méi)有緩動(dòng)效果,比較生硬。style 設(shè)置:html, body { scroll-behavior:smooth; }可以滿足

scrollTo()

  • 計(jì)算目標(biāo)元素距離頂部的距離
  • 通過(guò)事件觸發(fā)

代碼如下:

const backTop2 = document.getElementById('backTop2');
  const Top = document.getElementById('top');
  const y = Top.offsetTop
// offsetTop是原生 js 的方法,它獲取的是你綁定元素上邊框相對(duì)離自己最近且position屬性為非static的祖先元素的偏移量,返回值類型是 number,不帶 px 單位
  backTop2.addEventListener('click', function(e) {
    window.scrollTo({ top: y, behavior: 'smooth' })
  })

不足:對(duì) iframe 的支持度不夠,如果項(xiàng)目中,iframe 的占比大的話,謹(jǐn)慎使用

scrollIntoView()

相比第二種,這種寫法更加簡(jiǎn)潔、利于維護(hù);而且 scrollIntoView 在iframe 中表現(xiàn)也很優(yōu)秀,被用到的頻率更高

const backTop3 = document.getElementById('backTop3');
  const TOP = document.getElementById('top');
  backTop3.addEventListener('click', function(e) {
    TOP.scrollIntoView({  behavior: 'smooth'})
  })
參考文檔:

https://juejin.cn/post/6906142651121139719

scrollIntoView:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollIntoView
offsetTop 以及相關(guān)屬性詳解:https://blog.csdn.net/zh_rey/article/details/78967174

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容