H5では、ダイナミックなグラフィックス機能を実現するために、キャンバスの最も強力なインタフェース
前回の記事では、canvasを使ってグラフィックを描く方法を紹介しましたが、描いたグラフィックは静的なものでした。
アニメーションとは?
アニメーションを描く前に、アニメーションとは何か、アニメーションに最低限必要な基本的な条件は何か、考えてみる必要があるのではないでしょうか。
ツールで実演できるアニメーションとは?
PPTで描かれたアニメーション効果です
上記のアニメーション効果のPPT図面に基づいて、いくつかのPPTページを素早く切り替えると、アニメーション効果を見ることができるようにリンクされていることがわかります。
以上が、アニメーション実装の基本要素です。
単位時間あたりに複数の画像を連続再生する。この単位時間は一般に秒単位で、コンピュータ・レンダリング・グラフィックスで十分に滑らかな映像を得るには、1秒あたりの画像数がモニターのリフレッシュレート以上でなければなりません(このリフレッシュレートは一般に60hzです)。
各画像内のオブジェクトの状態(大きさ、形、色、位置、角度など)が変化すること
では、この2つの条件をcanvasで実現するにはどうすればよいのでしょうか。
1秒間に60枚のグラフィックを描く方法
それを変形して、1/60秒ごとにグラフを描画することができます。JavaScriptで頻繁に何かを行うには、タイマーのsetintervalを使う方法があります。
タイマーとは何ですか?
setinerval (function f(){}, t), the
タイマーの内部では、関数と時間の2つのパラメータを渡すことができ、このコードは、関数fがt msごとに実行されることを意味します。
そこで、これを利用して、1/60秒ごとに必要な描画を行うことにします
setInterval(function(){
canCon.fillStyle="black";
//canCon.fill means to pick up a pen that draws solid shapes on this rice paper.
//style="black" means to dip a pen into a black ink
//all together it means to pick up a solid drawing pen and stick it with black ink
canCon.arc(233,233,66,0,Math.PI*2);
// conceive a circle on rice paper (X position of the center of the circle, Y position, radius of the circle, from what position the circle starts and where it ends).
canCon.fill();//draw with the brush
},1000/60)
最終効果
しかし、まだアニメーション効果はありません。1sの60枚の描画はすべて同じなので、次のステップでは、1枚描画するごとに要素の状態を変化させることになります。
次のステップは、1つ1つ描画するたびに要素の状態を変化させることです。このグループは毎晩無料のライブ授業があるので、勉強したくない人は追加しないでください。
(537-631-707)
要素の状態を変更するにはどうしたらよいですか?
円の位置は円の中心の座標で決まるので、キャンバスを描くたびに要素の位置を一度変更します
vary=100;//Give an initial center position, and then each time we draw, the y position of the center will move down one distance
setInterval(function(){
canCon.fillStyle="black";
//canCon.fill means pick up a pen that draws a solid shape on this rice paper.
//style="black" means to dip a pen into a black ink
//all together it means to pick up a solid drawing pen and stick it with black ink
canCon.arc(233,y++,66,0,Math.PI*2);
// conceive a circle on rice paper (X position of the center, Y position, radius of the circle, from what position the circle starts and where it ends).
canCon.fill();//draw with the brush
},1000/60)
この時点で見えているのは、動く円ではなく、伸び続けるプログレスバーのようなものです。その理由は簡単で、新しいグラフィックを描くたびに元のグラフィックを消しているわけではないので、画像はn個のグラフィックを重ね合わせた結果になっているのです。そこで、新しいものを描くたびに元のものを消す必要があるのですが、どうすればよいのでしょうか。
vary=100;//give an initial center position, and then each time we draw, the y position of the center of the circle is moved down one distance
setInterval(function(){
canCon.clearRect(0, 0, 500, 500);//erase a rectangular area the top left corner of the rectangle and the width and height of the rectangle
canCon.fillStyle="black";
//canCon.fill means to pick up a pen that draws solid shapes on this rice paper
//style="black" means to dip a pen into a black ink
//all together it means to pick up a solid drawing pen and stick it with black ink
canCon.arc(233,y++,66,0,Math.PI*2);
// conceive a circle on rice paper (X position of the center, Y position, radius of the circle, from what position the circle starts and where it ends).
canCon.fill();//draw with the brush
},1000/60)
しかし、この時点ではまだうまくいきません。では、どうなっているのでしょうか?紙の面積を消すときは、筆を持ち上げて消しゴムで消すので、キャンバスの面積を消すときも、筆を持ち上げてから消す必要があります。
vary=100;//Give an initial circle center position, and each time we draw, the y position of the center moves down one distance
setInterval(function(){
canCon.beginPath();//Lift the pen up
canCon.clearRect(0, 0, 500, 500);//erase a rectangular area the coordinates of the upper left corner of the rectangle and the width and height of the rectangle
canCon.fillStyle="black";
//canCon.fill means to pick up a pen that draws solid shapes on this rice paper
//style="black" means to dip a pen into a black ink
//all together it means to pick up a solid drawing pen and stick it with black ink
canCon.arc(233,y++,66,0,Math.PI*2);
// conceive a circle on rice paper (X position of the center, Y position, radius of the circle, from what position the circle starts and where it ends).
canCon.fill();//draw with the brush
},1000/60)
これにより、動きのある円を得ることができます
概要
上記は、動的なグラフィックス機能を達成するために、H5キャンバスの最も強力なインターフェイスを紹介することです、私はそれがあなたを助けることを願って、あなたが何か質問がある場合は、私にメッセージを与えてください、私は速やかに皆に返信されます。今後ともScript Houseをよろしくお願いいたします。
関連
-
html5フォームにおけるrequired属性の使用について
-
html+css イメージスキャナ効果用
-
CAPTCHAを生成するHTML5サンプルコード
-
rtmpストリーミングライブのHTML5再生
-
HTML5+CSSでfloatを設定しても、真ん中や間違った行の代わりに移動しない問題
-
HTML5 Blobオブジェクトの使用方法
-
音声付き動画の自動再生機能の実装方法
-
iframeとwindow.onloadの詳しい使い方
-
HTML5でオプションのスタイルシートを使ってWebサイトやアプリケーションにダークモードを追加する方法を解説
-
AmazeUIのダウンロード設定とHelloworldの実装について
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
amazeuiのページチェック機能を実装するためのコード
-
データストレージの3つの方法、Cookie sessionstorage localstorageの類似点と相違点の分析
-
html5で漢字にピンインを付加するプログレスバーコード
-
9ボックスグリッドの原則を用いたHTMLページレイアウト
-
html5モバイル価格入力キーボードの実装
-
data:画像データのurlファイルをBlobアップロードバックエンドメソッドに渡す。
-
ウェブアプリのページスクロールラグの解決策を詳しく解説
-
localStorageの有効期限を設定する詳細な方法
-
Html5キャンバスパーティクルクロック サンプルコード
-
HTMLでIMGをDIVコンテナのサイズに自動的に適応させる方法