Vue中滾動條回到頂部及動畫化(緩慢回滾)

開發首頁出現滾動條回到頂部的需求,也不能直接回到,要緩慢回滾。

舊項目使用的是JQuery的 $("html,body").animate({scrollTop: 0}, 500); //動畫化滾動到頂部。var scrolltop=$(this).scrollTop();//位置

新項目使用Vue開發,首先遇到的問題是網上查詢的所有回到頂部方法均無效。找朋友遠程幫忙檢查了一下,原來是html,body,和element-UI 的main容器 .el-main設置了高度爲100vh;這導致了最外層容器高度均爲屏幕高度,此時子元素高度超出後,會在父級容器中滾動,實際上並不是整個頁面在瀏覽器中滾動,導致了我在網上查找的回到頂部方法均無效(有一個例外)。在朋友的建議下改爲min-height:100vh; height:auto;此時發現頁面中的滾動條的確和原來不同了。之前無效的方法,也開始奏效。

下面總結一下,網上查詢的滾動條回到頂部方法:

1:window.scrollTo(0,0); //瀏覽器滾動

2:document.documentElement.scrollTop; //瀏覽器滾動

3:  container.scrollIntoView(); //容器內滾動的例外生效方法;container爲容器id。

即使我原來的容器內滾動可以用方法3來實現,但是後面的滾動條位置監控(滾動條在頂部是回到頂部按鈕隱藏)依然無法實現。

所以,還是在1和2中選擇,但是如何實現動畫化呢(緩慢滾動到頂部)?網上查詢得來思路是 使用setInterval來定時循環減少scrollTop的值。但這樣1就不太好用了,所以還是選中了2,因爲scrollTop可以被監控到,也可以被修改操控。

 mounted() { 

    window.addEventListener('scroll', this.handleScroll); //添加監聽事件

  },

  destroyed() {

    window.removeEventListener('scroll', this.handleScroll); //移除監聽事件

  },

handleScroll() { //監控scrollTop 的值,根據其變化執行相應操作(回到頂部按鈕的顯示和隱藏)

      if (document.documentElement.scrollTop >= 200) { 

        this.isTop = false;

      }else{

        this.isTop = true;

      }

    },

  goToTop(){ //回到頂部方法 點擊按鈕調用

      let top = document.documentElement.scrollTop;

      // 實現滾動效果 

      const timeTop = setInterval(() => {

        document.documentElement.scrollTop = top -= 50;  

        if (top <= 0) {

          clearInterval(timeTop); //清除定時器

        }

      }, 10);

    },

以上方法都是網上學習借鑑而來,我只是總結歸納一下。希望對各位有幫助,謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章