WeChatアプレットはウォーターフォールフローのページングスクロール読み込みを実装します

WeChatアプレットはウォーターフォールフローのページングスクロール読み込みを実装します

この記事では、WeChatアプレットのウォーターフォールフローページングスクロールロードを実装するための具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

2つのページング方法

通常のページング効果では、ページの下部に次のページと前のページをクリックするためのボタンが表示されます。データを取得するためのインターフェイスは、ボタンをクリックした後にのみトリガーされます。この方法は、通常、優れたユーザー エクスペリエンスを提供します。

もう 1 つのページング効果では、ユーザーがボタンをクリックする必要はありません。現在のページの最後の数個のデータを閲覧すると、システムが自動的に次のページのデータを取得してページに表示するリクエストを送信し、無限スクロールに似た効果を実現できます。

csdnを例にとると、スクロールバーがこの場所に到達すると、自動的に次のページのデータを要求するためのインターフェイスが呼び出され、読み込まれたデータリストに蓄積されます。

実装のアイデア

スクロール ページング方式には問題があります。ユーザーが非常に高速にスクロールすると、最初のリクエストが完了する前に 2 番目のリクエストが開始する場合があります。この問題を回避するには、ロック フラグを追加し、リクエストの送信後にロックし、リクエストが完了したらロックを解除します。これにより、この問題を完全に回避できます。

実装のアイデアを得る

1. ロードできるデータがあるかどうかを確認します
2. 鍵を手に入れる
3. リクエストを送信し、インターフェースを呼び出す
4. ロックを解除する
5. データを返す

コードの実装

まずページングオブジェクトが必要です

クラスページング{
  page //現在のページ番号を記録します count //表示されているページ数を記録します req //インターフェースリクエストオブジェクト(ここではカプセル化していますが、必要に応じてプロパティを定義できます)
  url // リクエスト パス moreData = true // 次のページのデータはありますか? (デフォルトでは、リクエストが初めて行われたときに次のページのデータが存在します)
  accumulator = [] // 読み込まれたデータリスト locker = false // ロックフラグ}

ページングオブジェクトのコンストラクタを定義します。これは、デフォルトで最初のページからリクエストを開始し、ページごとに5つのデータ項目を持ちます。

コンストラクター(req, ページ=0, カウント=5){
    this.page = ページ
    this.count = カウント
    this.req = 要求
    this.url = 必須のurl
  }

次にgetMoreDataメソッドを記述します

より多くのデータを取得する(){
 //1. 次のデータ ページが存在するかどうかを確認します//2. ロックを取得し、ロックが解除されているかどうかを確認します//3. データを要求する//4. ロックを解除します}

1. 次のページのデータがあるかどうかを確認します

ここでは判断のためにmoreData属性を直接取得します

if(!this.moreData){
      戻る
}

2. 鍵を手に入れる

ここで新しいメソッドが追加されます。現在ロックされていない場合は、引き続きデータを要求できることを意味します。データを要求する前に、ロック フラグを true に設定して、次の要求が送信され続けるのを防ぎます。

_getLocker(){
    if(this.locker){
      偽を返す
    }
    this.locker = true
    真を返す
}

3. データのリクエスト

ページに返すために必要なデータ構造は次のとおりです。

{
        empty, // 空ですか? items, // 現在のページのデータ moreData, // 次のページのデータはありますか accumulator // 要求されたすべてのデータ}

まずリクエスト構造を取得するメソッドを定義する

 _getCurrentReq(){
    url = this.url とします。
    //リクエストパラメータを設定する const params = `page=${this.page}&count=${this.count}`
    //スプライシング方法を判断する if(url.includes('?')){
      url += '&' + パラメータ
    }それ以外{
      url += '?' + パラメータ
    }
    this.req.url = URL
    これを返す。
 }

データの取得方法は以下の通りです。

 _actualGetData(){
 
    const req = this._getCurrentReq() //特定のリクエストコンテンツを取得します。let paging = Http.request(req) //カスタムツールのリクエストメソッドを呼び出してデータを取得します。//結果が取得されない場合は、直接 null を返します。
    if(!ページング){
      nullを返す
    }
  
    ページング合計が 0 の場合
      戻る {
        空: true、
        アイテム: [],
        詳細データ: false、
        アキュムレータ: []
      }
    }
    
    //現在のページ番号が合計ページ番号より小さい場合は、次のページのデータがまだあることを意味します。moreData を true に設定し、そうでない場合は false に設定します。
    this.moreData = pageNum < totalPage-1 ? true : false
    
    //次のページのデータがある場合は、次の取得を容易にするためにページを1増やします。if (this.moreData) {
      このページ += 1
    }
    
    //ウォーターフォールフロー表示データを蓄積する必要があるため、データリストも蓄積する必要があります this.accumulator = this.accumulator.concat(paging.items)
    戻る {
      空: false、
      アイテム: paging.items、
      詳細情報: this.moreData、
      アキュムレータ: this.accumulator
    }
 }

4. ロックを解除する

ロックを解除するには、ロック識別子の状態を変更するだけです。

this.locker = false

getMoreDataメソッドが記述され、対応するインターフェースのjsファイルで呼び出すことができます。

インターフェースに最初に入ったときに一度自動的に呼び出され、その後ユーザーが下部に触れるたびに再度呼び出される必要がある。

initBottomSpuList(){
 //ページングオブジェクトを取得する const paging = new Paging({
      URL: URL
    })
    //ページングオブジェクトをjsデータに保存します。this.data.spuPaging = paging
    //メソッドを呼び出す const data = paging.getMoreData()
    if(!データ){
      戻る
    }
    // ウォーターフォールフローを再読み込みします wx.lin.renderWaterFlow(data.items)
},

WeChat アプレットには、下部をタッチすると自動的にトリガーされる独自の機能があります。この関数にメソッド呼び出しコードを記述するだけです。

onReachBottom: 関数 () {
    定数データ = this.data.spuPaging.getMoreData()
    if(!データ){
      戻る
    }
    // ウォーターフォールフローを再読み込みします wx.lin.renderWaterFlow(data.items)
}

この時点で、ウォーターフォールフローのページングスクロール読み込みの効果を実現できます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • uniapp アプレットでウォーターフォール フロー レイアウトを実装するためのアイデアとコード
  • ミニプログラムのウォーターフォールフローコンポーネントは、ページめくりと画像の遅延読み込みを実現します。
  • ミニプログラムでシンプルな2列のウォーターフォール効果を実装する
  • WeChatアプレットはjsを通じてウォーターフォールフローレイアウトを実装します
  • ウェブページとWeChatアプレットページにウォーターフォール効果を実装する
  • WeChatアプレットでウォーターフォールレイアウトと無限読み込みを実装する方法の詳細な説明
  • WeChat ミニプログラムで切り捨てられたウォーターフォール コンポーネントを実装するためのサンプル コード

<<:  MySQLデータのセキュリティを確保するための提案

>>:  MySQLテーブルのテーブル構造を素早く変更する方法

推薦する

ElementUI ページネーション コンポーネントの使い方 Vue でのページネーション

ElementUIページングコンポーネントPagination in Vueの使用は参考になります。...

任意の長さの配列を作成または埋めるための JS のヒントの要約

目次序文直接充填方式for ループの push() メソッド配列コンストラクタメソッド配列コンストラ...

CSS3 で作成した本のページめくり効果

結果:実装コード: html <!-- よろしければハートを付けてください! --> &...

Mysql5.7でのスケジュールバックアップの実装

1. MySQL インストール パス D:\xxx\MYSQL\MySQL Workbench CE...

サーバーの購入と初期構築方法

しばらくサーバーいじってなかったけど、やることがなくなったのでモバイルワークスに行って海外サーバーを...

HTML における DOM 要素のスクロールバースクロール制御の詳細な説明

dom要素に新しい子要素を追加し、新しく追加された新しい要素がコンテナーのスコープを超えた場合は、次...

ポップアップはすべて不正なものではありません。ウェブサイトのポップアップをデザインするためのヒント

ポップアップニュースは国内のインターネットサービスでは一般的であり、リアルタイムプッシュ方式はウェブ...

HTML におけるメタの役割について (インターネットから収集および分類)

W3Cschoolではこのように説明しています<meta> 要素は、検索エンジン向けの説...

Nginx のアンチホットリンクを設定する方法

実験環境• 最小限のインストール済みの CentOS 7.3 仮想マシン• 構成: 1 コア/512...

Docker を使用して pypi プライベート リポジトリを構築する方法

1. 建設1. htpasswd.txtファイルを準備するファイルには、パッケージを倉庫にアップロー...

ウェブページ内でウェブテーブルやdivレイヤーが引き伸ばされる問題の解決策

<br />Web ページをデザインするときには、いつも不快なことに遭遇します。最も一般...

MySQL 無料インストール版 (zip) のインストールと設定の詳細なチュートリアル

この記事では、MySQL無料インストール版(zip)のインストールと設定のチュートリアルを参考までに...

jQueryはクッキーを操作する

コードをコピーコードは次のとおりです。 jQuery.cookie = 関数(名前、値、オプション)...

CSSを使用してすべての子要素を選択する方法の詳細な説明

CSS を使用してすべての子要素を再帰的に選択するにはどうすればよいですか?以下の記事では、CSS ...

マインドマップを使って4つの側面からWeb標準の価値を議論する

このアイデアを改善し、より良い意見を得られることを期待して、議論を刺激するためにいくつかの値を大まか...