WeChatアプレットはスクロールビューを使用して左右のリンクを実現します。参考までに、具体的な内容は次のとおりです。 左側のボタンをクリックすると、右側が指定した位置にジャンプします
右にスクロールすると、左のメニューが対応する位置にジャンプします
実装効果図: メインコードは次のとおりです。 インデックス.wxml <ビュークラス="コンテナ"> <view class="category-left"> <スクロールビュー scroll-y="true" スタイル="height:100%"> <block wx:for="{{category}}" wx:key="id"> <view class="catgegory-item {{activeId === item.id?'active-item':''}}" data-id="{{item.id}}" bindtap="clickItem">{{item.name}}</view> </ブロック> </スクロールビュー> </ビュー> <view class="category-right"> <scroll-view scroll-y="true" style="height:100%" scroll-into-view="{{toView}}" scroll-with-animation="ture" bindscroll="scroll"> <view class="categoty-detail"> <block wx:for="{{content}}" wx:key="id"> <view class="catefory-main"> <view class="category-title" id="{{item.id}}">{{item.title}}</view> <view class="category-content"> <view class="content-item" wx:for="{{item.options}}" wx:for-item="i" wx:key="id"> <画像 src="{{i.src}}"></画像> <テキスト>{{i.テキスト}}</テキスト> </ビュー> </ビュー> </ビュー> </ブロック> </ビュー> </スクロールビュー> </ビュー> </ビュー> インデックス //index.js //アプリケーションインスタンスを取得する const app = getApp() ページ({ データ: { 表示: 'a1', アクティブID: 'a1', カテゴリ: {名前: '新製品'、ID: 'a1'}, { 名前: 'クラウドファンディング', id: 'a2' }, { 名前: 'Xiaomi 携帯電話'、ID: 'a3' }, { 名前: 'redmi 電話'、 ID: 'a4' }, { 名前: 'ブラックシャークゲーム'、 ID: 'a5' }, { name: "携帯電話アクセサリー", id: 'a6' }, { 名前: 'TV', ID: 'a7'}, { 名前: 'コンピュータ'、 ID: 'a8' }, ]、 コンテンツ: [ { タイトル: '- 新製品 -', オプション: [ { src: '../../image/redmi.png',id: '001',text: 'redmi8'}, { src: '../../image/redmi.png', id: '002', テキスト: 'redmi8A' }, { src: '../../image/redmi.png', id: '003', テキスト: 'Xiaomi 9pro 5G'}, { src: '../../image/redmi.png', id: '004', テキスト: 'redmi8'}, { src: '../../image/redmi.png', id: '005', テキスト: 'redmi8' } ]、 id: 'a1' }, { タイトル: 「- クラウドファンディング -」 オプション: [ { src: '../../image/zhongchou.png', id: '006', テキスト: 'redmi8' }, { src: '../../image/zhongchou.png', id: '007' ,text: 'redmi8'}, { src: '../../image/zhongchou.png', id: '008', テキスト: 'redmi8' }, { src: '../../image/zhongchou.png', id: '009',text: 'redmi8' } ]、 id: 'a2' }, { タイトル: '- Xiaomi 携帯電話 -', オプション: [ { src: '../../image/xiaomi.png', id: '006', テキスト: 'redmi8' }, { src: '../../image/xiaomi.png', id: '007', テキスト: 'redmi8' }, { src: '../../image/xiaomi.png', id: '008', テキスト: 'redmi8' }, { src: '../../image/xiaomi.png', id: '009', テキスト: 'redmi8' } ]、 id: 'a3' }, { タイトル: '- redmi 携帯電話 -', オプション: [ { src: '../../image/hongmi.png', id: '006', テキスト: 'redmi8' }, { src: '../../image/hongmi.png', id: '007', テキスト: 'redmi8' }, { src: '../../image/hongmi.png', id: '008', テキスト: 'redmi8' }, { src: '../../image/hongmi.png', id: '009', テキスト: 'redmi8' } ]、 id: 'a4' } ]、 }, //イベント処理関数 onLoad: function () { this.setData({ 表示: 'a1', 高さArr: [] }) クエリを wx.createSelectorQuery() に設定します。 クエリ.selectAll('.catefory-main').boundingClientRect((rect)=> { rect.forEach(ele => { this.calculateHeight(ele.height); }) }).exec(); }, クリックアイテム(e) { this.setData({ アクティブID: e.currentTarget.dataset.id、 toView: e.currentTarget.dataset.id }) }, スクロール(e) { scrollHeight を e.detail.scrollTop とします。 index = this.calculateIndex(this.data.heightArr,scrollHeight); とします。 this.setData({ アクティブID: 'a'+インデックス }) }, // スクロール間隔を計算する calculateHeight(height) { if(!this.data.heightArr.length) { this.data.heightArr.push(高さ) }それ以外 { this.data.heightArr.forEach(ele => { 高さ += 要素 }) this.data.heightArr.push(高さ); } }, // 左側で選択された下付き文字を計算する calculateIndex(arr, scrollHeight) { インデックスを '' とします。 for(let i =0;i<arr.length;i++) { スクロール高さ >= 0 && スクロール高さ < arr[0]){ インデックス = 0; }それ以外の場合(スクロール高さ >= arr[i-1] && スクロール高さ < arr[i]){ インデックス = i; } } インデックス+1を返します。 } }) インデックス.wxss /**index.wxss**/ 。容器 { パディング: 0; 幅:100%; 高さ:100vh; ディスプレイ: フレックス; flex-direction: 行; align-items:flex-start; } .category-left { 高さ: 100%; 幅: 22%; パディング: 0 20rpx; ボックスのサイズ: 境界線ボックス; 右境界線: 1px 実線 #efefef; } .カテゴリ項目{ パディング: 20rpx 0; フォントサイズ: 30rpx; テキスト配置: 中央; } .アクティブアイテム{ 色: オレンジ; } .カテゴリ右{ フレックス:1; 高さ: 100%; } .カテゴリコンテンツ{ 表示: グリッド; グリッドテンプレート列: repeat(auto-fill, 190rpx); } .カテゴリータイトル{ テキスト配置: 中央; } .コンテンツアイテム{ ディスプレイ: フレックス; flex-direction: 列; パディング: 20rpx; テキスト配置: 中央; フォントサイズ: 30rpx; } .コンテンツアイテム画像{ 幅: 120rpx; 高さ: 120rpx; } 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Windows Apache 環境で SSL 証明書を展開して、Web サイトを https 対応にする方法
>>: MySQLのファジークエリのような遅い速度を解決する方法
1 Linuxディストリビューションのバージョンを確認する[root@typecodes ~]# c...
mysql ストアド プロシージャの概念:特定のタスク (クエリと更新) を実行できる、データベース...
Nginx 502 Bad Gateway エラーに何度か遭遇しました。ここでメモしておこうと思いま...
目次1. jsonp クロスドメイン2. document.domain + iframe クロスド...
目次MYSQL メタデータ ロック (MDL ロック) 学習理論とロック タイプ テスト1. 予備的...
この記事では、音楽プレーヤーを実装するためのVue.jsの具体的なコードを参考までに共有します。具体...
CSSの背景プロパティの値背景色背景画像背景繰り返し背景位置背景添付複合プロパティ: 背景: ba...
Vue を使用してプロジェクトを開発する過程で、次のような問題によく遭遇します。Vue のデータでオ...
実際、これは非常に簡単です。imgにaタグを追加し、 <a href='tencent...
システム環境: centos7.4 1. データベースがインストールされているかどうかを確認します。...
目次シナリオ要件glibc バージョンglibcのインストールglibc ソフトリンクシナリオ要件C...
この記事では、jsネイティブカルーセルプラグインの具体的なコードを参考までに共有します。具体的な内容...
最近、コンピューターの電源を入れたところ、Geek Academy が新規ユーザーに 1 か月の無料...
目次再帰とは何ですか?また、どのように機能しますか? 1. 合計(1)デジタル加算(2)配列の和2....
失敗の原因今日、カルーセルを書いていたときに、overflow;hidden; が失敗する可能性があ...