WeChatアプレットのスワイパードットのドットをスライダーに変更する方法

WeChatアプレットのスワイパードットのドットをスライダーに変更する方法

この記事では、主に既存のコンポーネント(WeChatアプレットのスワイパーやh5でよく使われるswiper.jsなど)をベースにスライダースタイルのインジケーターパネルを実装する方法を紹介します。デモはミニプログラムに基づいていますが、ロジックは普遍的です。

背景

最近、新しいミニプログラムに取り組んでいます。ホームページにスワイパーモジュールがあります。デザインクラスメイトの素晴らしい仕事のおかげで😭、退屈な開発に喜びを見出すことができました。スワイパーのインジケーターパネルのドットがスライダーに変更されました。正直、ドットを一列に並べてクリックするだけでいいんじゃないでしょうか?ハハハハ。でも私は彼が大好きよ〜

ターゲット効果

全体的にシンプルです。主に下部のスライダーに若干の作業が必要です。要件を整理した後、実装する必要がある機能ポイントは次のとおりです。

  • スライダーには自然なスライド効果が必要です。
  • スライダーはスライド方向にスライドする必要があります。

アイデア

整理後の実施計画は次のようになります。

  • スワイパーのコンテンツをスライドするときに、現在のページの curPage を取得できます (通常、コンポーネントは現在のページを提供します)。その後、スライドが完了したら、前のページの prePage を設定できます。この prePage は、実際には今回の curPage です。このページを通じて、スライダーの開始位置と終了位置を取得できます。
  • スライドは変換によって実現できます。
  • transform が使用されるため、アプレットはカスタム スタイルをサポートする必要がありますが、現在、アプレットは this.animate メソッドのセットを提供しています。

成し遂げる

スワイパーは変更を聞きます

まず、スワイパーの変更イベントを使用する必要があります。コードは次のとおりです。

<スワイパー
 クラス="ホットコンテンツスワイパー"
 インジケータードット="{{indicatorDots}}"
 vertical="{{vertical}}"
 バインドチェンジ="スライダーハンドラー">
 <block wx:for="{{popular_zone_list}}" wx:key="*this">
   <スワイパーアイテム>
     <view class="hot-list">
       これはスワイパー{{index}}です
     </ビュー>
   </スワイパーアイテム>
 </ブロック>
</スワイパー>

カスタムドットモジュール

次に、スライダー領域であるドットの DOM をカスタマイズする必要があります。コードは次のとおりです。

<ビュークラス="dot">
 <view class="dot-bar" style="width: {{dotBarWidth}}rpx"></view>
</ビュー>

これには、スライダーに初期サイズを指定する必要があります。そうしないと、スライド後の幅の変化にジッター (dotBarWidth) が発生します。

スライダーのサイズは、スライドの長さとスワイパー項目の数に基づいて計算されます。この方法で幅を取得したら、スライダー幅の倍数でオフセットするだけです。

ドット幅を100とします。
dotBarWidth = Math.round(dotWidth/popular_zone_list.length); とします。

変更イベントのロジック

テンプレートが記述されたので、変更イベントの記述を始めましょう。コードは次のとおりです。

スライダーハンドラ({詳細}) {
 curPage = detail.current; とします。
 自分自身 = this とします。
 this.animate('.dot-bar', [
   {
     translateX: self.prePage * 100 + '%',
     変換元: 'center'、
   },
   {
     translateX: curPage*100 + '%',
     変換元: 'center'、
   },
 ], 100, function () { // アニメーションコールバック self.prePage = curPage;
   self.clearAnimation('.container', {
     translateX: 真、
     変換元: true
   });
 });
},
// ミニプログラムでない場合は、this.animate を動的にバインドされたスタイルまたはその他の DOM 操作に置き換えることができます。

この機能が実装された今、この機能は非常にシンプルでかなり優れていると思いませんか?😒

最後に

正直に言うと、実装の過程で、当時の私の状態と関係があるかもしれないが、いくつか愚かなことをしてしまった。スライダーが左にスライドされたのか、右にスライドされたのかを判断することに集中しすぎて、遠回りをしてしまったのだ。しかし、結果に基づいて、開始位置と終了位置を計算するだけでよく、左スワイプの開始位置は終了位置よりも大きくする必要があることがわかりました。上記のスキームが参考になれば幸いです〜🎉

WeChatミニプログラムのスワイパードットのドットをスライダーに変更する方法についての記事はこれで終わりです。WeChatミニプログラムのスワイパードットのドットをスライダーに変更する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COMで以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • WeChatアプレットがフォーム検証を実装
  • WeChat アプレット スライダー機能を自分で記述するための 12 行の js コード (推奨)
  • WeChatアプレットスライダー検証方法

<<:  Mysql SSHトンネル接続を使用するための基本的な手順

>>:  Dockerデータ管理とネットワーク通信の使用

推薦する

背景画像のみを180度回転させるCSS3実装例

1. 心の旅最近コックピットを書いていたときに、背景画像を単純に特定の角度に回転させるという問題につ...

jsはブラウザを閉じるときにアカウントのログアウトを処理します

目次古典的なアプローチ質問その他の質問注意が必要な問題古典的なアプローチご存知のとおり、アカウントの...

JavaScript で大きなファイルの並列ダウンロードを実装する方法

目次1. HTTP範囲リクエスト1.1 範囲構文2. 大きなファイルをダウンロードする方法2.1 補...

Taobao ストアでズームインする効果は、スライドショーを使用する原理に似ています。

今日は、スライドを使用する原理に似た、Taobao のフロントエンドのマウス ズーム効果に慣れました...

CSS3のボックスサイズプロパティの興味深いボックスモデルについての簡単な説明

誰もがボックス モデルの構成を、内側から外側まで、コンテンツ、パディング、境界線、マージンについて知...

計算機機能を実装するミニプログラム

この記事の例では、計算機機能を実装するためのミニプログラムの具体的なコードを参考までに共有しています...

HTML の水平および垂直中央揃えの問題の概要

最近、センタリングの問題に数多く遭遇したので、後で簡単に見つけられるように、時間をかけてそれらを要約...

Vue 仮想リストの実例

目次序文デザイン成し遂げるまとめ序文最近は、いつも延々とスワイプしています。 Weibo をチェック...

MySql8 WITH RECURSIVE 再帰クエリ親子コレクションメソッド

背景コメントに似た機能を開発する場合は、必要に応じてすべてのコメントのサブセットをクエリする必要があ...

Linux インデックスノード inode の詳細な説明

1. inodeの紹介inode を理解するには、まずファイル ストレージから始める必要があります。...

Vueはキャンバスを使用して画像圧縮アップロードを実現します

この記事では、キャンバスを使用して画像圧縮アップロードを実現するVueの具体的なコードを参考までに共...

MySQL データベース インデックスの面接の質問 (基本的なプログラマー スキル)

目次導入インデックスの原則1. データページ2. ページディレクトリ3. インデックス原則分析要約す...

Visual Studio Code + Reactをベースに開発環境を構築するプロセス

開発環境ウィンドウ開発ツール Visual Studio Codeノードのインストールとnpm Wi...

mysql の追加、削除、変更、クエリの基本ステートメント

文法以下は、MySQL テーブルにデータを挿入するための INSERT INTO コマンドの一般的な...

1 つの記事で Node.js の非同期プログラミングを学ぶ

目次 はじめに 同期 非同期とブロッキング JavaScript のノンブロッキング コールバック ...