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

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

大画面のデジタル スクロール効果は、最近の作業における大画面 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のインストール手順

推薦する

Vue 開発ガイドの重要な知識の要約

目次概要0. JavaScriptとWeb開発の基礎1. Vueの基本概念Vue コア機能コンポーネ...

vue の v-for ディレクティブはリストのレンダリングを完了します

目次1. リストの走査2. Vueにおけるキーの役割3. リストフィルタリングこの記事では、Vue ...

さまざまな MySQL テーブルソートルールのエラーの分析

MySQL が複数のテーブルを結合するときに、次のエラーが報告されます: [Err]1267 – 操...

Linux での GDB 入門チュートリアル

序文gdb は Linux で非常に便利なデバッグ ツールです。コマンドライン モードのデバッグ ツ...

JavaScript parseInt() と Number() の違いのケーススタディ

学習目標: parseInt() と Number() という 2 つの関数は、文字列をデータ型に変...

Docker を使用して MySQL 5.7 および 8.0 マスター スレーブ クラスターをデプロイする方法

> MySQL 5.7 クラスタ マスターとスレーブをデプロイする (テストのみ)イメージバー...

MySQL 4 の一般的なマスタースレーブレプリケーションアーキテクチャ

目次1つのマスターと複数のスレーブのレプリケーションアーキテクチャマルチレベルレプリケーションアーキ...

CocosCreatorでゲームコントローラーを使用する方法

目次1. シーンレイアウト2. ハンドルリスナーを追加する1. イベントの変更を監視する2. 座標設...

nginx を介して方向プロキシを実装するプロセスの図

この記事は主に、nginx を介して方向プロキシを実装するプロセスを紹介します。この記事のサンプル ...

MySQL 8.0.19 では、間違ったパスワードを 3 回入力するとアカウントがロックされるようになりました (例)

MySQL 8.0.19 では、間違ったパスワードを 3 回入力するとアカウントがロックされるよう...

Linux 時間サブシステムの時間表現例の詳細な説明

序文Linux カーネルでは、元のコードとの互換性を保つため、または特定の仕様に準拠するため、また現...

MySQLはカバーインデックスを使用してテーブルリターンを回避し、クエリを最適化します。

序文カバーリング インデックスについて説明する前に、まずそのデータ構造である B+ ツリーを理解する...

MySQLスローログに関する知識のまとめ

目次1. スローログの紹介2. スローログの練習1. スローログの紹介スロー ログの正式名称はスロー...

カスタム変数を使用した MySQL クエリの最適化

目次並べ替えクエリの最適化変更されたばかりのデータ行を繰り返し取得しないようにする遅延ロードされた結...

グリッドはページのレイアウトプランです

<br /> 英語原文: http://desktoppub.about.com/od/...