アクティビティページでの CSS3 アニメーション効果の適用

アクティビティページでの CSS3 アニメーション効果の適用

背景

あっという間に忙しい一年が終わり、毎年恒例のイベントの時期がやってきます。お祭り気分を演出するには、イベントページでのダイナミックな演出が欠かせません。

まず、効果画像:

1. 全体分析

写真から、主な動的効果は動的なインジケーター矢印と降り注ぐ雪の効果であることがわかります。画像のサイズが3Mを超えているため、サーバーとユーザーエクスペリエンスにとって大惨事となるため、怠けてこの効果画像を直接背景として使用することはお勧めできません。アクティブなページであるため、訪問回数は当然避けられません。同時実行性が高い状況では、サーバーが圧倒されるのは当然であり、ユーザーのトラフィックとユーザーが応答を待つ時間にも申し訳なく思います。完璧を目指す人として、プログラムで実現できる効果には断固としてGIFを使用せず、できるだけ多くのリソースを節約することを原則としています。

2. ダイナミックインジケーター矢印

プログラム実装の観点から、まず最初に行う必要があるのは、変更点をカプセル化し、変更を定数から分離することです。図の 5 つのレベルは、一般的に同じです。各レベルにはベースと矢印があります。レベルがカプセル化された後、データを使用して各レベルの位置を駆動し、矢印で方向を示します。

関連データは次のとおりです。

[
    {
        状態: 0,
        左: 9,
        トップ: -2,
        方向: { rotateZ: 290、色: "#d26754" }
    },
    {
        状態: 0,
        左: 66,
        トップ: 10,
        方向: { rotateZ: 24、色: "#f58351" }
    },
    {
        状態: 0,
        左: 18、
        トップ: 20,
        方向: { rotateZ: 30、色: "#f78351" }
    },
    {
        状態: 0,
        左: -2、
        上: 36.5、
        方向: { rotateZ: 295、色: "#e19d47" }
    },
    {
        状態: 0,
        左: 52、
        上: 49.5、
        方向: { rotateZ: 293、色: "#e19d47" }
    }
]

1. 動的効果分析

レンダリングを注意深く観察すると、全体的な効果は 3D パースペクティブであることがわかります。パースペクティブは、垂直に見下ろすのではなく、45 度の角度で見下ろすものです。最初に思い浮かぶのは、強力な CSS3 3D 回転です。矢印効果は、ランニング トラック + 矢印ランニング効果に分けられます。この方法では、トラックの 3D パースペクティブを作成し、外側のトラックに沿って矢印の動きを繰り返すだけです。

2. 具体的な実施

<div class="item" flex="main:center cross:center"
:style="{left:item.left+'%',top:item.top+'%'}"
v-for="item in items" @click="showReceive(item)">
    <div class="bottom" flex="main:center cross:center">
        <div class="direction" flex="dir:top" :style="{transform:`rotateX(34deg) rotateY(0deg) rotateZ(${item.direction.rotateZ}deg)`}">
            <div class="half"></div>
            <div class="ハーフトラック">
                <div class="矢印"
                :style="{transform: `rotate(${item.direction.rotate}deg`,
                右:`${item.direction.right}px`,
                'border-color': `${item.direction.color} 透明 透明`
                }"></div>
            </div>
        </div>
    </div>
</div>
  。方向 {
    位置: 絶対;
    幅: 20px;
    高さ: 260%;
    。半分 {
      フレックス: 1;
    }
    。追跡 {
      位置: 相対的;
      //上マージン: 90px;
      上マージン: 2em;
      .矢印{
        位置: 絶対;
        幅: 0;
        高さ: 0;
        境界線: 10px 実線;
        border-color: 赤 透明 透明;
        アニメーション: dynamicArrow 3000ms 無限線形;
      }
    }
  }
/* // 動的矢印*/
@keyframes ダイナミック矢印 {
  0% {
    不透明度: 1;
    下部: 100%;
  }
  70% {
    不透明度: 1;
  }
  90% {
    不透明度: 0.1;
    下: -20px;
  }
  100% {
    不透明度: 0;
  }
}

3. 空一面に雪が降る

効果画像を注意深く観察すると、雪片の大きさ、移動速度、距離、色の明暗などが異なります。雪片の動きの全体的な方向は上から下、左から右で、非常に均等に降り注いでいます。

1. 実装のアイデア

雪片が舞うトラック + 雪片が舞う効果。トラックを一定の角度に傾けてから画面全体をタイル状に並べ、データを使用してトラック内の雪片の位置、レベル、サイズ、実行遅延、実行速度、各トラックの色深度を制御します。効果をより直感的に確認するには、トラックの背景色を以下のように設定します。

2. 具体的な実施

<div class="雪">
  <div class="s_track" :style="{transform:`rotate(45deg) translate(${snow.deviation}px,${-snow.deviation}px)`,'z-index':snow.zindex}" v-for="雪の中の雪">
      <img class="snow" src="/static/original/img/DoubleDenierActivies/cbp_snow.png" :style="{opacity:snow.opacity,animation: `dynamicSnow ${snow.speed}ms ${snow.delay}ms infinite linear`,width:snow.size*1.14+'px',height:snow.size+'px'}"/>
  </div>
</div>
.s_トラック{
  位置: 絶対;
  幅: 220%;
  // 高さ: 10px;
  上: -10px;
  変換の原点: 0 0 0;
  。雪 {
    可視性: 非表示;
    位置: 絶対;
    zインデックス: 2;
    アニメーション: dynamicSnow 2000ms 無限線形;
  }
}
/* //スノーフレーク*/
@keyframes ダイナミックスノー {
  0% {
    可視性: 可視;
    上: 0;
    左: 0;
    変換: 回転(0);
  }
  100% {
    可視性: 可視;
    上: 100%;
    左: 100%;
    変換: 回転(360度);
  }
}
雪 = [] とします。
  初期化カウント = 16;
(i = 0 とします; i < initCount; i++) {
  ユニット = i - 8 とします。
    速度 = i > 3 ? i % 3 : i,
    サイズ = 0;
  スピード++;
  (i % 5 == 0)の場合{
    サイズ = 10;
  } そうでない場合 (i % 8 == 0) {
    サイズ = 20;
  } それ以外 {
    サイズ = Math.random() * 10;
  }
  雪.push({
    偏差: unit * 40, //位置遅延: Math.random() * 1000, //遅延速度: speed * 3000, //速度不透明度: speed / 4,
    サイズ: サイズ、
    zindex: サイズ >= 10 ? 4 : 0
  });
}
snows2 = [] とします。
雪.forEach(f => {
  snows2.push({
    ...f、
    偏差: snows[parseInt(Math.random() * initCount)].偏差 - 10,
    遅延: f.delay + 1000 //遅延 });
});
snows3 = [] とします。
snows.forEach(f => {
  snows3.push({
    ...f、
    偏差: snows[parseInt(Math.random() * initCount)].偏差 - 20,
    遅延: f.delay + 2000 //遅延 });
});
snows = snows.concat(snows2);
snows = snows.concat(snows3);
snows.sort((a, b) => a.deviation - b.deviation);
this.snows = 雪が降る;

IV. 結論

フロントエンド開発者として、レンダリングを可能な限り復元する必要があります。復元の程度を追求しながら、パフォーマンスとユーザーエクスペリエンスも考慮して、ページを美しく、可能な限り軽量で簡潔にする必要があります。

上記は、エディターが紹介したアクティビティページでの CSS3 アニメーション効果の応用です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。エディターがすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

<<:  MySQLデータベースに接続し、クエリ操作を実行するためのIDEAの完全なコード

>>:  nginx+lua を使用した単一マシンでの何万もの同時接続の実装

推薦する

ベースタグとは何ですか? また、それは何をするのですか?

<base> タグは、ページ上のすべてのリンクのデフォルトのアドレスまたはデフォルトの...

element.style インライン スタイルを変更する方法のチュートリアル

序文上記の Web ページ スタイルを記述しているときに、スタイルの値をどのように変更しても、ページ...

dockerを使用してGrafana+Prometheus構成をデプロイする

docker-compose-monitor.yml バージョン: '2' ネットワ...

Docker 可視化グラフィックツール portainer の詳細な説明

目次1. ポーテナーの紹介2. Portainer アーキテクチャの概要3. Portainerのイ...

いくつかの重要なMySQL変数

MySQL 変数は数多くありますが、その中には注目に値するものもあります。ここでは、参考までに、注目...

CSSとJSでロマンチックな流星群アニメーションを実現

1. レンダリング 2. ソースコードhtml < 本文 > < div クラス ...

美しい FLASH ウェブサイト デザイン例 50 選

Flashにより、デザイナーや開発者はブラウザ上でリッチなコンテンツを提供し、動き、インタラクティブ...

Vue+echarts で積み上げ棒グラフを実現

この記事では、積み上げ棒グラフを実装するためのVue+echartsの具体的なコードを参考までに紹介...

FTP環境設定ソリューション(vsftpd)の詳細な説明

1. vsftpdコンポーネントをインストールするインストールコマンド: [root@ink4t ~...

Linux システムが VMware にインストールされているかどうかを確認する方法

現在の Linux システムが VMware にインストールされているかどうかを確認する方法を教えて...

MySQL EXPLAIN出力列の詳細な説明

1. はじめにEXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情...

タイプライター効果を実現する純粋な js

この記事の例では、タイプライター効果を実現するためのjsの具体的なコードを参考までに共有しています。...

Linux (Ubuntu) での MySQL 5.7.17 のインストールと設定のチュートリアル

序文以前、MySQL 5.6 をインストールしました。3 か月後、開発者から MySQL で JSO...

Linux がますます人気になっている 10 の理由

Linux はますます多くのユーザーに愛されてきました。なぜ Linux はこれほど急速に発展し、い...