回転灯効果を実現するWeChatアプレットの例

回転灯効果を実現するWeChatアプレットの例

序文

日常の開発では、テキストの水平スクロール効果(一般にカルーセルと呼ばれる)によく遭遇します。これはプロジェクトでもよく使用される機能でもあります。ウェブフロントエンドでは非常に一般的です。今日はミニプログラムの実装方法を紹介します。1つはCSSスタイルを使用する方法、もう1つはミニプログラムのアニメーション機能を使用する方法です。

@keyframes 実装

@keyframes ルールを使用すると非常に便利です。必要なのは CSS スタイルだけで、使い方は Web と同じです。

<view class="marquee">
 <text>これはスクロールテキストです</text>
</ビュー>

スタイル クラス from to は、アニメーションの開始と終了を定義するために使用されます。ここでは、画面の右端から左にスライドし、左端に触れると新しいアニメーション ラウンドが再び開始されます。

@keyframes 翻訳 {
 から {
 margin-left: 750rpx; //画面の右端から開始}

 に {
 左マージン: 0px;
 }
}

.マーキー{
 空白: ラップなし;
 animation-name: translation; //アニメーションの名前を定義します animation-duration: 3s;
 アニメーションの反復回数: 無限;
 アニメーションタイミング関数: linear;
}

テキストが左にスライドした後、完全に消えるまで左にスライドし続け、その後アニメーションが右端から開始されるという効果を望む場合は、テキストの長さを追加する必要があります。ここでは、テキストの長さを計算し、SelectorQuery オブジェクト インスタンスを使用してテキスト ノードの幅を取得する必要があります。これはページが初めてレンダリングされる onReady 時に実行され、テキスト ノード情報に対応するオブジェクトが照会され、テキストの長さが取得されます。上記のマーキークラス名はここで定義されます。

onReady: 関数 () {
 クエリを wx.createSelectorQuery() に設定します。
 クエリを選択します('.marquee').boundingClientRect();
 クエリ.exec((res) => {
  (res[0])の場合{
  this.setData({
   マーキー幅: res[0].width
  })
  }
 })
}

次に、CSS var() 関数を使用して、定義されたプロパティ値を終了位置に挿入し、画面全体とそのテキストの長さだけ実行されるようにします。 「--marqueeWidth」というプロパティを定義し、var() 関数を使用して wxss スタイル ファイル内のプロパティを呼び出します。

<view class="marquee" style="--marqueeWidth:-{{marqueeWidth}}px">
 <text>これはスクロールテキストです</text>
</ビュー>

wxss スタイル:
@keyframes 翻訳 {
 から {
 左マージン: 750rpx;
 }

 に {
 左マージン: var(--marqueeWidth);
 }
}

これは CSS を通じて実現されますが、非常に便利ですが、一部のモデルでは適応の問題が発生します。別の方法は、アニメーションを通じて実現することです。

アニメーションの実装

アニメーションはアニメーション インスタンスを通じて完了し、ビューは最初は画面の右側の画面外に配置されます。

<view class="marquee2" bindtransitionend="animationend" animation="{{animationData}}">
	<text>これはスクロールテキストです</text>
</ビュー>

.marquee2{
 表示: インラインブロック;
 空白: ラップなし;
 左マージン: 750rpx;
}

同様に、ここでテキストの長さが計算され、translation プロパティを使用して、テキストが画面全体から外れるまで移動されます。一連のアニメーションが完了したら、bindtransitionend コールバックを呼び出してアニメーションを再度実行します。

this.animation = wx.createAnimation({
 期間: 3000、
 タイミング関数: 'linear'
});
var クエリ = wx.createSelectorQuery();
クエリを選択します('.marquee2').boundingClientRect();
クエリ.exec((res) => {
 (res[0])の場合{
 this.setData({
  marqueeWidth: res[0].width //テキストの長さ}, () => {
  this.doAnim()
 })
 }
})


doAnim: 関数() {
 // 画面の左端までスクロールします。ここでは、一時的に 375 ピクセルの画面幅がハードコードされています。
 this.animation.translate(-this.data.marqueeWidth - 375, 0).step();
 タイムアウトを設定する(() => {
  this.setData({
  アニメーションデータ: this.animation.export(),
  });
 }, 10)
}

最初のアニメーションが終了したら、最初からやり直し、animationend を通じてアニメーションの終了をリッスンしてから、再度実行します。

アニメーション終了() {
 //リセット this.animation.translate(0, 0).step({duration: 0 });
 this.setData({
  アニメーションデータ: this.animation.export()
 }, () => {
  //アニメーションを再開します this.doAnim()
 });
}

このアニメーションをミニプログラム開発ツールで実行すると、アニメーションが突然停止します。携帯電話で試すことができます。

実装も比較的簡単で、カルーセル効果は私たちのプロジェクトでもよく使用するものです。ミニプログラムのアニメーションに慣れる良い機会でもあります。

要約する

WeChatミニプログラムで走馬灯効果を実現する例についての記事はこれで終わりです。ミニプログラムで走馬灯効果に関するより関連性の高いコンテンツについては、123WORDPRESS.COMで過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後も123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • WeChatアプレットはシンプルな計算機を実装する
  • WeChatアプレット+mqtt、esp8266温度と湿度の読み取り実装方法
  • WeChat アプレットのカスタム スクロール ビューのサンプル コード
  • WeChatミニプログラムがシームレスなスクロールを実現
  • マインスイーパゲームを記録するプロセス全体を実現するC言語
  • Java のシンプルなゲーム制作コード
  • js でパズルゲームを実装する
  • C# でシンプルなフライングチェスゲームを実装する
  • Linux 上で C 言語でスネーク ゲームを実装する
  • CocosCreatorでWeChatゲームを作成する方法

<<:  MySQLで全角文字と半角文字を保存する場合の違い

>>:  Linux サービスでファイアウォールを有効にする 2 つの方法

推薦する

ボタンに醜い灰色の枠線が付いています。これを削除するにはどうすればよいですか?

ダイアログをクロージャで使用し、右上隅の向こう側に閉じるボタンがあるダイアログを描画しました。ボタン...

jQueryでフルスクリーンスクロール効果を実現

この記事の例では、フルスクリーンスクロールを実現するためのjQueryの具体的なコードを参考までに共...

docker で PostgreSQL データベースをインストールして永続化する方法

Dockerのインストール手順をスキップする1. postgresqlイメージを取得する docke...

レスポンシブレイアウトの概要(推奨)

レスポンシブレイアウト開発の基礎知識この章は主に以下の部分に分かれています• レスポンシブデザインを...

MySQL 5.7.13 のインストールと設定方法のグラフィック チュートリアル (win10 64 ビット)

この記事では、参考までにMySQL 5.7.13 winx64のインストールと設定方法のグラフィック...

Hyper-V インストール CentOS 8 の問題の分析

CentOS 8 がリリースされてから随分経ちました。Linux 仮想マシンをいじっている人間として...

ウェブサイトにファビコンを追加するためのヒント: URLの前の小さなアイコン

いわゆるファビコンは、Favorites Icon の略で、中国語ではウェブサイトアバターと呼ばれて...

MySQL 5.6 での table_open_cache パラメータの最適化と適切な構成の詳細な説明

1. はじめにtable_cache は非常に重要な MySQL パフォーマンス パラメータであり、...

Vue.js スロットにおけるスコープ付きスロットの使用法の詳細な説明

目次スロットなしVue2.x スロットスロット付き名前付きスロットスロット属性なしスロットの簡単なサ...

Chrome をクラッシュさせる CSS コードの行

一般的な CSS コードでは、UI レイアウトや互換性に関して軽微な問題が発生するだけです。しかし、...

MySQL コマンドラインモードアクセス操作 MySQL データベース操作

使用環境cmd モードで、mysql --version と入力します (インストールされている M...

指定したディレクトリに nginx をインストールする方法の例

会社の要件により、異なる場所にある 2 つの nginx サーバーを同じマシンにインストールする必要...

Docker イメージを削除できません エラー: そのようなイメージはありません: xxxxxx 解決策

序文docker イメージを削除できません。docker docker imagesを確認すると、イ...

Nodejs-cluster モジュールの知識ポイントの概要と使用例

面接官から「NodeJS で複数のプロセスを開始する方法を教えてください」と尋ねられることがあります...

Vueコンポーネント間の通信の非常に詳細な要約

目次序文1. Props、$emit一方向データフロー2. $親、$子3. $attrs、$list...