この記事では、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が間違ったインデックスを選択する理由と解決策
包括的なドキュメントgithubアドレスhttps://github.com/RocketChat/...
1. DockerUIの紹介DockerUI は Docker API をベースとしており、Dock...
目次序文基本的な使い方文法エラー処理プロミスチェーン呼び出し非同期と待機よく使われる方法1. Pro...
検証環境: [root@~~/]# rpm -qa | grep mysql mysql-5.6.2...
1. どの 3 つの形式ですか?それぞれ、gif、jpg、png です。画像ファイルを最適化すること...
ヒント: MySQL では、ユーザーの作成と削除が頻繁に必要になります。ユーザーを作成するときは、通...
遅延読み込みを使用しない 'vue' から Vue をインポートします。 '...
目次バイナリ検索木 (BST) とは何ですか?バイナリツリーの基本的な走査(インオーダー、ポストオー...
この記事では、MySQL 8.0のインストールと設定方法を参考までに紹介します。具体的な内容は以下の...
まず、メモリ解放の例を見てみましょう。 <スクリプト言語="JavaScript&q...
この記事では、参考のために、ミニプログラムでカスタムのマルチレベル単一選択および複数選択機能を実装す...
この記事の例では、ログイン機能を実現するためのvue+springbootの具体的なコードを参考まで...
この記事では、MySQL 8.0.15のインストールと設定方法を参考までに紹介します。具体的な内容は...
目次必要:機能ポイントレンダリング実装のアイデア具体的なコード(react\taro3.0)特定のコ...
本日、開発中に、顧客からページをキャッシュしないように要求される方法に遭遇しました。調べたところ、ペ...