最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于vue實(shí)現(xiàn)頁(yè)面滾動(dòng)加載的示例詳解

 更新時(shí)間:2024年01月12日 11:24:17   作者:loyd3  
頁(yè)面內(nèi)容太多會(huì)導(dǎo)致加載速度過(guò)慢,這時(shí)可考慮使用滾動(dòng)加載即還沒(méi)有出現(xiàn)在可視范圍內(nèi)的內(nèi)容塊先不加載,出現(xiàn)后再加載,所以本文給大家介紹了基于vue實(shí)現(xiàn)頁(yè)面滾動(dòng)加載的示例,需要的朋友可以參考下

頁(yè)面內(nèi)容太多會(huì)導(dǎo)致加載速度過(guò)慢,這時(shí)可考慮使用滾動(dòng)加載即還沒(méi)有出現(xiàn)在可視范圍內(nèi)的內(nèi)容塊先不加載,出現(xiàn)后再加載
基本思路就是判斷元素是否出現(xiàn)在瀏覽器的可視區(qū)域,出現(xiàn)了就加載請(qǐng)求接口加載內(nèi)容。但是要求內(nèi)容塊有最小高度。

具體代碼如下

<template>
  <div>
    <div
      v-loading.fullscreen.lock="loading"
      class="page"
      id="tablist"
      @scroll="listScroll"
    >
      <div
        class="item"
        v-for="(item, i) in testData"
        :key="i"
        :class="i % 2 == 0 ? 'gray' : 'white'"
        :id="item.id"
      >
        {{ item.name }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "ScrollLoadingSample",
  props: {},
  data() {
    return {
      flag: true, // 開(kāi)關(guān)
      loading: false, // loading加載
      testData: [], // 列表數(shù)據(jù)
      targetIndex: 0,
      nextId: "",
    };
  },
  mounted() {
    this.initData();
  },
  methods: {
    initData() {
      this.testData = [
        {
          id: "test-1",
          name: "區(qū)塊1",
          // 要加載的方法名
          function: "loadTest1",
          // 方法是否加載了
          isLoaded: false,
        },
        {
          id: "test-2",
          name: "區(qū)塊2",
          function: "loadTest2",
          isLoaded: false,
        },
        {
          id: "test-3",
          name: "區(qū)塊3",
          function: "loadTest3",
          isLoaded: false,
        },
        {
          id: "test-4",
          name: "區(qū)塊4",
          function: "loadTest4",
          isLoaded: false,
        },
        {
          id: "test-5",
          name: "區(qū)塊5",
          function: "loadTest5",
          isLoaded: false,
        },
        {
          id: "test-6",
          name: "區(qū)塊6",
          function: "loadTest6",
          isLoaded: false,
        },
      ];
      this.$nextTick(() => {
        this.loadPage();
      });
    },
    //判斷元素是否在可視區(qū)域
    isElementInViewport(id) {
      let el = document.getElementById(id);
      //獲取元素是否在可視區(qū)域
      let rect = el.getBoundingClientRect();
      return (
        rect.top + rect.height / 2 <=
          (window.innerHeight || document.documentElement.clientHeight) &&
        rect.bottom > 0
      );
    },

    // 初次加載頁(yè)面時(shí)
    loadPage() {
      for (let i = 0; i < this.testData.length; i++) {
        if (this.isElementInViewport(this.testData[i]["id"])) {
          this.loadFunctionByName(this.testData[i]["function"]);
          this.testData[i]["isLoaded"] = true;
        } else {
          this.targetIndex = i;
          // 最開(kāi)始沒(méi)出現(xiàn)在頁(yè)面上的id
          this.nextId = this.testData[this.targetIndex]["id"];
          break;
        } 
      }
    },
    // 頁(yè)面滑動(dòng)
    listScroll() {
      for (let i = this.targetIndex; i < this.testData.length; i++) {
        // 如果出現(xiàn)在頁(yè)面上
        if (this.isElementInViewport(this.testData[i]["id"])) {
          // 如果方法沒(méi)有加載
          if (!this.testData[i]["isLoaded"]) {
            this.loadFunctionByName(this.testData[i]["function"]);
            this.testData[i]["isLoaded"] = true;
          }
        } else {
          // 如果沒(méi)有出現(xiàn)在頁(yè)面上
          this.targetIndex = i;
          this.nextId = this.testData[this.targetIndex]["id"];
          break;
        }
      }
    },
    // 根據(jù)方法名加載
    loadFunctionByName(functionName) {
      switch (functionName) {
        case "loadTest1":
          this.loading = true;
          // 模擬延遲請(qǐng)求
          setTimeout(() => {
            console.log("加載區(qū)塊1");
            this.loading = false;
          }, 1000);
          break;
        case "loadTest2":
          this.loading = true;
          // 模擬延遲請(qǐng)求
          setTimeout(() => {
            console.log("加載區(qū)塊2");
            this.loading = false;
          }, 1000);
          break;
        case "loadTest3":
          this.loading = true;
          // 模擬延遲請(qǐng)求
          setTimeout(() => {
            console.log("加載區(qū)塊3");
            this.loading = false;
          }, 1000);
          break;
        case "loadTest4":
          this.loading = true;
          // 模擬延遲請(qǐng)求
          setTimeout(() => {
            console.log("加載區(qū)塊4");
            this.loading = false;
          }, 1000);
          break;
        case "loadTest5":
          this.loading = true;
          // 模擬延遲請(qǐng)求
          setTimeout(() => {
            console.log("加載區(qū)塊5");
            this.loading = false;
          }, 1000);
          break;
        case "loadTest6":
          this.loading = true;
          // 模擬延遲請(qǐng)求
          setTimeout(() => {
            console.log("加載區(qū)塊6");
            this.loading = false;
          }, 1000);
          break;
      }
    },
  },
};
</script>


<style scoped>
.page {
  width: 100vw;
  height: 100vh;
  overflow-y: auto;
  display: flex;
  flex-wrap: wrap;
  /* justify-content: center;
  align-items: center; */
}
.item {
  width: 100vw;
  height: 25vh;
  display: flex;
  justify-content: center;
  align-items: center;
}
.gray {
  background-color: #d5d1d1;
}
.white {
  background-color: white;
}
.loading {
  width: 80px;
  height: 100px;
  background: rgba(0, 0, 255, 0.664);
  display: inline-block;
}
</style>



需要注意 getBoundingClientRect()這個(gè)方法,正是通過(guò)這個(gè)方法獲取元素位置,從而判斷是否出現(xiàn)在可視區(qū)域

到此這篇關(guān)于基于vue實(shí)現(xiàn)頁(yè)面滾動(dòng)加載的示例詳解的文章就介紹到這了,更多相關(guān)vue頁(yè)面滾動(dòng)加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • axios取消請(qǐng)求CancelToken的用法示例代碼

    axios取消請(qǐng)求CancelToken的用法示例代碼

    Axios提供了取消請(qǐng)求的功能,可以通過(guò)使用CancelToken來(lái)實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于axios取消請(qǐng)求CancelToken的用法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Vue.js實(shí)現(xiàn)表格渲染的方法

    Vue.js實(shí)現(xiàn)表格渲染的方法

    今天小編就為大家分享一篇對(duì)Vue.js實(shí)現(xiàn)表格渲染的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • Vuex與Vue router的使用詳細(xì)講解

    Vuex與Vue router的使用詳細(xì)講解

    在看這篇文章的幾點(diǎn)要求:需要你先知道Vuex與Vue-Router是個(gè)什么東西,用來(lái)解決什么問(wèn)題,以及它的基本使用。如果你還不懂的話,建議上官網(wǎng)了解下Vuex與Vue-Router的基本使用后再回來(lái)看這篇文章
    2022-11-11
  • vue使用數(shù)組splice方法失效,且總刪除最后一項(xiàng)的問(wèn)題及解決

    vue使用數(shù)組splice方法失效,且總刪除最后一項(xiàng)的問(wèn)題及解決

    這篇文章主要介紹了vue使用數(shù)組splice方法失效,且總刪除最后一項(xiàng)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue實(shí)現(xiàn)登錄驗(yàn)證碼

    vue實(shí)現(xiàn)登錄驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)登錄驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue-cli系列之vue-cli-service整體架構(gòu)淺析

    vue-cli系列之vue-cli-service整體架構(gòu)淺析

    這篇文章主要介紹了vue-cli系列之vue-cli-service整體架構(gòu)淺析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Vue3?vite配置css?的sourceMap及文件引用配置別名的過(guò)程

    Vue3?vite配置css?的sourceMap及文件引用配置別名的過(guò)程

    這篇文章主要介紹了Vue3 vite配置css的sourceMap,及文件引用配置別名的過(guò)程,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Vue利用AJAX請(qǐng)求獲取XML文件數(shù)據(jù)的操作方法

    Vue利用AJAX請(qǐng)求獲取XML文件數(shù)據(jù)的操作方法

    在現(xiàn)代Web開(kāi)發(fā)中,從前端框架到后端API的交互是必不可少的一部分,Vue.js作為一個(gè)輕量級(jí)且功能強(qiáng)大的前端框架,支持多種方式與服務(wù)器通信,從而獲取或發(fā)送數(shù)據(jù),本文將詳細(xì)介紹如何在Vue.js項(xiàng)目中使用AJAX請(qǐng)求來(lái)獲取XML格式的數(shù)據(jù),需要的朋友可以參考下
    2024-09-09
  • VUE+element-ui文件上傳的示例代碼

    VUE+element-ui文件上傳的示例代碼

    圖片和文件上傳在很多項(xiàng)目中都可以使用的到,本文主要介紹了VUE+element-ui文件上傳的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 快速解決element的autofocus失效問(wèn)題

    快速解決element的autofocus失效問(wèn)題

    這篇文章主要介紹了快速解決element的autofocus失效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論

红安县| 浑源县| 马关县| 寿阳县| 桑植县| 化德县| 新余市| 孝义市| 宜昌市| 原阳县| 云安县| 泸西县| 南漳县| 渝中区| 当雄县| 红安县| 太仓市| 临城县| 阜康市| 从化市| 安吉县| 民乐县| 米林县| 南投县| 南雄市| 博野县| 泸水县| 凤阳县| 玉溪市| 舒兰市| 乐山市| 赣州市| 罗江县| 乳源| 祁门县| 牙克石市| 乐都县| 蒙城县| 元阳县| 连山| 五原县|