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

Vue下滾動(dòng)到頁面底部無限加載數(shù)據(jù)的示例代碼

 更新時(shí)間:2018年04月22日 11:52:39   作者:whidy  
本篇文章主要介紹了Vue下滾動(dòng)到頁面底部無限加載數(shù)據(jù)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

看到一篇Implementing an Infinite Scroll with Vue.js , 覺得挺實(shí)用的就看了下, 順便簡(jiǎn)單翻譯了一下給需要的人參考.

從這個(gè)項(xiàng)目中可以加深對(duì)Vue的生命周期的理解, 何時(shí)開始axios請(qǐng)求, 如何結(jié)合Vue使用原生js來寫scroll事件等等, 我這里主要是對(duì)原文的重點(diǎn)提取和補(bǔ)充

本文技術(shù)要點(diǎn)

  1. Vue生命周期
  2. axios簡(jiǎn)單用法
  3. moment.js格式化日期
  4. 圖片懶加載
  5. 結(jié)合原生js來寫scroll事件
  6. 請(qǐng)求節(jié)流

創(chuàng)建項(xiàng)目

首先創(chuàng)建一個(gè)簡(jiǎn)單的vue項(xiàng)目

# vue init webpack-simple infinite-scroll-vuejs

然后安裝項(xiàng)目所需要用的一些插件

# npm install axios moment

初始化用戶數(shù)據(jù)

項(xiàng)目搭建完后, 跑起來看看

# npm run dev

打開http://localhost:8080無誤后, 我們開始修改代碼, 先看看獲取用戶數(shù)據(jù)這塊,

<script>
import axios from 'axios'
import moment from 'moment'
export default {
 name: 'app',
 // 創(chuàng)建一個(gè)存放用戶數(shù)據(jù)的數(shù)組
 data() {
  return {
   persons: []
  }
 },
 methods: {
  // axios請(qǐng)求接口獲取數(shù)據(jù)
  getInitialUsers() {
   for (var i = 0; i < 5; i++) {
    axios.get(`https://randomuser.me/api/`).then(response => {
     this.persons.push(response.data.results[0])
    })
   }
  },
  formatDate(date) {
   if (date) {
    return moment(String(date)).format('MM/DD/YYYY')
   }
  },
 beforeMount() {
  // 在頁面掛載前就發(fā)起請(qǐng)求
  this.getInitialUsers()
 }
}
</script>

這里原作者也專門提醒, 完全沒有必要也不建議在加載頁面的時(shí)候請(qǐng)求5次, 只是這個(gè)接口一次只能返回1條數(shù)據(jù), 僅用于測(cè)試才這樣做的. 當(dāng)然我這里也可以通過Mock來模擬數(shù)據(jù), 就不詳細(xì)說了~

接下來來寫模板結(jié)構(gòu)和樣式, 如下:

<template>
 <div id="app">
  <h1>Random User</h1>
  <div class="person" v-for="(person, index) in persons" :key="index">
   <div class="left">
    <img :src="person.picture.large" alt="">
   </div>
   <div class="right">
    <p>{{ person.name.first}} {{ person.name.last }}</p>
    <ul>
     <li>
      <strong>Birthday:</strong> {{ formatDate(person.dob)}}
     </li>
     <div class="text-capitalize">
      <strong>Location:</strong> {{ person.location.city}}, {{ person.location.state }}
     </div>
    </ul>
   </div>
  </div>
 </div>
</template>

<style lang="scss">
.person {
 background: #ccc;
 border-radius: 2px;
 width: 20%;
 margin: 0 auto 15px auto;
 padding: 15px;

 img {
  width: 100%;
  height: auto;
  border-radius: 2px;
 }

 p:first-child {
  text-transform: capitalize;
  font-size: 2rem;
  font-weight: 900;
 }

 .text-capitalize {
  text-transform: capitalize;
 }
}
</style>

這樣頁面就能顯示5個(gè)人的個(gè)人信息了.

處理無限滾動(dòng)加載邏輯

我們接下來需要在methods里面添加scroll()來監(jiān)聽滾動(dòng), 并且這個(gè)事件是應(yīng)該在mounted()這個(gè)生命周期內(nèi)的. 代碼如下:

<script>
 // ...
 methods: {
  // ...
  scroll(person) {
   let isLoading = false
   window.onscroll = () => {
    // 距離底部200px時(shí)加載一次
    let bottomOfWindow = document.documentElement.offsetHeight - document.documentElement.scrollTop - window.innerHeight <= 200
    if (bottomOfWindow && isLoading == false) {
     isLoading = true
     axios.get(`https://randomuser.me/api/`).then(response => {
      person.push(response.data.results[0])
      isLoading = false
     })
    }
   }
  }
 },
 mounted() {
  this.scroll(this.persons)
 }
}
</script>

這段代碼原文是有一點(diǎn)拼寫錯(cuò)誤的. 我這里修正了, 另外增加了距離底部即開始加載數(shù)據(jù), 并進(jìn)行截流.

保存好, 回到瀏覽器, 查看效果, 已經(jīng)沒有問題了~

總結(jié)

滾動(dòng)到頁面底部無限加載的功能在Vue上實(shí)現(xiàn)其實(shí)和普通的頁面開發(fā)差不多, 每次滾動(dòng)加載未完成的情況下不會(huì)觸發(fā)請(qǐng)求下一次, 每次請(qǐng)求push到數(shù)組內(nèi), 通過<img :src="">的數(shù)據(jù)綁定實(shí)現(xiàn)了懶加載(其實(shí)0 0我不太認(rèn)可...), 看完是不是感覺挺簡(jiǎn)單的.

最后, 我把這個(gè)也弄了一份在GitHub上面, 有需要的可以看看infinite-scroll-vuejs-demo~

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue.js仿Metronic高級(jí)表格(二)數(shù)據(jù)渲染

    Vue.js仿Metronic高級(jí)表格(二)數(shù)據(jù)渲染

    這篇文章主要為大家詳細(xì)介紹了Vue.js仿Metronic高級(jí)表格的數(shù)據(jù)渲染,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Vue.js通過組件處理Icon圖標(biāo)

    Vue.js通過組件處理Icon圖標(biāo)

    這篇文章介紹了Vue.js通過組件處理Icon圖標(biāo)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • vue3中vite的@路徑別名與path中resolve實(shí)例詳解

    vue3中vite的@路徑別名與path中resolve實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于vue3中vite的@路徑別名與path中resolve的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 解決element-ui table設(shè)置列fixed時(shí)X軸滾動(dòng)條無法拖動(dòng)問題

    解決element-ui table設(shè)置列fixed時(shí)X軸滾動(dòng)條無法拖動(dòng)問題

    這篇文章主要介紹了解決element-ui table設(shè)置列fixed時(shí)X軸滾動(dòng)條無法拖動(dòng)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • VUE解決 v-html不能觸發(fā)點(diǎn)擊事件的問題

    VUE解決 v-html不能觸發(fā)點(diǎn)擊事件的問題

    今天小編就為大家分享一篇VUE解決 v-html不能觸發(fā)點(diǎn)擊事件的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • Vue純前端使用exceljs導(dǎo)出excel文件的完整圖文教程

    Vue純前端使用exceljs導(dǎo)出excel文件的完整圖文教程

    這篇文章將一步一步為大家詳細(xì)介紹一下exceljs插件中的使用,以及如何使用exceljs導(dǎo)出excel文件,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • vue中定時(shí)器setInterval的使用及說明

    vue中定時(shí)器setInterval的使用及說明

    這篇文章主要介紹了vue中定時(shí)器setInterval的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Element的Pagination分頁sync問題小結(jié)

    Element的Pagination分頁sync問題小結(jié)

    本文主要介紹了Element的Pagination分頁sync問題小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • vue3.0組合式api的使用小結(jié)

    vue3.0組合式api的使用小結(jié)

    這篇文章主要介紹了vue3.0組合式api的使用小結(jié),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • vue學(xué)習(xí)筆記之slot插槽基本用法實(shí)例分析

    vue學(xué)習(xí)筆記之slot插槽基本用法實(shí)例分析

    這篇文章主要介紹了vue學(xué)習(xí)筆記之slot插槽基本用法,結(jié)合實(shí)例形式分析了vue slot插槽基本使用方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02

最新評(píng)論

阿拉善盟| 武强县| 古蔺县| 防城港市| 稻城县| 沛县| 隆尧县| 绵阳市| 界首市| 时尚| 大渡口区| 盘锦市| 江安县| 志丹县| 襄汾县| 通河县| 静海县| 崇信县| 威宁| 安康市| 阿坝| 泰兴市| 赣榆县| 嘉善县| 杭锦后旗| 土默特右旗| 扶风县| 孟村| 闽侯县| 科技| 兴义市| 巴南区| 高邮市| 乐亭县| 白玉县| 建湖县| 昂仁县| 岱山县| 吴忠市| 勃利县| 苏尼特左旗|