WeChatアプレットが左右連携を実現

WeChatアプレットが左右連携を実現

この記事では、WeChatアプレットの左右連動を実現するための具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

最近、WeChatアプレットを使用して、学校のコースシステム分析プロジェクトを構築しました。注文プロジェクトを選択した後、ホームページを実装する際に、マクドナルドの注文と同じように、左側にカテゴリ、右側に料理を表示したいと考えました。左側のカテゴリをクリックすると、右側が対応するカテゴリにスクロールし、右側の料理をスクロールすると、現在左側にスクロールしている料理のカテゴリも強調表示されます。それではまず結果をお見せしましょう!

この機能は小さいですが、スクロールビューの原理を理解すれば非常に便利になると思います。

まず、WeChatミニプログラムの公式ドキュメントを確認してください:スクロールビュー

ここでは、私自身の理解に基づいて、私が使用しているプロパティを紹介します。

  • scroll-y: スクロール方向を設定します。x は水平、y は垂直、属性タイプはブール値です。
  • scroll-top: つまり、scroll-top の値は上からの距離です。これを記述するスクロールビューは上からその距離だけ離れます。ただし、変数値を設定して、js 内の条件に応じて変更することができます。これは、左右の連動を実現するための重要なステップでもあります。
  • scroll-into-view: scroll-into-view は ID 値です。垂直方向にスクロールすることで左右のリンクを実装するため、scroll-into-view を設定すると、現在の scroll-into-view 値が現在の scroll-view のスクロール先になります。
  • style='height: ここに高さを入力' の場合、スクロールするように設定したコンポーネントには高さが必要です。高さがないとスクロールしません。これもわかりやすいですね。フレームの高さを設定しないと、スクロールビューはどこからスライドを開始すればよいかわかりませんよね?スライダーをページの中央(高さの一部のみを占める)に設定する必要がある場合もあれば、ウィンドウ全体の高さに設定する必要がある場合もあるため、高さも必要な属性です。
  • scroll-with-animation: アニメーション遷移のスクロールバーの位置を設定するために使用されます。この属性を削除しても正常に動作することが分かりました。私が書いたページではまだ使用されていないのかもしれません。後で理解する必要があります。
  • bindscroll: 関数をバインドします。スクロールなのでクリックトリガーがないので、スライド時に関数の内容を実行するためのバインド関数があります。
  • コンポーネントのプロパティがわかったので、実装を始めましょう。私のアイデアは、両側にスライドできるスライダーを各側に設定することです。まず、左側を右側にリンクします。左側の機能は、クラスの右側をクリックしてジャンプすることです。
<scroll-view class='aside' scroll-y='true' style='height:{{asideheight}}px' scroll-with-animation="true" scroll-top='{{itemLeftToTop}}' >
    
    <view wx:for="{{menus}}" wx:key="id" data-id="{{item.id}}" bindtap='tabMenu' class="{{item.id === currentLeftSelected ? 'menu active' : 'menu'}}">

    <ビュー id="{{item.id}}">{{item.name}}</ビュー>
    </ビュー>

    <view class="option">
    <button id='user_btn' bindtap='getin' >pc</button>
    <画像 id='user_img' src='../../images/index/user_option.png'></画像>
    </ビュー>
    
  </スクロールビュー>
  <!--各料理の詳細情報、ボタンをクリックすると各料理の数量を追加できます-->
  
  <scroll-view class="item-content" scroll-y='true' scroll-into-view="{{itemScrollId}}" scroll-with-animation='true' style='height:{{asideheight}}px' bindscroll="right" >
    <view wx:for="{{menus}}" wx:for-index="parentIndex" wx:key="id" id="{{item.id}}" >
    <view class="item_title">{{item.name}}</view>
    <view class="{{orderCount.num === 0 ? 'box' : 'box active'}}">
      <view class="item" wx:for="{{item.categroy}}" wx:key="categroyid" data-parentIndex='{{parentIndex}}' data-index='{{index}}'>
        <画像 src="{{item.url}}"></画像>
        <text class="title">{{item.categroy_name}}</text>
        <text class="price">¥ {{item.price}} 元</text>
        <view class="opera">
          <text class="btn_price " bindtap='del' data-id="{{item.id}}" data-parentIndex='{{parentIndex}}' data-index='{{index}}'>-</text>
          <text class="num">{{item.num}}</text>
          <text class="btn_price" bindtap="add" data-id="{{item.id}}" data-parentIndex='{{parentIndex}}' data-index="{{index}}">+</text>
        </ビュー>    
      </ビュー>
    </ビュー>
    
    </ビュー>
</スクロールビュー>

高さの変数を参照していることがわかります。js での実装は次のとおりです。

wx.getSystemInfo({
      成功: 関数 (res) {
        var asideheight = res.windowHeight
        var asideheight1 = 0;
        that.setData({
          アサイドハイト: アサイドハイト、
          横幅1:横幅+80
        })
      },
      失敗: () => { console.log("ディスプレイの高さを取得できません。ネットワーク接続を確認してください") }
    });

そして関数の始めに左右の小さなグリッドの高さを設定します

定数RIGHT_BAR_HEIGHT = 41;
// 右側の各サブクラスの高さ(固定)
定数RIGHT_ITEM_HEIGHT = 122;
// 左側の各クラスの高さ(固定)
定数LEFT_ITEM_HEIGHT = 41;

左側の実装は比較的簡単です。currentLeftSelected と itemScrollId の 2 つのデータが設定されます。これら 2 つに、現在クリックされているクラスの ID 値が割り当てられます。前者は、クリックすると左側のクラスが選択された状態を実現し、右側の値は itemScrollId に割り当てられます。次に、この値が前面のスクロール ビューの右半分の scroll-into-view に割り当てられ、左側がクリックされると右側がジャンプするようにします。

タブメニュー: 関数 (e) {
    this.setData({
      現在の左選択: e.target.id || e.target.dataset.id、
      アイテムスクロールID: e.target.id || e.target.dataset.id 
    });
    コンソールログ(e);
  },

右半分のアイデアは、右側の各皿の高さを上から計算して配列に保存し、スライド時に現在のスライドの高さを取得し、bindscroll でバインドされた関数で比較する必要があることです。左側の currentLeftSelected を、高さの範囲に対応するクラスの ID に設定します。

get_eachItemToTop: 関数 () {
    var obj = {};
    var totop = 0;
    var menus_ex = {};
    var that = this;
    menus_ex = that.data.menus;
    コンソールにログ出力します。
    for(let i=1;i<menus_ex.length;i++){
      totop += (RIGHT_BAR_HEIGHT + menus_ex[i - 1].categroy.length * RIGHT_ITEM_HEIGHT);
      obj[menus_ex[i] ? menus_ex[i].id : 'last'] = totop;  
    }
    obj を返します。
  },
  
  右: 関数 (e) {
      (i = 0 とします; i < this.data.menus.length; i++) {
       左 = this.data.eachrightScrollToTop[this.data.menus[i].id] とします。
       右 = this.data.eachrightScrollToTop[this.data.menus[i + 1] ? this.data.menus[i + 1].id : 'last'] とします。
       e.detail.scrollTop < 右 && e.detail.scrollTop >= 左) の場合 {
       this.setData({
         現在の左選択: this.data.menus[i].id,
         アイテムの左から上まで: LEFT_ITEM_HEIGHT * i
            })
          }
        }
   
    },

このようにして、基本的に左右の連動が実現されます。

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

以下もご興味があるかもしれません:
  • WeChatアプレットのスクロールビューが左右の連動を実現
  • WeChatアプレットがメニューの左右連動を実現
  • WeChatアプレットがショッピングページの左右連携を実現
  • WeChatアプレットは左右連動の実戦記録を実現
  • WeChatアプレットのスクロールビューが左右連動効果を実現

<<:  MySQL の全体的なアーキテクチャの紹介

>>:  MySQLが間違ったインデックスを選択する理由と解決策

推薦する

Vueバスの簡単な使い方

Vueバスの簡単な使い方シナリオの説明:コンポーネント A にはコンポーネント B と C が含まれ...

Linux で boost.python を使用して C++ 動的ライブラリを呼び出す方法

序文最近、C++ 動的ライブラリをテストするためにロボット フレームワークを使い始めました。ロボット...

ファイルアップロードスタイルの詳細を実装するjs

目次1. 概要2. オブジェクト作成のパラメータ3. 監視例4. 使用方法5. ソースコード1. 概...

MySQL alter ignore構文の詳細な説明

今日仕事中に、ビジネス側から次のような質問をされました。テーブルがあり、一意のフィールドを追加する必...

VueのVuexの4つの補助機能について

目次1. 補助機能2. 例1. mapState と mapGetters 2. mapMutati...

uniapp は日付と時刻の選択機能を実装します

この記事の例では、日付と時刻の選択を実装するための uniapp の具体的なコードを参考までに共有し...

JavaScript の基礎: 即時実行関数

目次関数フォーマットを即時実行関数を即座に実行する他の方法 – 式即時実行される関数はパラメータを取...

Vue はファジークエリを実装します - MySQL データベースデータ

目次1. 需要2. 実装3. 結果1. 需要入力ボックスにデータを入力し、入力結果に基づいてデータベ...

Reactでのイベントバインディングの実装は3つの方法を指しています

1. 矢印関数1. 矢印関数自体はこれをバインドしないという事実を利用します。 2. render(...

MySQL データベースの最適化: テーブルとデータベースのシャーディング操作の詳細な説明

この記事では、例を使用して、MySQL データベースの最適化のためのテーブルおよびデータベース シャ...

SQL GROUP BYの詳細な説明と簡単な例

GROUP BY ステートメントは、Aggregate 関数と組み合わせて使用​​され、1 つ以上の...

Vue+Elementバックグラウンド管理フレームワークの統合実践

目次Vue+ElementUI バックグラウンド管理フレームワークでは、ElementUI とは何で...

Unix/Linux システムにおける nobody ユーザーと nologin の詳細な紹介

Unix/Linux システムの nobody ユーザーとは何ですか? 1. Windows システ...

JavaScript フロー制御 (分岐)

目次1. プロセス制御2. シーケンシャルプロセス制御3. 分岐フロー制御if文1. 支店構造2. ...