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

推薦する

MySQL の null 可能フィールドは NULL に設定する必要がありますか、それとも NOT NULL に設定する必要がありますか?

MySQL を頻繁に使用する人は、次のような状況に遭遇する可能性があります。 1. フィールド タ...

Linux でのソース パッケージ インストールのサービス管理

目次1. ソースパッケージサービスの起動管理2. ソースパッケージサービスのセルフスタート管理3. ...

Python で pymysql モジュールを使用して MySQL データベースに接続する

pymysqlをインストールするpip install pymysql 2|0pymysqlの使用2...

Linux の一般的なコマンドとショートカット キーの紹介

目次1 システムの紹介2 システムショートカット3 一般的なシステムコマンド1 システムの紹介 1....

リンクAの意味論、書き方、ベストプラクティス

リンク A のセマンティクス、ライティング スタイル、およびベスト プラクティス。私は JavaEy...

スライドによるページめくり効果とクリックイベント問題をモバイル端末上で実装する

前述のこの記事はとても短いです〜主な目的は、モバイル端末上のクリックと js イベントのメカニズムに...

DockerでLinuxシェルコマンドを実行する方法

Docker でシェル コマンドを実行するには、コマンドの前に sh -c を追加する必要があります...

JavaScript で簡単なモグラ叩きゲームを実装する

この記事では、モグラ叩きゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

mysql zipファイルのインストールチュートリアル

この記事では、参考までにMySQL zipファイルをインストールする具体的な方法を紹介します。具体的...

VMware Workstation Pro が Win10 アップデートにより開けなくなる問題の解決方法

今夜の夕食後にノートパソコンの電源を入れたところ、問題が発生しました。通常、コンピューターがスリープ...

Dockerコンテナ内にkibanaトークナイザーをインストールする方法

ステップ: 1. 仮想マシンディレクトリに新しいdocker-compose.ymlファイルを作成し...

Facebookの情報アーキテクチャの分析

<br />原文: http://uicom.net/blog/?p=762 Faceb...

純粋な CSS でフォ​​ーム検証を実装するためのサンプル コード

日常業務において、フォームの検証は非常に一般的な設計要件です。ログイン ボックスや登録ボックス、アン...

JavaScriptタイマーの詳細な説明

目次簡単な紹介間隔の設定説明するパラメータ戻り値使用法タイムアウトの設定説明するパラメータ使用法:タ...

Docker を使用して MySQL および Redis サービスをデプロイする方法

目次Dockerを使用してMySQLサービスをデプロイする方法DockerでRedisサービスをデプ...