Vue でページの一番下までスクロールしてデータを無限にロードする方法

php中世界最好的语言
リリース: 2018-06-02 13:59:42
オリジナル
3507 人が閲覧しました

今回は、Vue でページの一番下までスクロールすることでデータの無限ロードを実装する方法を説明します。Vue でページの一番下までスクロールするときに注意する必要があることは何ですか。実際のケースですので見てみましょう。 「Vue.js で無限スクロールを実装する」という記事を見たので、かなり実践的だと思いましたので、必要な方のために簡単に翻訳してみました。 Vue の

ライフサイクル

の理解、axios リクエストをいつ開始するか、Vue でネイティブ JS を使用してスクロール イベントを記述する方法などについて理解を深めることができます。ここでは主に原文の要点を抽出して補足します

技術的な内容この記事のポイント

Vueのライフサイクル

  1. Axiosの簡単な使い方

  2. moment.js形式の日付

  3. 画像の遅延読み込み

  4. ネイティブjsと組み合わせてスクロールイベントを記述する

  5. スロットリングをリクエスト

  6. プロジェクトを作成

最初に簡単なvueプロジェクトを作成

# vue init webpack-simple infinite-scroll-vuejs
ログイン後にコピー
次に、プロジェクトに必要なプラグインをいくつかインストール

# npm install axios moment
ログイン後にコピー

ユーザーデータを初期化

プロジェクトがビルドされたら、実行して見てください

# npm run dev
ログイン後にコピー
http://localhost:8080 を開きます。すべてが正しくなったら、最初にユーザー データの取得を見てみましょう

<script>
import axios from 'axios'
import moment from 'moment'
export default {
 name: 'app',
 // 创建一个存放用户数据的数组
 data() {
  return {
   persons: []
  }
 },
 methods: {
  // axios请求接口获取数据
  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() {
  // 在页面挂载前就发起请求
  this.getInitialUsers()
 }
}
</script>
ログイン後にコピー

また、元の作成者は、次のように注意しています。これは完全に不要であり、ページをロードするときに 5 回リクエストすることはお勧めできません。ただし、このインターフェイスは一度に 1 つしか返せないため、ここでは Mock を使用してデータをシミュレートすることもできます。詳細は説明しません~

次に、次のようにテンプレートの構造とスタイルを記述しましょう:

<template>
 <p id="app">
  <h1>Random User</h1>
  <p class="person" v-for="(person, index) in persons" :key="index">
   <p class="left">
    <img :src="person.picture.large" alt="">
   </p>
   <p class="right">
    <p>{{ person.name.first}} {{ person.name.last }}</p>
    <ul>
     <li>
      <strong>Birthday:</strong> {{ formatDate(person.dob)}}
     </li>
     <p class="text-capitalize">
      <strong>Location:</strong> {{ person.location.city}}, {{ person.location.state }}
     </p>
    </ul>
   </p>
  </p>
 </p>
</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人の個人情報を表示できます

無限スクロール読み込みロジックを処理します

次は。スクロールを監視するにはメソッドにscroll()を追加する必要があり、このイベントはmounted()ライフサイクル内にある必要があります。コードは次のとおりです:

<script>
 // ...
 methods: {
  // ...
  scroll(person) {
   let isLoading = false
   window.onscroll = () => {
    // 距离底部200px时加载一次
    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>
ログイン後にコピー
このコードの元のテキストにはいくつかのスペルミスがありますので、ここで修正しました。 、また、データのロードとフローの遮断を開始するために、下からの距離を増やしました。

保存して、ブラウザに戻り、効果を確認してください〜

概要

の機能は問題ありません。ページの一番下までスクロールして無限ロードすることは、実際には通常のページ開発と同様であり、スクロールロードが完了しないたびに次のリクエストがトリガーされず、各リクエストがプッシュされます。配列内では、データ バインディング を介して遅延読み込みが実装されています (実際、読んだ後では、これは非常に単純だと感じます)。

最後に、これのコピーも GitHub に作成しましたので、必要な場合は、infinite-scroll-vuejs-demo をご覧ください~ この記事の事例を読んだ後は、この方法を習得したと思います。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの他の関連記事にご注目ください。

推奨書籍:

JS を使用してハフマン コーディングを実装する方法

Angular CLI を使用して Angular プロジェクトを作成する方法

以上がVue でページの一番下までスクロールしてデータを無限にロードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!