1. CSS のみを使用して作成したアニメーションのクリスマスツリーデモアドレス: http://haiyong.site/christmastree1 (コンピューターで開くことをお勧めします。モバイル版は応答しない場合は少し歪んでしまいますが、後ろのクリスマスツリーを見ることもできます) HTMLコード: ここの HTML コードは完全で、切り取られていません。 <div class="カードコンテナ"> <div class="snow-flakes-1"></div> <div class="snow-flakes-2"></div> <h2>次は雪の結晶、クリスマスツリー、新年、そして</h2> <h1>より良い私たち</h1> <div class="tree-container"> <div class="ball-0"></div> <div class="tree-p1"> <ul> <li> <div class="xmas-ball ball-1"></div> <div class="tree-left-branch"></div> </li> <li><div class="tree-right-branch"></div></li> </ul> </div> <div class="tree-p2"> <ul> <li> <div class="クリスマスボールボール-2"></div> <div class="tree-left-branch"></div> </li> <li> <div class="xmas-ball ball-3"></div> <div class="tree-right-branch"></div> </li> </ul> </div> <div class="tree-p3"> <ul> <li> <div class="xmas-ball ball-6"></div> <div class="tree-left-branch"></div> </li> <li> <div class="xmas-ball ball-5"></div> <div class="xmas-ball ball-4"></div> <div class="tree-right-branch"></div> </li> </ul> </div> <div class="tree-p4"> <ul> <li> <div class="xmas-ball ball-7"></div> <div class="xmas-ball ball-8"></div> <div class="tree-left-branch"></div> </li> <li> <div class="xmas-ball ball-9"></div> <div class="クリスマスボールボール-10"></div> <div class="tree-right-branch 頑固"></div> </li> </ul> </div> <div class="wood"></div> <div class="presents"> <div class="present-container-1"> <div class="tie"></div> <div class="ふた"></div> <div class="box"></div> </div> <div class="present-container-2"> <div class="tie"></div> <div class="ふた"></div> <div class="box"></div> </div> </div> </div> <h3>メリークリスマス!</h3> <p><span>haiyong より</span></p> </div> CSSメインコード CSSがたくさんあります。主要なコードの一部を傍受しました 体 { 高さ:100vh; ディスプレイ: フレックス; コンテンツの中央揃え: 中央; アイテムの位置を中央揃えにします。 色: #000; } ul { リストスタイルタイプ: なし; } ul li { 表示: インラインブロック; } h1 { フォントファミリー: 「Mountains of Christmas」、筆記体; フォントサイズ: 42px; 行の高さ: 60px; -webkit-background-clip: テキスト; -webkit-テキストの塗りつぶし色: 透明; } h1::before、h1::after { 内容: "❆"; マージン: 0 10px; } h2 { フォントファミリ: "Source Sans Pro"、サンセリフ; フォントサイズ: 14px; テキスト変換:大文字; 文字間隔: 2px; } h3 { フォントファミリー: "Open Sans Condensed"、サンセリフ; フォントの太さ: 300; フォントサイズ: 18px; 文字間隔: 2px; 下部マージン: 5px; } p { フォントファミリー: 「Dancing Script」、筆記体; フォントサイズ: 20px; フォントの太さ: 700; } スパン { フォントファミリ: "Roboto"、サンセリフ; フォントサイズ: 14px; フォントの太さ: 400; } .カードコンテナ{ 高さ: 675px; 幅: 675ピクセル; パディング: 30px; 背景色: rgba(255, 255, 255, 0.6); 境界線: 8px ダブル #fff; 境界線の半径: 20px; テキスト配置: 中央; 境界線の半径: 50%; -webkit-border-radius: 50%; オーバーフロー: 非表示; 位置: 相対的; -webkit-mask-image: -webkit-radial-gradient(白、黒); } 2. CSS のみを使用して作成したスパイラル クリスマス ツリーデモアドレス: http://haiyong.site/christmastree2 (モバイルと PC の両方で完全に応答します) HTMLコード <div class="tree"> <div class="tree__light" style="--appear: 0; --y: 0; --rotate: 1440; --radius: 12.5; --speed: 9.235939340131775; --delay: -2.416794939166802;"></div> <div class="tree__light" style="--appear: 1; --y: 2; --rotate: 1411.2; --radius: 12.25; --speed: 7.165430171444827; --delay: -2.992603509592233;"></div> <div class="tree__light" style="--appear: 2; --y: 4; --rotate: 1382.4; --radius: 12; --speed: 3.5061879558149545; --delay: -0.7704234444726743;"></div> <div class="tree__light" style="--appear: 3; --y: 6; --rotate: 1353.60000000000001; --radius: 11.75; --speed: 4.727223159267884; --delay: -9.55238654379912;"></div> <div class="tree__light" style="--appear: 4; --y: 8; --rotate: 1324.8; --radius: 11.5; --speed: 0.702989829906826; --delay: -4.2545348853934435;"></div> <div class="tree__light" style="--appear: 5; --y: 10; --rotate: 1296; --radius: 11.25; --speed: 6.842573668088441; --delay: -4.560144802030952;"></div> <div class="tree__light" style="--appear: 6; --y: 12; --rotate: 1267.2; --radius: 11; --speed: 5.8193198565131965; --delay: -8.605875056439737;"></div> <!-- style="--appear: 49; まで同じルールが書かれていますが、ブログの簡潔さのためにここでは省略しています--> <div class="tree__light" style="--appear: 49; --y: 98; --rotate: 28.8; --radius: 0.25; --speed: 1.7070837859932286; --delay: -3.8515175108122546;"></div> <svg class="tree__star" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 113.32 108.44" スタイル="--delay: 50"> <path d="M90.19 104.33L57.12 87.38 24.4 105l5.91-36.69L3.44 42.65l36.72-5.72 16.1-33.5L73.06 36.6l36.83 4.97-26.35 26.21z" fill="none"stroke-width="6.88"stroke-linecap="round"stroke-linejoin="round"></path> </svg> </div> 完全なCSSコード コピーして貼り付けるだけ * { ボックスのサイズ: 境界線ボックス; } 体 { 背景: #233343; 最小高さ: 100vh; ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 コンテンツの中央揃え: 中央; パースペクティブ: 1200px; 変換スタイル: 3D を保持します。 } 。木 { 位置: 相対的; 高さ: 50vmin; 幅: 25vmin; 変換スタイル: 3D を保持します。 -webkit-animation: スピン 2 秒 無限線形; アニメーション: 2 秒間の無限線形スピン。 } .tree__light { 変換スタイル: 3D を保持します。 位置: 絶対; 高さ: 1vmin; 幅: 1vmin; 境界線の半径: 50%; -webkit-animation: flash calc(var(--speed) * 1s) calc(var(--delay) * 1s) 無限ステップ(4)、0.5秒表示 calc(var(--appear) * 0.05s) 両方; アニメーション: フラッシュ calc(var(--speed) * 1s) calc(var(--delay) * 1s) 無限ステップ(4)、0.5秒表示 calc(var(--appear) * 0.05s) 両方; 左: 50%; 変換: translate(-50%, 50%) rotateY(calc(var(--rotate, 0) * 1deg)) translate3d(0, 0, calc(var(--radius, 0) * 1vmin)); 下部: calc(var(--y, 0) * 1%); } .tree__star { ストローク幅: 5vmin; ストローク: #f5e0a3; フィルター: ドロップシャドウ(0 0 2vmin #fcf1cf); 高さ: 5vmin; 幅: 5vmin; オーバーフロー: 表示 !important; 下部: 100%; 左: 50%; 変換: translate(-50%, 0); 位置: 絶対; ストロークダッシュ配列: 1000 1000; 塗りつぶし: なし; -webkit-animation: ストローク 1s calc((var(--delay) * 0.95) * 0.05s) 両方; アニメーション: ストローク 1s calc((var(--delay) * 0.95) * 0.05s) 両方; } @-webkit-keyframes ストローク { から { ストロークダッシュオフセット: -1000; } } @keyframes ストローク { から { ストロークダッシュオフセット: -1000; } } @-webkit-keyframes スピン { に { 変換: rotateY(360deg); } } @keyframes スピン { に { 変換: rotateY(360deg); } } @-webkit-キーフレームが表示される{ から { 不透明度: 0; } } @キーフレームが表示される{ から { 不透明度: 0; } } @-webkit-keyframes フラッシュ { 0%、100% { 背景: #f00; } 20% { 背景: #fff; } 40% { 背景: #f00; } 60% { 背景: #fff; } 80% { 背景: #f00; } } @keyframes フラッシュ { 0%、100% { 背景: #f00; } 20% { 背景: #fff; } 40% { 背景: #f00; } 60% { 背景: #fff; } 80% { 背景: #f00; } } 3. HTML+CSS+JSで作ったクリスマスツリーデモアドレス: http://haiyong.site/christmastree3 (PC でのプレビューが最適です) フルCSS 体 { 背景色:#151522; オーバーフロー: 非表示; ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 コンテンツの中央揃え: 中央; } 体、 html{ 高さ: 100%; 幅: 100%; マージン: 0; パディング: 0; } svg{ 幅:90%; 高さ:90%; 可視性:非表示; } 部分的なJS MorphSVGPlugin.convertToPath('ポリゴン'); var xmlns = "http://www.w3.org/2000/svg", xlinkns = "http://www.w3.org/1999/xlink", select = 関数 { document.querySelector を返します。 }, selectAll = 関数{ document.querySelectorAll(s); を返します。 }, pContainer = select('.pContainer')、 mainSVG = select('.mainSVG')、 星 = select('#星'), スパークル = select('.sparkle'), ツリー = select('#tree')、 パーティクルを表示 = true、 粒子カラー配列 = ['#E8F6F8', '#ACE8F8', '#F6FBFE','#A2CBDC','#B74551', '#5DBA72', '#910B28', '#910B28', '#446D39'], 粒子タイプ配列 = ['#星','#円','#十字','#ハート'], 粒子プール = [], 粒子数 = 0、 粒子数 = 201 gsap.set('svg', { 可視性: '可視' }) gsap.set(スパークル, { 変換元:'50% 50%', y:-100 }) getSVGPoints = (パス) => { arr = [] とします var rawPath = MotionPathPlugin.getRawPath(path)[0]; rawPath.forEach((el, 値) => { obj = {} とします obj.x = rawPath[値 * 2] obj.y = rawPath[(値 * 2) + 1] if(値 % 2) { arr.push(オブジェクト) } }) arr を返します。 } treePath = getSVGPoints('.treePath') とします。 var treeBottomPath = getSVGPoints('.treeBottomPath') var mainTl = gsap.timeline({delay:0, repeat:0}), starTl; 関数 flicker(p){ gsap.killTweensOf(p, {不透明度:true}); gsap.fromTo(p, { 不透明度:1 }, { 持続時間: 0.07、 不透明度:Math.random(), 繰り返し:-1 }) } 関数createParticles() { var i = numParticles、p、particleTl、ステップ = numParticles/treePath.length、pos; (--i > -1) の間 { p = select(particleTypeArray[i%particleTypeArray.length]).cloneNode(true); mainSVG.appendChild(p); p.setAttribute('fill', 粒子カラー配列[i % 粒子カラー配列.length]); p.setAttribute('クラス', "粒子"); パーティクルプールをpにプッシュします。 gsap.set(p, { x:-100, y:-100, 変換元:'50% 50%' }) } } var getScale = gsap.utils.random(0.5, 3, 0.001, true); 関数playParticle(p){ if(!showParticle){return}; var p = 粒子プール[粒子数] gsap.set(p, { x: gsap.getProperty('.pContainer', 'x'), y: gsap.getProperty('.pContainer', 'y'), スケール:getScale() } ); var tl = gsap.timeline(); tl.to(p, { 期間: gsap.utils.random(0.61,6)、 物理2D: 速度: gsap.utils.random(-23, 23)、 角度:gsap.utils.random(-180, 180), 重力:gsap.utils.random(-6, 50) }, スケール:0, 回転:gsap.utils.random(-123,360)、 容易さ: 'power1', onStart: ちらつき、 onStartParams:[p], //繰り返し:-1, 繰り返し: (p) => { gsap.set(p, { スケール:getScale() }) }, onRepeatParams: [p] }); 粒子数++; 粒子数 = (粒子数 >= 粒子数) ? 0 : 粒子数 } 関数drawStar(){ starTl = gsap.timeline({onUpdate:playParticle}) starTl.to('.pContainer, .sparkle', { 所要時間: 6, モーションパス: パス: '.treePath', 自動回転: false }, 容易さ: '線形' }) .to('.pContainer, .sparkle', { 期間: 1, onStart:function(){showParticle = false}, x:treeBottomPath[0].x, y:ツリー下部パス[0].y }) .to('.pContainer, .sparkle', { 期間: 2, onStart:function(){showParticle = true}, モーションパス: パス: '.treeBottomPath', 自動回転: false }, 容易さ: '線形' },'-=0') .from('.treeBottomMask', { 期間: 2, 描画SVG:'0% 0%', ストローク:'#FFF', 容易さ:'線形' },'-=2') } パーティクルを作成します。 星を描画します。 //GSAPタイムラインをスクラブ(mainTl) mainTl.from(['.treePathMask','.treePotMask'],{ 期間: 6, 描画SVG:'0% 0%', ストローク:'#FFF', よろめく: 各: 6 }, 期間: gsap.utils.wrap([6, 1,2]), 容易さ:'線形' }) .from('.treeStar', { 期間: 3, // 傾斜Y:270, スケールY:0, スケールX:0.15、 変換元:'50% 50%', イージー: 'elastic(1,0.5)' },'-=4') .to('.sparkle', { 期間: 3, 不透明度:0, イージー:"rough({強度: 2、ポイント: 100、テンプレート: 線形、テーパー: 両方、ランダム化: true、クランプ: false})" },'-=0') .to('.treeStarOutline', { 期間: 1, 不透明度:1、 イージー:"rough({強度: 2、ポイント: 16、テンプレート: 線形、テーパー: なし、ランダム化: true、クランプ: false})" },'+=1') mainTl.add(スターTl, 0) gsap.globalTimeline.timeScale(1.5); 4. CSS のみを使用した流れ星のクリスマスツリーデモアドレス: http://haiyong.site/christmastree4 (レスポンシブ、モバイルと PC の両方でプレビュー可能) HTMLコード <ul> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> <ul> <!-- ここでは 256 行が省略されています<li></li> --> </ul> CSSコード :根 { --背景:#3C3B3D; } 体 { 背景: var(--background); } 本文 ul { パディング: 0; } ボディ ul li { リストスタイル: なし; } 本体 ul:nth-child(1) { 位置: 絶対; トップ:20vh; 左: 50%; 幅: 1rem; 高さ: 1rem; 境界線の半径: 100%; 変換: translate(-50%, -50%); } 本体 ul:nth-child(1) li { 位置: 絶対; 幅: 0; 高さ: 0; 境界線の幅: 0 0.5rem 1rem 0.5rem; 境界線のスタイル: solid; 境界線の色: 透明; 境界線下部の色: #FFCE54; 変換の原点: 0.5rem 1rem; } 本体 ul:n番目の子(1) li:n番目の子(0) { 変換: 回転(0度); } 本体 ul:nth-child(1) li:nth-child(1) { 変換: 回転(72度); } 本体 ul:nth-child(1) li:nth-child(2) { 変換: 回転(144度); } 本体 ul:nth-child(1) li:nth-child(3) { 変換: 回転(216度); } 本体 ul:nth-child(1) li:nth-child(4) { 変換: 回転(288度); } 本体 ul:nth-child(2) li { 位置: 絶対; トップ:20vh; 左: 50%; 幅: 0.0625rem; 高さ: 60vh; 変換原点: 50% 0%; } 本体 ul:nth-child(2) li:nth-child(1) { 変換: 回転(4.9322004015度); } 本体 ul:nth-child(2) li:nth-child(1):before、本体 ul:nth-child(2) li:nth-child(1):after { -webkit アニメーション遅延: -0.015625 秒; アニメーション遅延: -0.015625秒; } 本体 ul:nth-child(2) li:nth-child(2) { 変換: 回転(7.7960629984度); } 本体 ul:nth-child(2) li:nth-child(2):before、本体 ul:nth-child(2) li:nth-child(2):after { -webkit アニメーション遅延: -0.03125 秒; アニメーション遅延: -0.03125秒; } 本体 ul:nth-child(2) li:nth-child(3) { 変換: 回転(10.5294548885度); } 本体 ul:nth-child(2) li:nth-child(3):before、本体 ul:nth-child(2) li:nth-child(3):after { -webkit アニメーション遅延: -0.046875 秒; アニメーション遅延: -0.046875秒; } /* ...... */ /* 256番目まで同じパターン */ 本体 ul:nth-child(2) li:nth-child(256) { 変換: 回転(2度); } 本体 ul:nth-child(2) li:nth-child(256):before、本体 ul:nth-child(2) li:nth-child(256):after { -webkit アニメーション遅延: -4 秒; アニメーション遅延: -4秒; } 本体 ul:nth-child(2) li:before、本体 ul:nth-child(2) li:after { コンテンツ: ""; 位置: 絶対; トップ: 0%; -webkit-animation: fall 4s linear infinite; アニメーション: 落下 4 秒 線形無限; } 本体 ul:nth-child(2) li:before { 幅: 0.0625rem; 高さ: 3rem; 背景: linear-gradient(rgba(46, 204, 113, 0), rgba(46, 204, 113, 0.5)); } 本体 ul:nth-child(2) li:after { 下部: 0; 変換: translate(-50%, 3rem); 幅: 0.1875rem; 高さ: 0.1875rem; 境界線の半径: 100%; 背景: #ffce54; } 本体 ul:nth-child(2) li:nth-child(4n):after { 背景: #D8334A; } 本体 ul:nth-child(2) li:nth-child(4n+1):after { 背景: #FFCE54; } 本体 ul:n番目の子(2) li:n番目の子(4n+2):後 { 背景: #2ECC71; } 本体 ul:nth-child(2) li:nth-child(4n+3):after { 背景: #5D9CEC; } @-webkit-keyframes 秋 { 0% { 不透明度: 0; トップ: 0%; } 5% { 不透明度: 0; } 15%、90% { 不透明度: 1; } 100% { 不透明度: 0; 上: 100%; } } @keyframes 落ちる { 0% { 不透明度: 0; トップ: 0%; } 5% { 不透明度: 0; } 15%、90% { 不透明度: 1; } 100% { 不透明度: 0; 上: 100%; } } 5. 水晶玉の中のクリスマスツリーデモアドレス: http://haiyong.site/christmastree5 (レスポンシブ、モバイルと PC の両方でプレビュー可能) CSS 完全コード html、本文{ マージン:0; 幅: 100%; 高さ: 100%; 位置: 絶対; オーバーフロー: 非表示; 背景: linear-gradient(135deg, rgba(180,186,214,1) 0%, rgba(232,203,192,1) 100%); } 。コンテンツ { テキスト配置: 中央; 幅: 100%; } svg { 最大幅: 575px; } #キャンバス { 境界線の半径: 50%; 位置: 相対的; 幅: 310ピクセル; 高さ: 290px; 上: 10px; 左: 0px; } .キャンバスコンテナ{ 位置: 絶対; 幅: 100%; } .draw_container{ 位置: 絶対; 上: 50px; 幅: 100%; } JS 完全コード $(関数() { var キャンバス = $("#canvas")[0]; var ctx = canvas.getContext("2d"); var 幅 = 320; var 高さ = 320; キャンバスの幅 = 幅; キャンバスの高さ = 高さ; キャンバスをクリアします。 var 粒子 = []; (var i = 0; i < WIDTH; i++) の場合 { 粒子.push({ x: Math.random() * 幅、 y: Math.random() * 高さ、 r: Math.random() * 2 + 1 }) } 関数draw() { キャンバスをクリアします。 ctx.fillStyle = "rgba(255, 255, 255, 0.6)"; ctx.beginPath(); (i = 0; i < WIDTH; i++) の場合 { p = particles[i]とします。 ctx.moveTo(px, py); ctx.arc(px, py, pr, 0, Math.PI * 2, true); } ctx.fill(); アップデート(); } 関数 update() { (i = 0; i < WIDTH; i++) の場合 { p = particles[i]とします。 py + = pr; キャンバスの高さが 粒子[i] = { x: Math.random() * キャンバス幅、 y: -10, r:pr }; } } } var timer = setInterval(draw, 50); 関数 clearCanvas() { ctx.clearRect(0, 0, キャンバス.幅, キャンバス.高さ); } }) 6. クリスマスカードデモアドレス: http://haiyong.site/shengdanheka 以上がJavaScriptで実装したダイナミッククリスマスツリーの詳しい内容です。JavaScriptクリスマスツリーの詳細については、123WORDPRESS.COMの他の関連記事もご覧ください。 以下もご興味があるかもしれません:
|
<<: HTML の基礎必読 - CSS スタイルシートの包括的な理解
>>: MySQLのマスタースレーブレプリケーションと読み取り書き込み分離を理解するための記事
この記事の例では、円形の水のアニメーションを実現するためのキャンバスの具体的なコードを参考までに共有...
1 はじめにデータベースを設計する場合、画像や音声ファイルをデータベースに挿入することは避けられませ...
まず、このブログのケースデモンストレーション テーブルを作成します。 create table a(...
システム環境: Ubuntu 16.04LTSこの記事では、6 つの Docker コンテナを使用し...
1. ボックスを中央に配置するいくつかの方法を記録します。 1.0、マージン幅固定、高さ中央配置。 ...
<br />一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると[フ...
コンテナをソートするためにdepends_onを使用しても、コンテナ間の依存関係の問題は完全には解決...
昨日、1年間使用していた Alibaba Cloud サーバーを購入しました。システムは Linux...
プロジェクトの要件は、日付と時刻を選択し、現在の時刻以降の時刻のみを選択し、最小レベルを分単位で無効...
数日前、バスで仕事に行きました。バスのカードリーダーの実際の使用シーンを実際に見て、カードリーダーの...
Mysqlページングの2つのパラメータ ユーザー制限 1,2 から * を選択 1 は検索する最初の...
この記事では、ドラッグアンドドロップやクリックによる画像のアップロードを実現するためのVueの具体的...
目次マスターの後ろの秒数オリジナルの実装最終マスタータイムスタンプマスターとのクロック差他の実行時間...
この記事では、絵文字用の MySQL Java サーバーのサポートと問題解決方法について説明します。...
位置の 4 つのプロパティ値は次のとおりです。 1.相対的な2.絶対3.修正4.静的これら 4 つの...