について最近、Vue を学習する過程で、基本的な知識の練習と強化を目的として、Qunar.com のモバイル版を模倣した小さなプロジェクトを作成しました。しかし、今日、Qunar のホームページにユーザー エクスペリエンスの悪いコンポーネントがあることを発見しました。つまり、水平リストはブラウザーのネイティブ スクロールを使用して実装されています。リストのスクロールはかなりぎこちなく不快なので、このコンポーネントを better-scroll で書き直すことにしました。 better-scrollの紹介Better-scroll は、Huang Yi (そう、私の先輩です) が作成した i-scroll をベースにしたスクロール コンポーネントです。プロジェクト アドレス: https://github.com/ustbhuangyi/better-scroll 1. スクロールの実装原理better-scroll のスクロール原理は、ブラウザのネイティブスクロール原理と同じです。子ボックスの高さが親ボックスの高さより大きい場合、垂直スクロールが発生します。 同様に、子ボックスの幅が親ボックスの幅よりも大きい場合は、水平スクロールが発生します (基本原則)。 2. Vueでbetter-scrollを使用するVue で better-scroll を使用する際に注意すべき最も重要な点は、BScroll のインスタンス化を実行する前に、ページのレンダリングが完了するまで待つ必要があることです。これは、better-scroll がスクロール可能かどうかを計算するためにスクロール領域のサイズと親ボックスのサイズを取得する必要があるため、Vue のライフサイクルをある程度理解している必要があるためです。 ここに小さなデモがあります。このデモを通して、better-scrollの使い方を学びます。 <テンプレート> <div class="wrapper" ref="wrapper"> // Vue で DOM 要素を取得する最も簡単な方法は、this.$refs を使用することです。 <ul class="content"> <li>...</li> <li>...</li> ... </ul> </div> </テンプレート> <スクリプト> import BScroll from 'better-scroll' //better-scrollをインポート エクスポートデフォルト{ マウント() { this.$nextTick(() => { // this.$nextTick を使用して、コンポーネントがレンダリングされていることを確認します this.scroll = new Bscroll(this.$refs.wrapper, {}) // BScroll をインスタンス化し、2 つのパラメータを受け入れます。最初のパラメータは親ボックスの DOM ノードです}) } } </スクリプト> 3. Vueで水平スクロールを実装する1. レンダリングの比較 ネイティブスクロールを使用する: better-scroll を使用します: 2. コード(コメントを参照) <テンプレート> <div class="recommand-wrap"> <div class="title"> <img class="title-img" src="https://imgs.qunarzz.com/piao/fusion/1711/16/bfbb9874e8f11402.png" alt="今週のホットリスト"> <span class="title-hotrec">今週のホットリスト</span> <span class="title-allrec">すべてのチャート</span> </div> <div ref="wrapper"> /* これは親ボックスです*/ <ul class="cont" ref="cont"> /* これは子ボックス、スクロール領域です*/ <li class="cont-item" v-for="recommendList のアイテム" :key="item.id"> <div class="cont-img"> <img class="img" :src="item.url" :alt="item.text"> </div> <div class="cont-dest">{{item.text}}</div> <div class="cont-price"> <span class="price">¥{{item.price}}</span> <span>開始</span> </div> </li> </ul> </div> </div> </テンプレート> <スクリプト> 'better-scroll' から BScroll をインポートします エクスポートデフォルト{ 名前: 'HomeRecommand', 小道具: { 推奨リスト: { タイプ: 配列、 必須: true } }, コンポーネント: }, データ () { 戻る { } }, メソッド: { verScroll() { let width = this.recommendList.length * 110 // スクロール領域のサイズを動的に計算します。前述のように、スクロールする理由は、スクロール領域の幅が親ボックスの幅よりも大きいためです。this.$refs.cont.style.width = width + 'px' // スクロール領域の幅を変更します。this.$nextTick(() => { スクロールすると this.scroll = 新しいBScroll(this.$refs.wrapper, { startX: 0, // 設定の詳細については、better-scroll の公式ドキュメントを参照してください。ここでは詳細には触れません。click: true, スクロールX: true、 スクロールY: false、 イベントパススルー: '垂直' }) } そうでなければ{ this.scroll.refresh() //DOM構造が変更された場合にこのメソッドを呼び出します} }) } }, マウントされた(){ this.$nextTick(() => { let timer = setTimeout(() => { // 実際には、このタイマーも書きたくありません。これは、$nextTick の別のレイヤーをネストするのと同じですが、if (timer) { の場合は失敗します。 タイムアウトをクリア(タイマー) this.verScroll() } }, 0) }) } } </スクリプト> <style lang="scss" スコープ> .recommand-wrap { 高さ: 0; パディング下部: 50%; 上マージン: .2rem; 背景: #fff; 左パディング: .24rem; 幅: 100%; 。タイトル { 位置: 相対的; 高さ: 40px; ディスプレイ: フレックス; パディング: 12px 0; ボックスのサイズ: 境界線ボックス; .title-img { 幅: 15px; 高さ: 15px; } .title-hotrec { フォントサイズ: 16px; 左マージン: 4px; } .title-allrec { 位置: 絶対; パディング上部: 2px; フォントサイズ: 13px; 右: 20px; 色: グレー; } } .続き{ リストスタイル: なし; // オーバーフローx: スクロール; 空白: ラップなし; フォントサイズ: 12px; テキスト配置: 中央; 右パディング: .24rem; .cont-item { 位置: 相対的; 表示: インラインブロック; パディング: .06rem 0 .2rem; 幅: 2rem; マージン: 0.1rem; .cont-img { オーバーフロー: 非表示; 幅: 2rem; 高さ: 0; パディング下部: 100%; .img { 幅: 100%; } } .cont-dest { マージン: .1rem 0; } .cont-price { 。価格 { 色: #ff8300; } } } } } </スタイル> 参考リンク 著者: 黄毅 リンク: https://zhuanlan.zhihu.com/p/27407024 要約するこれで、Vue の better-scroll コンポーネントを使用して水平スクロールを実装する方法についての記事は終了です。Vue better-scroll の水平スクロールに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CentOS7 で MySQL 5.7.24 をコンパイルしてインストールする詳細なチュートリアル
<br />原文: http://jorux.com/archives/what-is-...
時は経つのが早く、わずか 6 日後には 2013 年が歴史になります。今年は、いわゆるトレンドが多す...
CentOS 8にDockerをインストールする公式ドキュメント: https://docs.doc...
Baiduで検索しました。 。 chcp コマンドを使用して、cmd の文字エンコーディングを 65...
1. pipとは何かpip は、Python パッケージの検索、ダウンロード、インストール、アンイ...
ユニアプリアプレットはWeChatでも同様のドロップダウン問題を抱えることになる解決策は、app.v...
毎回インストールチュートリアルを探すのは面倒なので、後で確認できるように手順をバックアップします。解...
目次1. デモプロジェクト1.1 インターフェースの準備1.2 構成の準備2. Dockerがリモー...
インターフェース全体に背景画像を表示したい場合は、当然 body に背景を追加することを考えます。コ...
tomcat 設定ファイルから、tomcat の起動時にデフォルトで 8080 (8443)、800...
SQL を使用してデータを抽出する場合、テーブル内で重複した値に遭遇することがよくあります。たとえ...
Pantherは新人としてスタートし、今もまだ新人ですが、人々から学び、学んだことを時々皆さんと共有...
mysqlrootパスワードの設定と変更初めて MySQL データベースに入ります。 !環境変数にm...
目次1. 変数の概要1.1 変数のメモリへの保存1.2 変数の使用1. 変数を宣言する2. 譲渡3....
MySQL 5.7.20 zipインストール、具体的な内容は次のとおりです(1)圧縮パッケージを解凍...