DOM は、Web フロントエンド分野の非常に重要な部分です。DOM は、HTML 要素を処理する場合だけでなく、グラフィック プログラミングでも使用されます。たとえば、SVG 描画では、さまざまなグラフィックスが DOM ノードの形式でページに挿入されます。これは、グラフィックスを DOM メソッドを使用して操作できることを意味します。たとえば、
キャンバスの制限事項
Canvas では、すべてのグラフィックがフレーム上に描画されます。描画メソッドは描画されたグラフィック要素を戻り値として出力せず、js は描画されたグラフィック要素を取得できません。例:
cvs = document.getElementById( 'mycanvas' );
ctx = Canvas.getContext('2d');
theRect = ctx.rect(10, 10, 100, 100);
ctx.ストローク();
コンソール.log(theRect); //未定義
このコードは、canvas タグ内に四角形を描画します。まず、グラフィックスを描画する rect メソッドには戻り値がないことがわかります。ブラウザの開発者ツールを開くと、canvas タグ内にコンテンツが追加されていないこと、および js で取得された Canvas 要素と現在のコンテキストには、新しいグラフィックスを示すコンテンツが含まれていないこともわかります。
したがって、フロントエンドで一般的に使用される DOM メソッドは、キャンバスには適用できません。たとえば、上の Canvas 内の四角形をクリックすると、実際には Canvas 要素全体をクリックすることになります。
イベントを Canvas 要素にバインドします
イベントは Canvas 要素レベルまでしか到達できないため、さらに進んで、Canvas 内のどのグラフィックでクリックが発生したかを特定したい場合は、処理用のコードを追加する必要があります。基本的な考え方は、イベントを Canvas 要素にバインドし、イベントが発生したときにイベント オブジェクトの位置を確認し、その位置をカバーするグラフィックを確認するというものです。たとえば、上の例では、x 軸の 10 ~ 110、y 軸の 10 ~ 110 の範囲をカバーする長方形が描画されました。この範囲内でマウスがクリックされている限り、それは四角形をクリックしたと見なされ、四角形によって処理される必要があるクリック イベントを手動でトリガーできます。実際、アイデアは比較的単純ですが、実装はまだ少し複雑です。この判定処理の効率性を考慮するだけでなく、所々でイベントの種類を再判定したり、Canvas 内部のキャプチャやバブリングの仕組みを再定義したりする必要があります。
最初に行うことは、イベントを Canvas 要素にバインドすることです。たとえば、クリック イベントを Canvas 内のグラフィックにバインドする場合は、Canvas 要素を通じてイベントをプロキシする必要があります。
cvs.addEventListener('click', function(e){
//...
}, false);
var x, y;
if (ev.layerX || ev.layerX == 0) {
x = ev.layerX;
y = ev.layerY;
} else if (ev. offsetX || ev.offsetX == 0) { // Opera
x = ev.offsetX;
y = ev.offsetY;
}
return {x: x, y: y};
}
//注: 上記の関数を使用するには、Canvas 要素の位置を絶対位置に設定する必要があります。
isPointInPath メソッド
Canvas の isPointInPath メソッドは、現在のコンテキスト グラフィックが特定の座標をカバーしているかどうかを判断できます。
ctx = Canvas.getContext('2d');
ctx.rect(10, 10, 100, 100);
ctx.ストローク();
ctx.isPointInPath (50, 50); //true
ctx.isPointInPath(5, 5); //false
;
次に、四角形上でクリック イベントが発生するかどうかを決定するイベント判定を追加します。
cvs.addEventListener('click ', function (e){
p = getEventPosition(e);
if(ctx.isPointInPath(p.x, p.y)){
//四角形をクリックしました
}
}, false );
上記は Canvas イベントを処理する基本的な方法ですが、複数のグラフィックスが描画されている場合、isPointInPath メソッドは現在のコンテキスト内のパスのみを決定するため、上記のコードには制限があります。キャンバスのみ イベントは最後のグラフィックのコンテキストに基づいて判断できます。例:
cvs = document.getElementById('mycanvas');
ctx = Canvas.getContext('2d');
ctx.beginPath();
ctx.rect(10, 10, 100, 100);
ctx.ストローク();
ctx.isPointInPath(20, 20); //true
ctx.beginPath();
ctx.rect(110, 110, 100 , 100);
ctx.ストローク();
ctx.isPointInPath(150, 150); //true
ctx.isPointInPath(20, 20); //false
上記のコードからわかるように、isPointInPath メソッドは現在のコンテキスト内のグラフィックス パスのみを識別でき、以前に描画されたパスを遡って判断することはできません。この問題の解決策は、クリック イベントが発生したときに、すべてのグラフィックスを再描画し、描画されたグラフィックスごとに isPointInPath メソッドを使用して、イベントの座標がグラフィックスの範囲内にあるかどうかを判断することです。
ループの再描画とイベントのバブリング
循環再描画を実現するには、グラフィックスの基本パラメータを事前に保存する必要があります:
arr = [
{x:10, y:10, width:100, height:100},
{x:110, y: 110、幅: 100、高さ: 100}
];
cvs = document.getElementById('mycanvas');
ctx = Canvas.getContext('2d');
draw( );
functiondraw(){
ctx.clearRech(0, 0, cvs.width, cvs.height);
arr.forEach(function(v){
ctx.beginPath();
ctx.rect(v.x, v.y, v.width, v.height);
ctx.ストローク();
});
}
上記のコードは、2 つの四角形の基本パラメーターを事前に保存しており、draw メソッドが呼び出されるたびに、これらの基本パラメーターがループで呼び出され、2 つの四角形が描画されます。ここでは、再描画時にキャンバスをクリアするために、clearRect メソッドも使用されています。次に行うことは、イベント デリゲートを追加し、再描画時に各コンテキストで isPointInPath メソッドを使用することです。
p = getEventPosition(e);
draw(p);
}, false);
var who = [];
ctx.clearRech(0, 0, cvs.width, cvs.height);
arr.forEach(function(v, i){
ctx.beginPath( );
ctx.rect(v.x, v.y, v.width, v.height);
ctx.ストローク();
if(p && ctx.isPointInPath(p.x, p.y)){
// イベント座標が渡される場合、isPointInPath を使用して決定します
// 現在の環境が座標をカバーする場合、現在の環境のインデックス値を配列に入れます
who.push(i);
}
});
//配列内のインデックス値に従って、対応する要素を arr 配列内で見つけることができます。
誰を返します;
}
上記のコードでは、クリックイベントが発生するとdrawメソッドで再描画を行い、再描画処理中に各グラフィックがイベント座標を覆っているかどうかを確認し、判定が真であればグラフィックがクリックされたものとみなされます。 、グラフィックのインデックス値を配列に入れ、最後にその配列をdrawメソッドの戻り値として使用します。この処理メカニズムでは、Canvas 内に N 個のグラフィックスがあり、その一部が重なっていて、この重なった領域でクリック イベントが発生した場合、draw メソッドの戻り配列には N 個のメンバーが存在します。このとき、配列の最後のメンバーがキャンバスの先頭にあり、最初のメンバーが最後にあるのと少し似ています。先頭のメンバーは e.target であると考えることができます。 、その他のメンバーは e.target です。バブル プロセス中に渡されるノードです。もちろん、これは最も単純な処理方法にすぎません。実際に DOM 処理をシミュレートしたい場合は、グラフィックスの親子関係を設定する必要があります。
上記はCanvasイベントの基本的な処理方法です。実際のアプリケーションでは、グラフィックスパラメータをどのようにキャッシュするか、ループの再描画をどのように行うか、イベントのバブリングをどのように処理するかなど、実際の状況に応じて対処する必要があります。なお、clickは比較的扱いやすいイベントですが、比較的面倒なイベントはmouseover、mouseout、mousemoveです。一度マウスがCanvas要素に入ると必ずmousemoveイベントが発生するため、mouseoverとmouseoutを別々に設定したい場合に使用します。特定のグラフィックについては、マウスの移動ルートを記録し、グラフィックの開始ステータスと終了ステータスを設定する必要もあります。処理ステップが複雑になるにつれて、パフォーマンスの問題にさらに注意を払う必要があります。

H5とHTML5は異なる概念です。HTML5は、新しい要素とAPIを含むHTMLのバージョンです。 H5は、HTML5に基づくモバイルアプリケーション開発フレームワークです。 HTML5はブラウザを介してコードを解析およびレンダリングしますが、H5アプリケーションはコンテナを実行し、JavaScriptを介してネイティブコードと対話する必要があります。

HTML5の重要な要素には、最新のWebページの構築に使用される、、,,,,などが含まれます。 1.ヘッドコンテンツを定義します。2。リンクをナビゲートするために使用されます。3。独立した記事のコンテンツを表します。4。ページコンテンツを整理します。5。サイドバーコンテンツを表示します。

HTML5とHTML5の略語であるHTML5とH5の間に違いはありません。 1.HTML5はHTMLの5番目のバージョンであり、Webページのマルチメディア関数とインタラクティブ機能を強化します。 2.H5は、HTML5ベースのモバイルWebページまたはアプリケーションを参照するためによく使用され、さまざまなモバイルデバイスに適しています。

HTML5は、W3Cによって標準化されたHyperText Markup言語の最新バージョンです。 HTML5は、新しいセマンティックタグ、マルチメディアサポート、フォームの強化、Web構造の改善、ユーザーエクスペリエンス、SEO効果を導入します。 HTML5は、Webページ構造をより明確にし、SEO効果をより良くするために、、、、、、などの新しいセマンティックタグを導入します。 HTML5はマルチメディア要素をサポートしており、サードパーティのプラグインは不要で、ユーザーエクスペリエンスと読み込み速度が向上します。 HTML5はフォーム関数を強化し、ユーザーエクスペリエンスを向上させ、フォーム検証効率を向上させるなどの新しい入力タイプを導入します。

クリーンで効率的なHTML5コードを書き込む方法は?答えは、タグのセマンティック、構造化されたコード、パフォーマンスの最適化、一般的な間違いを回避することにより、一般的な間違いを避けることです。 1.コードの読みやすさとSEO効果を改善するには、セマンティックタグなどを使用します。 2。適切なインデントとコメントを使用して、コードを構造化して読みやすいままにします。 3.不必要なタグを減らし、CDNを使用してコードを圧縮することにより、パフォーマンスを最適化します。 4.タグが閉じていないなどの一般的な間違いを避け、コードの有効性を確認してください。

H5は、マルチメディアサポート、オフラインストレージ、パフォーマンスの最適化により、Webユーザーエクスペリエンスを向上させます。 1)マルチメディアサポート:H5と要素は、開発を簡素化し、ユーザーエクスペリエンスを向上させます。 2)オフラインストレージ:WebStorageとIndexEdDBは、エクスペリエンスを改善するためにオフラインで使用できるようにします。 3)パフォーマンスの最適化:ウェブワーカーと要素は、パフォーマンスを最適化して帯域幅の消費を削減します。

HTML5コードは、タグ、要素、属性で構成されています。1。タグはコンテンツタイプを定義し、などの角度ブラケットに囲まれています。 2。要素は、startタグ、内容、および内容などのエンドタグで構成されています。 3。属性は、開始タグのキー値のペアを定義し、ような関数を強化します。これらは、Web構造を構築するための基本ユニットです。

HTML5は、最新のWebページを構築するための重要なテクノロジーであり、多くの新しい要素と機能を提供します。 1。HTML5は、Webページの構造とSEOを強化するなどのセマンティック要素を導入します。 2。プラグインなしのマルチメディア要素と埋め込みメディアをサポートします。 3.フォームは、新しい入力タイプと検証プロパティを強化し、検証プロセスを簡素化します。 4.オフラインおよびローカルストレージ機能を提供して、Webページのパフォーマンスとユーザーエクスペリエンスを向上させます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
