目次
簡単な説明
キャンバスの基本
2D コンテキスト API
基本ライン
パス
插入图像
像素级操作
文字
阴影
颜色渐变
canvas 演示
小节
ホームページ ウェブフロントエンド H5 チュートリアル HTML5 キャンバスの基本構文_html5 チュートリアルのスキル

HTML5 キャンバスの基本構文_html5 チュートリアルのスキル

May 16, 2016 pm 03:51 PM
canvas html

HTML 5 キャンバス - 基本構文

簡単な説明

5 仕様では多くの新機能が導入されており、最も期待されている機能の 1 つは 要素です。 HTML 5 は、JavaScript を通じてグラフィックスを描画する方法を提供します。これは、使い方が簡単でありながら強力です。各要素には、任意の形状を描画できる「コンテキスト」 (製図板のページを思い浮かべてください) があります。ブラウザは複数のキャンバス コンテキストをサポートし、さまざまな .html を通じてグラフィック描画機能を提供します。 5 仕様では多くの新機能が導入されており、最も期待されている機能の 1 つは 要素です。 5 は、JavaScript を通じてグラフィックを描画するための、使いやすく強力なメソッドを提供します。各要素には、任意の形状を描画できる「コンテキスト」 (製図板のページを思い浮かべてください) があります。ブラウザは複数のキャンバス コンテキストをサポートし、さまざまな .html を通じてグラフィック描画機能を提供します。

Opera、Firefox、Konqueror、Safari など、ほとんどのブラウザは 2D キャンバス コンテキストをサポートしています。さらに、Opera の一部のバージョンは 3D キャンバスもサポートしており、Firefox もプラグインを通じて 3D キャンバスをサポートできます:

  • 3D キャンバス、HTML ビデオ、ファイル I/O をサポートする Opera をダウンロード
  • Opera 3D キャンバス コンテキストに関する記事
  • Firefox 3D キャンバスに関する記事
    コンテキスト

この記事では、2D キャンバス
の基礎と、線、図形、画像、テキストなどの基本的なキャンバス機能の使用方法を紹介します。この記事を理解するには、JavaScript の基本を理解している必要があります。

ここをクリックすると、この記事のサンプル コードを一括でダウンロードできます

キャンバスの基本

キャンバスを作成する方法は非常に簡単です。HTML<font face="NSimsun"><canvas><code><font face="NSimsun"><canvas></canvas></font>を追加するだけです。ページ > 要素:

<code><canvas id="myCanvas" width="300" height="150">
Fallback content, in case the browser does not support Canvas.
</canvas></code>
ログイン後にコピー

JavaScript で要素を参照するには、要素の ID を設定するのが最善であり、キャンバスの高さと幅も設定する必要があります。

キャンバスを作成したら、ブラシを準備しましょう。キャンバスにグラフィックを描画するには、JavaScript が必要です。まず、<font face="NSimsun"> getElementById<code><font face="NSimsun"> getElementById</font> 関数を使用して Canvas
要素を見つけてから、コンテキストを初期化します。その後、コンテキスト API を使用してさまざまなグラフィックを描画できます。次のスクリプトは、キャンバスに四角形を描画します (効果を確認するには、ここをクリックしてください):

<code>// Get a reference to the element.
var elem = document.getElementById('myCanvas');

// Always check for properties 和 methods, to make sure your code doesn't break 
// in other browsers.
if (elem && elem.getContext) {
  // Get the 2d context.
  // Remember: you can only initialize one context per element.
  var context = elem.getContext('2d');
  if (context) {
    // You are done! Now you can draw your first rectangle.
    // You only need to provide the (x,y) coordinates, followed by the width and 
    // height dimensions.
    context.fillRect(0, 0, 150, 100);
  }
}</code>
ログイン後にコピー

上記のコードは、ドキュメントの <font face="NSimsun">head<code><font face="NSimsun">head</font> セクションまたは外部ファイルに配置できます。

2D コンテキスト API

キャンバスの作成方法を紹介した後、2D キャンバス API を見て、これらの関数で何ができるかを見てみましょう。

基本ライン

上の例は、長方形を描くのがいかに簡単かを示しています。

fillStyle プロパティと ストロークスタイル プロパティを使用して、長方形の塗りつぶしと線を簡単に設定できます。カラー値にはメソッドと16進数、()、()、()が使用されます(Opera10やFirefox 3などのブラウザがサポートしている場合)。 16 進数、()、()、() (Opera10 や Firefox 3 などのブラウザでサポートされている場合)。

<font face="NSimsun">fillRect<code><font face="NSimsun">fillRect</font> を使用すると、塗りつぶされた四角形を描画できます。 <font face="NSimsun">strokeRect<code><font face="NSimsun">strokeRect</font> を使用して、境界線のみで塗りつぶしのない四角形を描画します。キャンバスの一部をクリアしたい場合は、<font face="NSimsun">clearRect<code><font face="NSimsun">clearRect</font> を使用できます。上記 3 つのメソッドのパラメータは同じです: xywidthheight。最初の 2 つのパラメータは (x,y) 座標を設定し、最後の 2 つのパラメータは長方形の高さと幅を設定します。

lineWidth 属性を使用して線の太さを変更できます。 <font face="NSimsun">fillRect<code><font face="NSimsun">fillRect</font>
<font face="NSimsun">StrokeRect<code><font face="NSimsun">strokeRect</font> clearRect<code><font face="NSimsun">clearRect</font> およびその他の例:

<code>context.fillStyle   = '#00f'; // blue
context.strokeStyle = '#f00'; // red
context.lineWidth   = 4;

// Draw some rectangles.
context.fillRect  (0,   0, 150, 50);
context.strokeRect(0,  60, 150, 50);
context.clearRect (30, 25,  90, 60);
context.strokeRect(30, 25,  90, 60);</code>
ログイン後にコピー

この例のレンダリングを図 1 に示します。

Example render of fillRect, strokeRect and clearRect.

図 1: fillRect、strokingRect、および
clearRect レンダリング

パス

キャンバス パスを通じて任意の形状を描画できます。最初にアウトラインを描画し、次に境界線と塗りつぶしを描画できます。カスタム形状の作成は簡単です。<font face="NSimsun"> beginPath()<code><font face="NSimsun"> beginPath()</font> を使用して描画を開始し、線、曲線、その他の形状を使用して形状を描画します。描画後、<font face="NSimsun">fill<code><font face="NSimsun">fill</font><font face="NSimsun">ストローク<code><font face="NSimsun">stroke</font> を呼び出して、 fill を追加するか、 border を設定します。 <font face="NSimsun"> closePath()<code><font face="NSimsun"> closePath()</font> を呼び出して、カスタム グラフィックスの描画を終了します。

これは三角形を描く例です:

<code>// Set the style properties.
context.fillStyle   = '#00f';
context.strokeStyle = '#f00';
context.lineWidth   = 4;

context.beginPath();
// Start from the top-left point.
context.moveTo(10, 10); // give the (x,y) coordinates
context.lineTo(100, 10);
context.lineTo(10, 100);
context.lineTo(10, 10);

// Done! Now fill the shape, 和 draw the stroke.
// Note: your shape will not be visible until you call any of the two methods.
context.fill();
context.stroke();
context.closePath();</code>
ログイン後にコピー

レンダリングを図 2 に示します。

HTML5 キャンバスの基本構文_html5 チュートリアルのスキル

图 2: 三角形

另一个较负责的例子中使用了直线、曲线和圆弧。

插入图像

<font face="NSimsun">drawImage</font> 方法允许在 canvas 中插入其他图像
(<font face="NSimsun"> img</font><font face="NSimsun">canvas</font> 元素) 。在 Opera 中可以再 canvas 中绘制 SVG 图形。此方法比较复杂,可以有3个、5个或9个参数:

  • 3个参数:最基本的 <font face="NSimsun">drawImage</font> 使用方法。一个参数指定图像位置,另两个参数设置图像在 canvas中的位置。
  • 5个参数:中级的 <font face="NSimsun">drawImage</font> 使用方法,包括上面所述3个参数,加两个参数指明插入图像宽度和高度 (如果你想改变图像大小)。
  • 9个参数:最复杂 <font face="NSimsun">drawImage</font> 杂使用方法,包含上述5个参数外,另外4个参数设置源图像中的位置和高度宽度。这些参数允许你在显示图像前动态裁剪源图像。

下面是上述三个使用方法的例子:

<code>// Three arguments: the element, destination (x,y) coordinates.
context.drawImage(<var>img_elem</var>, <var>dx</var>, <var>dy</var>);

// Five arguments: the element, destination (x,y) coordinates, and destination 
// width and height (if you want to resize the source image).
context.drawImage(<var>img_elem</var>, <var>dx</var>, <var>dy</var>, <var>dw</var>, <var>dh</var>);

// Nine arguments: the element, source (x,y) coordinates, source width and 
// height (for cropping), destination (x,y) coordinates, and destination width 
// and height (resize).
context.drawImage(<var>img_elem</var>, <var>sx</var>, <var>sy</var>, <var>sw</var>, <var>sh</var>, <var>dx</var>, <var>dy</var>, <var>dw</var>, <var>dh</var>);</code>
ログイン後にコピー

其效果见图3.

Example rendering of drawImage.

图 3: <font face="NSimsun">drawImage</font> 效果图。

像素级操作

2D Context API 提供了三个方法用于像素级操作:<font face="NSimsun">createImageData</font>, <font face="NSimsun">getImageData</font>, 和
<font face="NSimsun">putImageData</font>

<font face="NSimsun">ImageData</font>对象保存了图像像素值。每个对象有三个属性: width, height
datadata 属性类型为CanvasPixelArray,用于储存<font face="NSimsun"><var>width</var>*<var>height</var>*4</font>个像素值。每一个像素有RGB值和透明度alpha值(其值为 0 至
255,包括alpha在内!)。像素的顺序从左至右,从上到下,按行存储。

为了更好的理解其原理,让我们来看一个例子——绘制红色矩形

<code>// Create an ImageData object.
var imgd = context.createImageData(50,50);
var pix = imgd.data;

// Loop over each pixel 和 set a transparent red.
for (var i = 0; n = pix.length, i </code>
ログイン後にコピー

注意: 不是所有浏览器都实现了<font face="NSimsun"> createImageData</font>。在支持的浏览器中,需要通过<font face="NSimsun"> getImageData</font> 方法获取<font face="NSimsun"> ImageData</font> 对象。请参考示例代码。

通过 <font face="NSimsun">ImageData</font> 可以完成很多功能。如可以实现图像滤镜,或可以实现数学可视化 (如分形和其他特效)。下面特效实现了简单的颜色反转滤镜:

<code>// Get the <code>CanvasPixelArray</code> from the given coordinates and dimensions.
var imgd = context.getImageData(<var>x</var>, <var>y</var>, <var>width</var>, <var>height</var>);
var pix = imgd.data;

// Loop over each pixel and invert the color.
for (var i = 0, n = pix.length; i ImageData</code> at the given (x,y) coordinates.
context.putImageData(imgd, <var>x</var>, <var>y</var>);
ログイン後にコピー

图 4 显示了使用此滤镜后的 Opera
图像 (图 3是原图)。

Example rendering of the invert color filter.

图 4: 颜色反转滤镜

文字

虽然最近的 WebKit 版本和 Firefox 3.1 nightly build 才开始支持 Text API ,为了保证文章完整性我决定仍在这里介绍文字 API 。

<font face="NSimsun">context</font> 对象可以设置以下 text 属性:

  • <font face="NSimsun">font</font>:文字字体,同属性 属性
  • <font face="NSimsun">textAlign</font>:文字水平对齐方式。可取属性值: <font face="NSimsun">start</font>, <font face="NSimsun">end</font>, <font face="NSimsun">left</font>,
    <font face="NSimsun">right</font>, <font face="NSimsun">center</font>。默认值:
    <font face="NSimsun">start</font>.
  • <font face="NSimsun">textBaseline</font>:文字竖直对齐方式。可取属性值:<font face="NSimsun">top</font>, <font face="NSimsun">hanging</font>, <font face="NSimsun">middle</font>,
    <font face="NSimsun">alphabetic</font>, <font face="NSimsun">ideographic</font>, <font face="NSimsun">bottom</font>。默认值:<font face="NSimsun">alphabetic</font>.

有两个方法可以绘制文字: <font face="NSimsun">fillText</font><font face="NSimsun">strokeText</font>。第一个绘制带 fillStyle 填充的文字,后者绘制只有 strokeStyle 边框的文字。两者的参数相同:要绘制的文字和文字的位置(x,y) 坐标。还有一个可选选项——最大宽度。如果需要的话,浏览器会缩减文字以让它适应指定宽度。

文字对齐属性影响文字与设置的
(x,y) 坐标的相对位置。

下面是一个在 canvas 中绘制"hello world" 文字的例子

<code>context.fillStyle    = '#00f';
context.font         = 'italic 30px sans-serif';
context.textBaseline = 'top';
context.fillText  ('Hello world!', 0, 0);
context.font         = 'bold 30px sans-serif';
context.strokeText('Hello world!', 0, 50);</code>
ログイン後にコピー

图 5 是其效果图。

Example text render.

图 5: 文字效果

阴影

目前只有 Konqueror 和 Firefox 3.1 nightly build 支持 Shadows API 。API 的属性为:

  • <font face="NSimsun">shadowColor</font>:阴影颜色。其值和 CSS 颜色值一致。
  • <font face="NSimsun">shadowBlur</font>:设置阴影模糊程度。此值越大,阴影越模糊。其效果和 Photoshop 的高斯模糊滤镜相同。
  • <font face="NSimsun">shadowOffsetX</font><font face="NSimsun">shadowOffsetY</font>:阴影的 x 和 y 偏移量,单位是像素。

下面是 canvas 阴影的例子:

<code>context.shadowOffsetX = 5;
context.shadowOffsetY = 5;
context.shadowBlur    = 4;
context.shadowColor   = 'rgba(255, 0, 0, 0.5)';
context.fillStyle     = '#00f';
context.fillRect(20, 20, 150, 100);</code>
ログイン後にコピー

其效果见图 6。

Example canvas shadow - a blue rectangle with a red shadow.

图 6: canvas 阴影效果——蓝色矩形,红色阴影

颜色渐变

除了 CSS 颜色,<font face="NSimsun"> fillStyle</font><font face="NSimsun">strokeStyle</font> 属性可以设置为 <font face="NSimsun">CanvasGradient</font> 对象。——通过 <font face="NSimsun">CanvasGradient</font>可以为线条和填充使用颜色渐变。

欲创建 <font face="NSimsun">CanvasGradient</font> 对象,可以使用两个方法:<font face="NSimsun">createLinearGradient</font><font face="NSimsun">createRadialGradient</font>。前者创建线性颜色渐变,后者创建圆形颜色渐变。

创建颜色渐变对象后,可以使用对象的 <font face="NSimsun">addColorStop</font> 方法添加颜色中间值。

下面的代码演示了颜色渐变使用方法:

<code>// You need to provide the source 和 destination (x,y) coordinates 
// for the gradient (from where it starts 和 where it ends).
var gradient1 = context.createLinearGradient(<var>sx</var>, <var>sy</var>, <var>dx</var>, <var>dy</var>);

// Now you can add colors in your gradient.
// The first argument tells the position for the color in your gradient. The 
// accepted value range is from 0 (gradient start) to 1 (gradient end).
// The second argument tells the color you want, using the CSS color format.
gradient1.addColorStop(0,   '#f00'); // red
gradient1.addColorStop(0.5, '#ff0'); // yellow
gradient1.addColorStop(1,   '#00f'); // blue

// For the radial gradient you also need to provide source
// 和 destination circle radius.
// The (x,y) coordinates define the circle center points (start 和 
// destination).
var gradient2 = context.createRadialGradient(<var>sx</var>, <var>sy</var>, <var>sr</var>, <var>dx</var>, <var>dy</var>, <var>dr</var>);

// Adding colors to a radial gradient is the same as adding colors to linear 
// gradients.</code>
ログイン後にコピー

我也准备了一个更复杂的例子,使用了线性颜色渐变、阴影和文字。其效果见图 7。

Example rendering using a linear gradient.

图 7: 使用线性颜色渐变的例子

canvas 演示

如果你想知道使用 Canvas可以做些什么,可以参看以下的工程:

  • Opera Widget:
    • SimAquarium
    • Artist's
      Sketchbook
    • Spirograph
  • 在线工程和演示
    • Newton polynomial
    • Canvascape - "3D Walker"
    • Paint.Web - painting
      demo, open-source
    • Star-field
      flight
    • Interactive blob

小节

Canvas 是 HTML 5最让人期待的特性之一,目前已获得大部分 Web 浏览器支持。Canvas 可以帮助创建游戏、增强图形用户界面。2D context
API 提供大量图形绘制功能——我希望通过本文你了解了 canvas 使用,并且你有兴趣了解更多!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLの表の境界線 HTMLの表の境界線 Sep 04, 2024 pm 04:49 PM

HTML の表の境界線に関するガイド。ここでは、HTML でのテーブルの境界線の例を示しながら、テーブル境界線を定義する複数の方法について説明します。

HTML 左マージン HTML 左マージン Sep 04, 2024 pm 04:48 PM

HTML マージン左のガイド。ここでは、HTML margin-left の概要とその例、およびそのコード実装について説明します。

HTML のネストされたテーブル HTML のネストされたテーブル Sep 04, 2024 pm 04:49 PM

これは、HTML でのネストされたテーブルのガイドです。ここでは、テーブル内にテーブルを作成する方法をそれぞれの例とともに説明します。

HTML テーブルのレイアウト HTML テーブルのレイアウト Sep 04, 2024 pm 04:54 PM

HTML テーブル レイアウトのガイド。ここでは、HTML テーブル レイアウトの値と例および出力について詳しく説明します。

HTML入力プレースホルダー HTML入力プレースホルダー Sep 04, 2024 pm 04:54 PM

HTML 入力プレースホルダーのガイド。ここでは、コードと出力とともに HTML 入力プレースホルダーの例について説明します。

HTML 順序付きリスト HTML 順序付きリスト Sep 04, 2024 pm 04:43 PM

HTML 順序付きリストのガイド。ここでは、HTML 順序付きリストと型の導入とその例についても説明します。

HTML 内のテキストの移動 HTML 内のテキストの移動 Sep 04, 2024 pm 04:45 PM

HTML でのテキストの移動に関するガイド。ここでは、概要、マーキー タグが構文でどのように機能するか、および実装例について説明します。

HTML の onclick ボタン HTML の onclick ボタン Sep 04, 2024 pm 04:49 PM

HTML オンクリック ボタンのガイド。ここでは、それらの紹介、動作、例、およびさまざまなイベントでの onclick イベントについてそれぞれ説明します。

See all articles