この記事では、WeChatアプレットの左右連動を実現するための具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。 最近、WeChatアプレットを使用して、学校のコースシステム分析プロジェクトを構築しました。注文プロジェクトを選択した後、ホームページを実装する際に、マクドナルドの注文と同じように、左側にカテゴリ、右側に料理を表示したいと考えました。左側のカテゴリをクリックすると、右側が対応するカテゴリにスクロールし、右側の料理をスクロールすると、現在左側にスクロールしている料理のカテゴリも強調表示されます。それではまず結果をお見せしましょう! この機能は小さいですが、スクロールビューの原理を理解すれば非常に便利になると思います。 まず、WeChatミニプログラムの公式ドキュメントを確認してください:スクロールビュー ここでは、私自身の理解に基づいて、私が使用しているプロパティを紹介します。
<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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: MySQLが間違ったインデックスを選択する理由と解決策
Vueバスの簡単な使い方シナリオの説明:コンポーネント A にはコンポーネント B と C が含まれ...
序文最近、C++ 動的ライブラリをテストするためにロボット フレームワークを使い始めました。ロボット...
目次1. 概要2. オブジェクト作成のパラメータ3. 監視例4. 使用方法5. ソースコード1. 概...
1. フォーム<form id="" name="" ...
今日仕事中に、ビジネス側から次のような質問をされました。テーブルがあり、一意のフィールドを追加する必...
目次1. 補助機能2. 例1. mapState と mapGetters 2. mapMutati...
この記事の例では、日付と時刻の選択を実装するための uniapp の具体的なコードを参考までに共有し...
目次関数フォーマットを即時実行関数を即座に実行する他の方法 – 式即時実行される関数はパラメータを取...
目次1. 需要2. 実装3. 結果1. 需要入力ボックスにデータを入力し、入力結果に基づいてデータベ...
1. 矢印関数1. 矢印関数自体はこれをバインドしないという事実を利用します。 2. render(...
この記事では、例を使用して、MySQL データベースの最適化のためのテーブルおよびデータベース シャ...
GROUP BY ステートメントは、Aggregate 関数と組み合わせて使用され、1 つ以上の...
目次Vue+ElementUI バックグラウンド管理フレームワークでは、ElementUI とは何で...
Unix/Linux システムの nobody ユーザーとは何ですか? 1. Windows システ...
目次1. プロセス制御2. シーケンシャルプロセス制御3. 分岐フロー制御if文1. 支店構造2. ...