キャンバスでDVDスタンバイのアニメーションを作成するコード
2022-02-07 09:56:18
免責事項
キャンバスを教えるつもりはありません。ただ、簡単に見てみると面白いと思っただけです。
若干荒いということなので、スプレーはしないでください。
効果
若干のフレームレートの低下、もちろん現実にはもっとスムーズです。
HTMLの実装
<!DOCTYPE html>
<head>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum- scale=1.0">
<style>
* {margin: 0;padding: 0;}
body {background-color: lightblue;}
#canvas {background-color: black;width: 100vw;}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>/* see below */</script>
</body>
JS
window.onload = function () {
let
// canvas
ctx = document.getElementById('canvas').getContext('2d'),
// canvas size
canvas_width = document.getElementById('canvas').width,
canvas_height = document.getElementById('canvas').height,
// Text color, font, background color of DVD icons
text_color = ['green', 'blue', 'purple', 'yellow', 'white', 'yellow', 'white'],
text_font = 'italic bold 50px yahei',
background_color = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'],
// size of the background rectangle
background_width = 110,
background_height = 50,
// The height is a bit off when adding text to the rectangle
fix_height = 7,
// speed, each redraw moves 0.5 px
speed_x = 0.5,
speed_y = 0.5,
// direction of movement, initially 'r-b' right down
direction = 'r-b',
// icon x and y coordinates, initially 0
position_x = 0,
position_y = 0,
// number of collisions, used to calculate background and text color
count = 0
dvd()
function dvd() {
// Direction of movement
switch (direction) {
// right down
case 'r-b':
position_x += speed_x
position_y += speed_y
break
// top right
case 'r-t':
position_x += speed_x
position_y -= speed_y
break
// Lower left
case 'l-b':
position_x -= speed_x
position_y += speed_y
break
// top left
case 'l-t':
position_x -= speed_x
position_y -= speed_y
break
}
// Clear the canvas
ctx.clearRect(0, 0, canvas_width, canvas_height)
// Redraw
ctx.fillRect(position_x, position_y, background_width, background_height)
// Collision detection
// Bottom
if (position_y + background_height >= canvas_height) {
direction = direction.replace('b', 't')
// Collision count
count += 1
}
// right
if (position_x + background_width >= canvas_width) {
direction = direction.replace('r', 'l')
count += 1
}
// left
if (position_x < 0) {
direction = direction.replace('l', 'r')
count += 1
}
// up
if (position_y < 0) {
direction = direction.replace('t', 'b')
count += 1
}
// Text
ctx.font = text_font
ctx.fillStyle = text_color[count % 7]
ctx.fillText("DVD", position_x, position_y + background_height - fix_height)
// Background color
ctx.fillStyle = background_color[count % 7]
// Start the animation
window.requestAnimationFrame(dvd)
}
}
以上、本記事の全内容をご紹介しましたが、皆様の学習のお役に立てれば幸いです。また、Script Houseをより一層ご支援いただければ幸いです。
関連
-
HTML+Css+transformを使った3Dナビゲーションバーのサンプルコード
-
window.postMessage を用いた html5 のクロスドメインデータインタラクション
-
キャンバスをベースにしたHTML5で電子署名を実現、PDF文書も生成可能
-
canvasを用いたキャプチャ表示の実装
-
キャンバスのマウスがアニメーションの背景に従うことを達成するために5分
-
AmazeUIのダウンロード設定とHelloworldの実装について
-
Html5 webview要素位置決めツールの実装
-
Html5 スクロールする方法
-
キャンバスの描画は、contain または cover モードで適応され、中央に配置されます。
-
キャンバスサーチライトエフェクトのサンプルコード
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
HTML5の再適応スキームとビューポート適応の問題点を解説
-
Canvasでグラフィックス/イメージバインディングのイベントリスナーを実装する方法
-
HTML5開発によるダイナミックオーディオマップの実装
-
Html5 埋め込みピン留めサンプル実装
-
html2canvasのスクリーンショットが空白になる問題の解決法
-
キャンバス経由でのRGBAフォーマットへの色変換とパフォーマンス問題の解決
-
ダブルキャッシュを使用したCanvas clearRectによるスプラッシュスクリーンの問題を解決しました。
-
ページ上部へのスムーズなスクロールを実現する3つの方法
-
キャンバスで簡単なポスターを描くお手本
-
html2 canvasで印刷用の鮮明な画像を生成