この記事の例では、雨滴効果を実現するためのキャンバスの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。 1. 雨滴特殊効果の要件 雨滴はウィンドウの上から下に向かってランダムに落ち、波紋のように見えますが、徐々に広がって消えていきます。雨滴効果はウィンドウの変化に適応します。 2. レインドロップの実装アイデア 1. オブジェクト指向思考を使って、まずキャンバスを作成し、雨滴の最初の形を描きます。 3. 具体的な分析 1. 雨滴の初期化に必要なプロパティは何ですか? 4. コード <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0"> <title>キャンバス</title> <スタイル> * { マージン: 0; パディング: 0; } キャンバス { 垂直位置合わせ: 中央; 背景: #000; } </スタイル> </head> <本文> <キャンバスid="myCanvas"></キャンバス> <スクリプト> // キャンバスを作成する let myCanvas = document.getElementById('myCanvas') ctx = myCanvas.getContext('2d') とします。 // 適応型ウィンドウ let width = myCanvas.width = window.innerWidth 高さを myCanvas.height = window.innerHeight とします。 window.addEventListener('サイズ変更', () => { 幅 = myCanvas.width = window.innerWidth 高さ = myCanvas.height = window.innerHeight }) // 雨滴を描く let raindropArr = [] 関数 Raindrop(x, y, w, h, l, r, dr, maxR, a, va) { this.x = rand(0, window.innerWidth) // 雨滴の x 軸this.y = y || 0 // 雨滴の y 軸this.dy = rand(2, 4) // 雨滴の加速度this.w = w || 2 // 雨滴の幅this.h = h || 10 // 雨滴の高さthis.l = rand(0.8 * height, 0.9 * height) // 雨滴の落下高さthis.r = r || 1 // 波紋の半径this.dr = dr || 1 // 波紋の増加半径this.maxR = maxR || 50 // 最大波紋の半径this.a = a || 1 // 波紋の透明度this.va = 0.96 // 波紋の透明度係数} Raindrop.prototype = { draw: function (index) { // 雨滴を描画する if (this.y > this.l) { ctx.beginPath() ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2) ctx.strokeStyle = `rgba(0,191,255,${this.a})` ctx.ストローク() } それ以外 { ctx.fillStyle = 'スカイブルー' ctx.fillRect(this.x、this.y、this.w、this.h) は、矩形領域を塗りつぶします。 } this.update(インデックス) }, update: function (index) { // 雨滴の座標を更新して移動します if (this.y > this.l) { (this.a > 0.03)の場合{ this.r += this.dr (this.r > this.maxR)の場合{ this.a * = this.va } } それ以外 { これ.a = 0 raindropArr.splice(インデックス、1) } } それ以外 { this.y += this.dy } } } 関数rand(最小値, 最大値) { Math.random() * (max - min) + min を返します。 } 間隔を設定する(() => { raindrop = new Raindrop() とします。 raindropArr.push(raindrop) }, 100) 間隔を設定する(() => { ctx.fillStyle = 'rgba(0, 0, 0, 0.1)' ctx.fillRect(0, 0, myCanvas.width, myCanvas.height) (i = 0 とします; i < raindropArr.length; i++) { raindropArr[i].draw(i) } }, 30) </スクリプト> </本文> </html> V. 結論 基本的に、キャンバスのあらゆる動きや特殊効果は、js タイマーを通じて座標を変更することによって実現されます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: さまざまな種類の jQuery Web ページ検証コード プラグイン コード例
>>: クリックして認証コードと認証を切り替えるJavaScript
この記事では、ソシュールの言語哲学などの理論に基づいて、CSS の class 属性は不要であると主...
この記事では、例を使用して、MySQL のさまざまな一般的な結合テーブルクエリについて説明します。ご...
フレックスレイアウト定義: Flexレイアウトの要素は、 Flex 、または略して「コンテナー」と呼...
これは、ネイティブJSを使用してページングクリックコントロールを実装する必要がある面接の質問です。参...
1. アクセス頻度、同時接続、ダウンロード速度を制限するために使用されるモジュールと命令の概要ngx...
前回の記事では、入力完了の簡単な検出を実現しましたが、今回はさらに一歩進んで、入力が完了した後に次の...
事前に言っておく気まぐれですが、MySQL の order by sorting にどのようなルール...
目次1. Reduxを選ぶ理由2. Reduxデータフロー3つの原則4. Reduxソースコード分析...
docker リポジトリ自体は非常に遅いですが、中国の Alibaba Cloud ミラー リポジト...
序文MySQL の権限テーブルは、データベースの起動時にメモリにロードされます。ユーザーが ID 認...
要約する地球環境 ➡️ ウィンドウ通常関数 ➡️ ウィンドウまたは未定義コンストラクター ➡️ 構築...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
1. CSS変数がもたらす質的変化CSS 変数によってもたらされる改善は、CSS コードの節約や C...
forループを使用してZabbixイメージをコンテナにインポートします。 n を `ls *.tar...
目次uni-app のスタイル要約するuni-app のスタイルsassプラグインは公式ウェブサイト...