
- HTML5 教程
- HTML5 - 首頁
- HTML5 - 概述
- HTML5 - 語法
- HTML5 - 屬性
- HTML5 - 事件
- HTML5 - Web 表單 2.0
- HTML5 - SVG
- HTML5 - MathML
- HTML5 - Web 儲存
- HTML5 - Web SQL 資料庫
- HTML5 - 伺服器傳送事件
- HTML5 - WebSocket
- HTML5 - Canvas
- HTML5 - 音訊和影片
- HTML5 - 地理位置
- HTML5 - 微資料
- HTML5 - 拖放
- HTML5 - Web Workers
- HTML5 - IndexedDB
- HTML5 - Web 訊息傳遞
- HTML5 - Web CORS
- HTML5 - Web RTC
- HTML5 演示
- HTML5 - Web 儲存
- HTML5 - 伺服器傳送事件
- HTML5 - Canvas
- HTML5 - 音訊播放器
- HTML5 - 影片播放器
- HTML5 - 地理位置
- HTML5 - 拖放
- HTML5 - Web Worker
- HTML5 - Web幻燈片
- HTML5 工具
- HTML5 - SVG 生成器
- HTML5 - MathML
- HTML5 - Velocity 繪圖
- HTML5 - 二維碼
- HTML5 - Validator.nu 驗證
- HTML5 - Modernizr
- HTML5 - 驗證
- HTML5 - 線上編輯器
- HTML5 - 顏色程式碼生成器
- HTML5 標籤參考
- HTML5 - 問答
- HTML5 - 標籤參考
- HTML5 - 已棄用標籤
- HTML5 - 新標籤
- HTML5 資源
- HTML5 - 有用資源
- HTML5 - 討論
HTML5 Canvas - 縮放
HTML5 canvas 提供了`scale(x, y)`方法,用於增加或減少 canvas 網格中的單位。這可以用於繪製縮小或放大的形狀和點陣圖。
此方法採用兩個引數,其中 x 是水平方向的縮放因子,y 是垂直方向的縮放因子。兩個引數必須是正數。
小於 1.0 的值會減小單位大小,大於 1.0 的值會增加單位大小。將縮放因子設定為精確的 1.0 不會影響單位大小。
示例
以下是一個簡單的示例,它使用 spirograph 函式繪製九個具有不同縮放因子的形狀。
<!DOCTYPE HTML> <html> <head> <script type = "text/javascript"> function drawShape() { // get the canvas element using the DOM var canvas = document.getElementById('mycanvas'); // Make sure we don't execute when canvas isn't supported if (canvas.getContext) { // use getContext to use the canvas for drawing var ctx = canvas.getContext('2d'); ctx.strokeStyle = "#fc0"; ctx.lineWidth = 1.5; ctx.fillRect(0,0,300,300); // Uniform scaling ctx.save() ctx.translate(50,50); drawSpirograph(ctx,22,6,5); ctx.translate(100,0); ctx.scale(0.75,0.75); drawSpirograph(ctx,22,6,5); ctx.translate(133.333,0); ctx.scale(0.75,0.75); drawSpirograph(ctx,22,6,5); ctx.restore(); // Non uniform scaling (y direction) ctx.strokeStyle = "#0cf"; ctx.save() ctx.translate(50,150); ctx.scale(1,0.75); drawSpirograph(ctx,22,6,5); ctx.translate(100,0); ctx.scale(1,0.75); drawSpirograph(ctx,22,6,5); ctx.translate(100,0); ctx.scale(1,0.75); drawSpirograph(ctx,22,6,5); ctx.restore(); // Non uniform scaling (x direction) ctx.strokeStyle = "#cf0"; ctx.save() ctx.translate(50,250); ctx.scale(0.75,1); drawSpirograph(ctx,22,6,5); ctx.translate(133.333,0); ctx.scale(0.75,1); drawSpirograph(ctx,22,6,5); ctx.translate(177.777,0); ctx.scale(0.75,1); drawSpirograph(ctx,22,6,5); ctx.restore(); } else { alert('You need Safari or Firefox 1.5+ to see this demo.'); } } function drawSpirograph(ctx,R,r,O) { var x1 = R-O; var y1 = 0; var i = 1; ctx.beginPath(); ctx.moveTo(x1,y1); do { if (i>20000) break; var x2 = (R+r)*Math.cos(i*Math.PI/72) - (r+O)*Math.cos(((R+r)/r)*(i*Math.PI/72)) var y2 = (R+r)*Math.sin(i*Math.PI/72) - (r+O)*Math.sin(((R+r)/r)*(i*Math.PI/72)) ctx.lineTo(x2,y2); x1 = x2; y1 = y2; i++; } while (x2 != R-O && y2 != 0 ); ctx.stroke(); } </script> </head> <body onload = "drawShape();"> <canvas id = "mycanvas" width = "400" height = "400"></canvas> </body> </html>
以上示例將產生以下結果:
html5_canvas.htm
廣告