大画面のデジタル スクロール効果は、最近の作業における大画面 UI ダイアグラムから生まれました。UI ダイアグラムには、数字が上にめくれる効果を持たせる必要があるモジュールがあります。以下は、最終的に実現された効果です。 アイデア この効果を達成する前に、アイデアを整理し、マインドマップを使用して実装手順を次のように設計しましょう。 初期実装 要素を検査したり、デジタル背景画像をダウンロードしたりできます 上記の設計プロセスで、まずはシンプルに実装してみましょう
<div class="box"> <p class="box-item"> <span>1</span> </p> </div> キー .ボックスアイテム{ 位置: 相対的; 表示: インラインブロック; 幅: 54px; 高さ: 82px; /* 背景画像 */ 背景: url(./number-bg.png) 繰り返しなし 中央 中央; 背景サイズ: 100% 100%; フォントサイズ: 62px; 行の高さ: 82px; テキスト配置: 中央; } 上記のコードを実装すると、その効果は次のようになります。 考えてみましょう: 背景ボックスに数字が表示されたら、次に考えてみましょう。背景ボックスのテキストは
リアルタイム効果は以下のとおりです。 上記のインスピレーションに基づいて、次の効果を達成できます。 <p class="box-item"> 0123456789 </p> .ボックスアイテム{ 表示: インラインブロック; 幅: 54px; 高さ: 82px; 背景: url(./number-bg.png) 繰り返しなし 中央 中央; 背景サイズ: 100% 100%; フォントサイズ: 62px; 行の高さ: 82px; テキスト配置: 中央; /* 新しく追加されたコード */ 位置: 相対的; 書き込みモード: 垂直方向 (左) テキストの向き: 直立; /* オーバーフロー: 非表示; */ } /* 新しく追加されたコード */ .box-item スパン { 位置: 絶対; 上: 10px; 左: 50%; 変換: translateX(-50%); 文字間隔: 10px; } スクロールを計算する 数字を 答えは:下にスクロール 他の数字はどうですか? 特別な実装のおかげで、各桁のローリング距離の一般的な公式が存在します。 変換: `translate(-50%,-${number * 10}%)` 上記の式を使用して、数字を .box-item スパン { 位置: 絶対; 上: 10px; 左: 50%; 変換: translate(-50%,-50%); 文字間隔: 10px; } スクロールアニメーションの実装 各数字の特定の転がり距離がわかったら、数字がランダムに転がるように設計してみましょう。 以下は具体的なランダムスクロール コード: 間隔を設定する(() => { 数値 = document.getElementById('数値') とします。 ランダム = getRandomNumber(0,10) とします。 number.style.transform = `translate(-50%, -${random * 10}%)` }, 2000) 関数 getRandomNumber (最小値, 最大値) { Math.floor(Math.random() * (max - min + 1) + min) を返します。 } これまでのところ、デジタルスクロール効果は初期段階で実現されています。次のセクションでは、ビジネスニーズに合わせてこの効果を徐々に改善していきます。 完了 前のセクションでは、スクロール効果の初期段階を完了しました。このセクションでは、初期のマインドマップに基づいて、一般的な パラメータの受け入れ このコンポーネントは数値パラメータのみを受け入れます。これは 小道具: { 番号: { タイプ: 数値、 デフォルト: 0 } } 充填 ビジネス上のニーズにより、最大桁数は 定数MAX_LEN = 8 渡された桁数が この部分のコードはより一般的なので、スペースを節約するためにコードは表示されません。関連する js コードを自分で記述できます。 レンダリング 上記のパディング文字列を文字配列に分割し、ページ上にレンダリングします。 computeNumber: は文字配列です。例: ['0','0',','0','0','0',','9','1','7'] コードの <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> .数値項目 { 幅: 50px; 背景: url(./number-bg.png) 繰り返しなし 中央 中央; 背景サイズ:100% 100%; & > スパン { 位置: 相対的; 表示: インラインブロック; 右マージン: 10px; 幅: 100%; 高さ: 100%; 書き込みモード: 垂直方向; テキストの向き: 直立; オーバーフロー: 非表示; & > 私 { 位置: 絶対; 上: 0; 左: 50%; 変換: translate(-50%,0); 遷移: transform 0.5s イーズインアウト; 文字間隔: 10px; } } } ページレンダリング効果: ランダムな数字の増加、世論調査効果のシミュレーション ページがレンダリングされたら、数字をスクロールさせてみましょう。次の 2 つのメソッドを設計します。increaseNumber //時間指定増加数 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 を応援していただければ幸いです。 |
<<: 「さらに表示」ボタンによる複数行テキストの切り捨てに関する考察
目次コンポーネント通信の概要コンテンツ3つの方法まとめコンポーネントコミュニケーション - 父から息...
この記事では、時間範囲効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します...
1. 基本的な Spring-boot クイックスタート1.1 クイックスタート pom.xml は...
ターミナルやコンソールで作業しているときは、メールを読むなど、もっと重要な作業があるかもしれないので...
目次メイントピック1. UbuntuにDockerをインストールする2. DockerにROS2-F...
Mysqlリモート接続構成を実装する2つの方法会社で働いていると、誰かのコンピュータに保存されている...
休憩中に、眠気を完全に吹き飛ばす電話がかかってきました。「開発者が更新 SQL を書くときに whe...
参考までに、Javascript を使用して広告を閉じる方法に関するケース スタディを示します。詳細...
目次Dockerを使用してMySQLサービスをデプロイする方法DockerでRedisサービスをデプ...
<!--[lte IE 6の場合]> <![endif]--> IE6以下で...
まとめインタビュー中、MySQL インデックスの問題について議論しているときに、B+ ツリー、B ツ...
1. 属性付きHTMLタグXML/HTML コードコンテンツをクリップボードにコピー< htm...
この記事では、参考までに、シンプルなディスククロックを実装するためのjsの具体的なコードを紹介します...
目次物体オブジェクト定義オブジェクトのメンバーを反復処理するJS組み込みオブジェクト数学オブジェクト...
目次1. はじめに2. Viteプロジェクトを作成する1. viteをインストールする2. プロジェ...