このような大画面のデジタルスクロール効果が必要になる場合があります

このような大画面のデジタルスクロール効果が必要になる場合があります

大画面のデジタル スクロール効果は、最近の作業における大画面 UI ダイアグラムから生まれました。UI ダイアグラムには、数字が上にめくれる効果を持たせる必要があるモジュールがあります。以下は、最終的に実現された効果です。

アイデア

この効果を達成する前に、アイデアを整理し、マインドマップを使用して実装手順を次のように設計しましょう。

初期実装

要素を検査したり、デジタル背景画像をダウンロードしたりできます

上記の設計プロセスで、まずはシンプルに実装してみましょう

html構造

<div class="box">
  <p class="box-item">
    <span>1</span>
  </p>
</div>

キーcss

.ボックスアイテム{
  位置: 相対的;
  表示: インラインブロック;
  幅: 54px;
  高さ: 82px;
  /* 背景画像 */
  背景: url(./number-bg.png) 繰り返しなし 中央 中央;
  背景サイズ: 100% 100%;
  フォントサイズ: 62px;
  行の高さ: 82px;
  テキスト配置: 中央;
}

上記のコードを実装すると、その効果は次のようになります。

考えてみましょう: 背景ボックスに数字が表示されたら、次に考えてみましょう。背景ボックスのテキストは0-9の数字である必要があります。上記のhtml構造を崩さずに数字をスクロールさせるにはどうすればよいでしょうか。この時点で、私たちの爪はCSSプロパティであるwriting-modeに届きます。そのプロパティの概要は次のとおりです。

  • horizo​​n-tb: デフォルト値。上から下への水平レイアウトを示します。
  • vertical-lr: 左から右への垂直レイアウトを示します。
  • vertical-rl: 右から左への垂直レイアウトを示します。

リアルタイム効果は以下のとおりです。

上記のインスピレーションに基づいて、次の効果を達成できます。

html変更:

<p class="box-item">
  0123456789
</p>

cssの変更:

.ボックスアイテム{
  表示: インラインブロック;
  幅: 54px;
  高さ: 82px;
  背景: url(./number-bg.png) 繰り返しなし 中央 中央;
  背景サイズ: 100% 100%;
  フォントサイズ: 62px;
  行の高さ: 82px;
  テキスト配置: 中央;

  /* 新しく追加されたコード */
  位置: 相対的;
  書き込みモード: 垂直方向 (左)
  テキストの向き: 直立;
  /* オーバーフロー: 非表示; */
}
/* 新しく追加されたコード */
.box-item スパン {
  位置: 絶対;
  上: 10px;
  左: 50%;
  変換: translateX(-50%);
  文字間隔: 10px;
}

スクロールを計算する

数字を5にしたい場合、どのくらいにすればよいでしょうか?

答えは:下にスクロール-50%

他の数字はどうですか?

特別な実装のおかげで、各桁のローリング距離の一般的な公式が存在します。

変換: `translate(-50%,-${number * 10}%)`

上記の式を使用して、数字を5までロールすると、その効果は次のようになります。

cssの変更:

.box-item スパン {
  位置: 絶対;
  上: 10px;
  左: 50%;
  変換: translate(-50%,-50%);
  文字間隔: 10px;
}

スクロールアニメーションの実装

各数字の特定の転がり距離がわかったら、数字がランダムに転がるように設計してみましょう。

以下は具体的なランダムスクロールjsです

コード:

間隔を設定する(() => {
  数値 = document.getElementById('数値') とします。
  ランダム = getRandomNumber(0,10) とします。
  number.style.transform = `translate(-50%, -${random * 10}%)`
}, 2000)
関数 getRandomNumber (最小値, 最大値) {
  Math.floor(Math.random() * (max - min + 1) + min) を返します。
}

これまでのところ、デジタルスクロール効果は初期段階で実現されています。次のセクションでは、ビジネスニーズに合わせてこの効果を徐々に改善していきます。

完了

前のセクションでは、スクロール効果の初期段階を完了しました。このセクションでは、初期のマインドマップに基づいて、一般的なVueビジネス コンポーネントを設計します。

パラメータの受け入れ

このコンポーネントは数値パラメータのみを受け入れます。これはVueコンポーネントのpropsに設定されます。

小道具: {
  番号: {
    タイプ: 数値、
    デフォルト: 0
  }
}

充填

ビジネス上のニーズにより、最大桁数は8なので、定数を定義します。

定数MAX_LEN = 8

渡された桁数が8未満の場合は、 0で埋める必要があります。 0で埋めた後、金額の形式に変換する必要もあります。

この部分のコードはより一般的なので、スペースを節約するためにコードは表示されません。関連する js コードを自分で記述できます。

レンダリング

上記のパディング文字列を文字配列に分割し、ページ上にレンダリングします。

computeNumber: は文字配列です。例: ['0','0',','0','0','0',','9','1','7']

コードのhtml部分:

<ul>
  <li
    :class="{'数値項目': !isNaN(項目) }"
    v-for="(item,index) in computeNumber"
    :key="インデックス"
  >
    <span v-if="!isNaN(item)">
      <i ref="numberItem">0123456789</i>
    </span>
    <span v-else>{{item}}</span>
  </li>
</ul>

cssパーツコード:

.数値項目 {
  幅: 50px;
  背景: url(./number-bg.png) 繰り返しなし 中央 中央;
  背景サイズ:100% 100%;
  & > スパン {
    位置: 相対的;
    表示: インラインブロック;
    右マージン: 10px;
    幅: 100%;
    高さ: 100%;
    書き込みモード: 垂直方向;
    テキストの向き: 直立;
    オーバーフロー: 非表示;
    & > 私 {
      位置: 絶対;
      上: 0;
      左: 50%;
      変換: translate(-50%,0);
      遷移: transform 0.5s イーズインアウト;
      文字間隔: 10px;
    }
  }
}

ページレンダリング効果:

ランダムな数字の増加、世論調査効果のシミュレーション

ページがレンダリングされたら、数字をスクロールさせてみましょう。次の 2 つのメソッドを設計します。increaseNumber increaseNumberVueライフサイクルのmounted関数で呼び出す必要があります。

//時間指定増加数 increaseNumber() {
  自分 = これ
  this.timer = setInterval(() => {
    自己.newNumber = 自己.newNumber + getRandomNumber(1, 100)
    自己.setNumberTransform()
  }, 3000)
},
// 各桁のオフセットを設定する setNumberTransform () {
  numberItems = this.$refs.numberItem とします。
  numberArr = this.computeNumber.filter(item => !isNaN(item)) とします。
  for (let index = 0; index < numberItems.length; index++) {
    elem = numberItems[index]とします。
    elem.style.transform = `translate(-50%, -${numberArr[index] * 10}%)`
  }
}

最終的な効果:

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  「さらに表示」ボタンによる複数行テキストの切り捨てに関する考察

>>:  MySQL infobrightのインストール手順

推薦する

JavaScript を使用して動的に生成されるテーブルの詳細な説明

*ページを作成する: 2つの入力ボックスとボタン*コードと手順/* 1. 入力行と列の値を取得する2...

CSS フロート(float, clear)の人気の解説と体験談

私はかなり昔に CSS に触れましたが、フローティングについてはいつも混乱していました。私の理解が浅...

Dockerコンテナ内でホストDocker操作を呼び出して実行する

まず、この投稿は Docker 初心者向けです。もちろん、ベテランであれば記事中の分割線以降の操作方...

TypeScript のユニオン型、交差型、型ガード

目次1. ユニオンタイプ2. クロスオーバータイプ3. 型保護3.1 カスタム型保護3.2 保護の種...

SNMP4J サーバー接続タイムアウト問題の解決策

弊社のネットワーク管理センターは管理センター兼サーバーとして機能します!各管理対象デバイスは、TCP...

Python Django アプリケーションを Docker 化する方法

Docker は、開発者やシステム管理者がアプリケーションを軽量コンテナとして構築およびパッケージ化...

MySQL共通インデックスとユニークインデックスの選択に関する詳細な分析

各人が固有の携帯電話番号で登録し、ビジネス コードによって重複する携帯電話番号が 2 つ書き込まれな...

Windows 10 での MySQL 8.0.16 のインストールと設定のチュートリアル

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

HTML の基本概要推奨事項 (段落)

HTML段落段落は <p> タグによって定義されます。例<p>これは段落で...

HTMLデザインパターンの日々の勉強ノート

HTML デザインパターン学習ノート今週は主にHTMLデザインパターンを学びました。学習内容をまとめ...

MySQLシリーズのMariaDBサーバーのインストール

目次チュートリアルシリーズ1. yumパッケージマネージャーを使用してMariaDBサーバーをインス...

win10 mysql 5.6.35 winx64 無料インストールバージョン設定チュートリアル

mysql 5.6.35 winx64無料インストールバージョン構成チュートリアルwin10、具体的...

JavaScript演算子の使用に関するヒントをいくつか共有します

目次1. オプションの連鎖演算子 [? .】 2. 論理的な空の代入 (?? =) 3. 論理和代入...

MySQL 最適化: キャッシュ最適化

何人かのブロガーが私の記事を評価してくれたのは嬉しいです。マークと知り合ってからは、私は彼をフォロー...

SWFObjectを使用すると、HTMLにFlashを挿入する際のブラウザ互換性の問題を完全に解決できます。

一緒に学びましょう1. 伝統的な方法コードをコピーコードは次のとおりです。 <object c...