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が間違ったインデックスを選択する理由と解決策

推薦する

DockerにrockerChatをインストールし、チャットルームを設定するための詳細な手順

包括的なドキュメントgithubアドレスhttps://github.com/RocketChat/...

Docker可視化管理ツールであるDocker UIの使用

1. DockerUIの紹介DockerUI は Docker API をベースとしており、Dock...

Javascript 非同期プログラミング: Promise を本当に理解していますか?

目次序文基本的な使い方文法エラー処理プロミスチェーン呼び出し非同期と待機よく使われる方法1. Pro...

画像ファイルの形式とその選択方法

1. どの 3 つの形式ですか?それぞれ、gif、jpg、png です。画像ファイルを最適化すること...

2 つの MySQL ユーザー削除ステートメント (delete user と drop user) の違い

ヒント: MySQL では、ユーザーの作成と削除が頻繁に必要になります。ユーザーを作成するときは、通...

vue-router を遅延ロードする 3 つの方法のまとめ

遅延読み込みを使用しない 'vue' から Vue をインポートします。 '...

JavaScript 初心者のための二分探索木アルゴリズムのチュートリアル

目次バイナリ検索木 (BST) とは何ですか?バイナリツリーの基本的な走査(インオーダー、ポストオー...

Ubuntu 18.04 MySQL 8.0 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0のインストールと設定方法を参考までに紹介します。具体的な内容は以下の...

JavaScript CollectGarbage 関数の例

まず、メモリ解放の例を見てみましょう。 <スクリプト言語="JavaScript&q...

ミニプログラムは、カスタムのマルチレベル単一選択と複数選択を実装します

この記事では、参考のために、ミニプログラムでカスタムのマルチレベル単一選択および複数選択機能を実装す...

vue+springbootでログイン機能を実現

この記事の例では、ログイン機能を実現するためのvue+springbootの具体的なコードを参考まで...

MySQL 8.0.15 winx64 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.15のインストールと設定方法を参考までに紹介します。具体的な内容は...

WeChatアプレットは固定ヘッダーとリストテーブルコンポーネントを実装します

目次必要:機能ポイントレンダリング実装のアイデア具体的なコード(react\taro3.0)特定のコ...

ページキャッシュを無効にするいくつかの方法を共有する

本日、開発中に、顧客からページをキャッシュしないように要求される方法に遭遇しました。調べたところ、ペ...