CSS3+JavaScript を使用したクールな呼吸効果のサンプル コード

CSS3+JavaScript を使用したクールな呼吸効果のサンプル コード

CSS3 アニメーションで実現したシンプルでクールな効果。最終的な効果は次のようになります。

ページ構造 (index.html):

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
  <メタ文字セット="UTF-8">
  <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
  <title>ドキュメント</title>
  <link rel="スタイルシート" href="style.css">
</head>
<本文>
  <h1>リラックスして呼吸しましょう</h1>
  <div class="コンテナ">
    <div class="circle"></div>
    <p id="テキスト"></p>
    <div class="ポインターコンテナ">
      <div class="ポインタ"></div>
    </div>
    <div class="gradient-circle"></div>
  </div>
  <script src="script.js"></script>
</本文>
</html>

スクリプト:

定数コンテナ = document.querySelector('.container');
定数テキスト = document.querySelector('#text');

定数合計時間 = 7500;
const BreathTime = (totalTime/5)*2; //呼吸時間は3秒
const holdTime = totalTime/5; // ホールド呼吸時間は1.5秒
console.log(呼吸時間);

BreathAnimation(); //まずはbreathAnimation関数を実行します function BreathAnimation(){
  text.innerHTML = '息を吸う';
  container.className = 'container grow'; //拡大効果を実現するためにコンテナにgrowクラスを追加します setTimeout(function(){
    text.innerHTML = 'ちょっと待って';
    setTimeout(関数(){
      text.innerHTML = '息を吐く';
      container.className = 'container shrink'; //縮小効果を得るためにコンテナにshrinkクラスを追加します},holdTime)
  },呼吸時間)
}

setInterval(breathAnimation,totalTime); //繰り返し実行

スタイル (style.css):

*{
  マージン: 0;
  パディング: 0;
  ボックスのサイズ: 境界線ボックス;
}

体{
  背景: url('./img/bg.jpg') 繰り返しなし 中央 中央 /cover;
  最小高さ: 100vh;
  フォントファミリー: Arial、Helvetica、sans-serif;
  色: #fff;
  オーバーフロー: 非表示;
  ディスプレイ: フレックス;
  flex-direction: 列;
  アイテムの位置を中央揃えにします。
  コンテンツの中央揃え: 中央;
}
/*マージンが自動に設定されていることに注意してください*/
。容器{
  位置: 相対的;
  幅: 300ピクセル;
  高さ: 300px;
  ディスプレイ: フレックス;
  アイテムの位置を中央揃えにします。
  コンテンツの中央揃え: 中央;
  変換: スケール(1);
  マージン: 自動;
}

/* 背景には .container よりわずかに大きいアスペクト比の円錐グラデーションを使用し、z-index を -2 に設定します。これは、.circle の別のレイヤーがあり、最も外側のレイヤーがテキストであるためです。*/
.gradient-circle{
  位置: 絶対;
  左: -10px;
  上: -10px;
  背景:円錐グラデーション(
    #55b7a4 0%,
    #4ca493 40%、
    #fff 40%、
    #fff 60%、
    #336d62 60%、
    #2a5b52 100%
  );
  幅: 320ピクセル;
  高さ: 320px;
  境界線の半径: 50%;
  Zインデックス: -2;
}

/z-index は -1 で、中央の黒い円です/
。丸{
  位置: 絶対;
  左: 0;
  上: 0;
  幅: 300ピクセル;
  高さ: 300px;
  背景色: #010f1c;
  境界線の半径: 50%;
  Zインデックス: -1;
}

/*.pointer-container はボールの外側にあるコンテナです。高さは 190 に設定されています。これは、半径が 150、上端が 40 であるためです。この方法では、円の中心を回転し、内側に切り替わることはありません。transform-origin が中央と下にあることに注意してください。*/
.ポインタコンテナ{
  位置: 絶対;
  幅: 20px;
  高さ: 190ピクセル;
  上: -40px;
  左: 140px;
  /* 背景色: 赤; */
  transform-origin: 下中央;
  アニメーション: 7.5 秒間、前方に無限回転します。
}

/*小さなボール*/
.ポインタ{
  幅: 20px;
  高さ: 20px;
  背景色: #fff;
  境界線の半径: 50%;
}

/*ボールを円を描くように回転させる*/
@keyframes 回転{
  から{
    変換: 回転(0度);
  }に{
    変換: 回転(360度);
  }
}
.コンテナ.成長{
  アニメーション: 3 秒間直線的に前進します。
}
.コンテナ.shrink{
  アニメーション: 2 秒ずつ前方に縮小します。
}
@keyframes が大きくなる{
  から{
    変換: スケール(1)
  }に{
    変換: スケール(1.2);
  }
}

@keyframes 縮小{
  から{
    変換: スケール(1.2)
  }に{
    変換: スケール(1);
  }
}

.container の margin が auto または特定の値に設定されていない場合、テキストと円が圧縮され、次の効果が発生します。

同時に、.pointer-container に background-color: red; を追加しました。これにより、.pointer-container の高さが 190px に設定されている理由がわかりやすくなります。また、transform-origin が下中央に設定されていない場合は、図にマークされているデフォルトのポイントとして回転しますが、これは必要な効果ではありません。

もう一つの細かい点は、.shrink のアニメーション時間を 2 秒に設定したことです。実際には、js によると、息を吐く時間は 3 秒にする必要がありますが、息を吐くことから息を吸うことまでのバッファ効果を持たせるために、2 秒に設定しました。そうしないと、息を吐くことから息を吸うことまでの遷移がなくなり、突然で醜いものになります。

CSS3+JavaScript でクールなブリージング効果を実現するサンプルコードに関するこの記事はこれで終わりです。CSS3+JavaScript ブリージング効果に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  MySQL の主キーがクエリを高速化するために数値を使用するか UUID を使用するかについての簡単な分析

>>:  Vue+elementuiはドロップダウンテーブルの複数選択と検索機能を実現します

推薦する

Vue ルーターにパラメータを渡すときにページを更新するとパラメータが失われる問題に対処する方法

目次概要方法1: params経由でパラメータを渡す方法2: クエリを通じてパラメータを渡す方法3:...

CSSフローティングとフローティング解除について

フロートの定義要素を通常のドキュメント フローから外し、要素を左また​​は右に近づけます。親要素の端...

Javascript 文字列メソッドの詳細な説明

目次文字列の長さ: 長さcharAt() charCodeAt()文字列に値が含まれているかどうかを...

JavaScript BOM ロケーション オブジェクト + ナビゲーター オブジェクト + 履歴オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

ページのレンダリング時間を短縮してページの実行速度を速めます

ブラウザでのページのレンダリング時間をできるだけ短縮するにはどうすればよいでしょうか? この記事は、...

JavaScript関数の詳細な紹介

任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...

コード分​​析を実現するためのFastDFSとNginxの統合

FastDFSとNginxの統合:トラッカーは、負荷分散と高可用性のために Nginx と組み合わせ...

SSH経由でリモートLinuxシステムでコマンドを実行する方法

場合によっては、リモート マシンでいくつかのコマンドを実行する必要があることがあります。これが時々行...

React Routerの歴史について簡単に説明します

React Router を理解したいなら、まず歴史を理解する必要があります。より具体的には、Rea...

503 サービス利用不可エラーの解決方法の説明

1. Webページを開くと503サービス利用不可が表示されますが、更新すると正常にアクセスできます。...

MySQL学習データベース操作DML初心者向け詳細解説

目次1. ステートメントを挿入する1.1 行を挿入する1.2 複数行を挿入する1.3 クエリステート...

RedisとMySQLの違いを簡単に説明してください

MySQL はディスクに保存される永続的なストレージであり、取得には一定の IO が伴うことはご存じ...

JS を使用して HTML で回転するクリスマスツリーを実装する

<!DOCTYPE ヘムル パブリック> <html> <ヘッド&g...

HTML の左右レイアウトのサンプルコード

CS: ...コードをコピーコードは次のとおりです。 html,body{ margin:0px; ...

Nginx Httpモジュールシリーズにおけるautoindexモジュールの具体的な使用法

ブラウザ モジュールの主な機能は、http リクエスト ヘッダーの「User-Agent」の値とブラ...