Let's start this tutorial by looking at the <canvas>
HTML element itself. At the end of this page, you will know how to set up a canvas 2D context and have drawn a first example in your browser.
<canvas>
å
ç´
<canvas id="tutorial" width="150" height="150"></canvas>
é¦å
ï¼å
ä¾çç <canvas>
ï¼å®çèµ·ä¾æé»å <img>
å
ç´ ï¼å
¶ä¸çå·®ç°é»å¨æ¼ <canvas>
æ²æ src
å alt
屬æ§ï¼<canvas>
åªæ width
è height
éå
©å屬æ§ï¼éå
©å屬æ§ççºéå¿
é ãè½éé DOM 屬æ§è¨å®ï¼è¥æ¯æ²æè¨å® width
å height
屬æ§ï¼ç«å¸å¯¬é è¨å¼çº 300 pixelsãé«é è¨å¼çº 150 pixelsï¼æåå¯ä»¥ç¨ CSS å¼·å¶è¨å®å
ç´ å°ºå¯¸ï¼ä½ç¶æ¸²ææï¼å½±åæç¸®æ¾ä»¥ç¬¦åå
ç´ ç尺寸ã
åè¨»ï¼ å¦æç¹ªåçµæçèµ·ä¾æäºææ²ï¼å¯ä»¥æ¹è©¦èç¨<canvas>èªèº«ç width å height 屬æ§èä¸è¦ç¨ CSS ä¾è¨å®å¯¬é«ã
幾乿æ HTML å ç´ é½æ id 屬æ§ï¼<canvas>ä¹ä¸ä¾å¤ï¼çºäºæ¹ä¾¿æ¼ç¨å¼ç¢¼è ³æ¬æ¾å°éè¦ç<canvas>ï¼æ¯æ¬¡é½è¨å® id æ¯ä¸é ä¸é¯ç使³ã
å¦åä¸è¬çå½±åå¯ä»¥è¨å®å¦éç(margin)ãéæ¡(border)ãèæ¯(background)ççï¼<canvas>å ç´ ä¸æ¨£å¯ä»¥è¨å®éäºæ¨£å¼ï¼ç¶èï¼éäºæ¨£å¼è¦åä¸æå½±é¿ canvas 實é繪åï¼ç¨å¾æåæçå°ç¸éç¯ä¾ãç¶æ²æå¥ç¨æ¨£å¼è¦å®æï¼<canvas>æè¢«åå§æå ¨éæã
é¯èª¤æ¿ä»£å §å®¹(Fallback content)å çºèçç覽å¨(ç¹å¥æ¯ IE9 ä¹åç IE)䏿¯æ´{<canvas>}å ç´ ï¼æåæè©²çºéäºçè¦½å¨æºåé¯èª¤æ¿ä»£å §å®¹ã
ç¶ä¸æ¯æ´<canvas>çç覽å¨çå°ä¸èªèç<canvas>ææå¿½ç¥<canvas>ï¼èæ¤æå¨<canvas>ä¸ç覽å¨èªèçæ¿ä»£å §å®¹åæè¢«ç覽å¨è§£æé¡¯ç¤ºï¼è³æ¼æ¯æ´<canvas>çç覽å¨åæ¯ææ£å¸¸è§£æ<canvas>ï¼å¿½ç¥æ¿ä»£å §å®¹ã
ä¾å¦ï¼æåå¯ä»¥æºå䏿®µ canvas å §å®¹ç說ææåæ canvas 繪å宿å¾çéæ åçï¼å¦ä¸æç¤º:
<canvas id="stockGraph" width="150" height="150">
current stock price: $3.15 +0.15
</canvas>
<canvas id="clock" width="150" height="150">
<img src="images/clock.png" width="150" height="150" alt="" />
</canvas>
éè¦</canvas>æ¨ç±¤
ä¸å<img>
å
ç´ ï¼<canvas>
å
ç´ å¿
é è¦æ</canvas>çµææ¨ç±¤ã
åè¨»ï¼ ç¸±ä½¿æ©æ Apple ç Safari ç覽å¨ä¸éè¦çµææ¨ç±¤ï¼ä½æ¯åºæ¼è¦ç¯ï¼éæ¯å¿ é çï¼æä»¥ï¼çºäºç¸å®¹æ§èéï¼æè©²è¦æçµææ¨ç±¤ãSafari 2.0 以åççæ¬æåæè§£æ canvas ä»¥åæ¿ä»£å §å®¹ï¼é¤éæåç¨ CSS å»é®èå §å®¹ï¼ä¸é幸éçæ¯ï¼ç¾å¨å·²ç¶æ²æç麼人å¨ç¨éäºèç Safariã
妿ä¸éè¦é¯èª¤æ¿ä»£å §å®¹ï¼ç°¡å®ç<canvas id="foo" ...></canvas>便å¯ä»¥å®å ¨ç¸å®¹æ¼æææ¯æ´çç覽å¨ã
渲æç°å¢(rendering context)<canvas>
ç¢çä¸ååºå®å¤§å°ç繪åç«å¸ï¼éåç«å¸ä¸æä¸æå¤å渲æç°å¢(rendering context)ï¼æåå¯ä»¥ç¨æ¸²æç°å¢ä¾ç¢çææä½é¡¯ç¤ºå
§å®¹ç渲æç°å¢(rendering context)ãä¸åç°å¢(context)å¯è½ææä¾ä¸ååæ
çæ¸²ææ¹å¼ï¼å¥½æ¯èªªWebGL使ç¨OpenGL ESç 3D ç°å¢(context)ï¼èé裡æå主è¦å°è¨è« 2D 渲æç°å¢(rendering context)ã
ä¸éå§ canvas çºç©ºç½ï¼ç¨å¼ç¢¼è
³æ¬éè¦å
å忏²æç°å¢ï¼å¨ä¸é¢ç¹ªåï¼ç¶å¾ææé¡¯ç¾å½±åã<canvas>
ç´ æä¸åæ¹æ³å« getContext()ï¼ééæ¤æ¹æ³å¯ä»¥å徿¸²æç°å¢åå
¶ç¹ªå彿¸ï¼functionï¼ï¼getContext() 輸å
¥åæ¸åªææ¸²æç°å¢é¡åä¸é
ï¼åæ¬æå¸æè¨è«ç 2D 繪åï¼å°±æ¯è¼¸å
¥ã2dãã
var canvas = document.getElementById("tutorial");
var ctx = canvas.getContext("2d");
ä¸é¢ç¬¬ä¸è¡å
å¼å«document.getElementById()
ä¾åå¾<canvas>
å
ç´ ï¼ä¸æ¦åå¾å
ç´ å¾ï¼ä¾¿å¯ä»¥ç¨å
¶ getContext()å徿¸²æç°å¢ã
æ¿ä»£å
§å®¹æè¢«ä¸æ¯æ´<canvas>
.ççè¦½å¨æé¡¯ç¤ºãç¨å¼ç¢¼è
³æ¬ä¹å¯ä»¥å©ç¨æª¢æ¥ getContext()æ¹æ³æ¯å¦åå¨ä¾æª¢æ¥æ¯å¦æ¯æ´<canvas>ï¼æåå¯ä»¥ä¿®æ¹ä¸é¢ä¾åæå¦ä¸:
var canvas = document.getElementById("tutorial");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
// drawing code here
} else {
// canvas-unsupported code here
}
ä¸åç¯æ¬
é裡æ¯ä¸åæç°¡å®çç¯æ¬ï¼ä¹å¾å°±æ¯æåç¯ä¾çèµ·å§é»ã
<html>
<head>
<title>Canvas tutorial</title>
<script type="text/javascript">
function draw() {
var canvas = document.getElementById("tutorial");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
}
}
</script>
<style type="text/css">
canvas {
border: 1px solid black;
}
</style>
</head>
<body onload="draw();">
<canvas id="tutorial" width="150" height="150"></canvas>
</body>
</html>
䏿¦ç¶²é è¼å
¥å®æå¾ï¼ç¨å¼ç¢¼æå¼å« draw()
彿¸ï¼éæ¯å©ç¨ document ä¸ç load
äºä»¶å®æï¼ï¼éé¡ draw()
彿¸ä¹å¯ä»¥éé window.setTimeout()
ãsetInterval()
æå
¶ä»äºä»¶èç彿¸ä¾å¼å«ï¼åªè¦å¼å«çæé黿¯å¨ç¶²é è¼å
¥å®å¾ã
鿝æåçç¯æ¬å¯¦éçèµ·ä¾ç樣å:
ä¸åç°¡å®çç¯ä¾é¦å ï¼è®æåå ä¾ç«å ©åç¸äº¤çæ£æ¹å½¢ï¼å ¶ä¸ä¸åæ£æ¹å½¢æ alpha éæå¼ï¼ä¹å¾æåæèªªæéæ¯å¦ä½éæçã
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<title>Canvas experiment</title>
</head>
<body>
<canvas id="canvas" width="150" height="150"></canvas>
<script type="application/javascript">
function draw() {
const canvas = document.getElementById("canvas");
if (canvas.getContext) {
const ctx = canvas.getContext("2d");
ctx.fillStyle = "rgb(200 0 0)";
ctx.fillRect(10, 10, 50, 50);
ctx.fillStyle = "rgb(0 0 200 / 50%)";
ctx.fillRect(30, 30, 50, 50);
}
}
draw();
</script>
</body>
</html>
æ¬ç¯ä¾ççµæå¦ä¸:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4