html中canvas怎么用 html中canvas畫布教程

canvashtml5提供的一個用于在網頁上繪制圖形的標簽,通過JavaScript控制,可用于繪圖、動畫和小游戲。1. 使用時首先在html中添加標簽并設置尺寸;2. 用javascript獲取canvas元素及上下文ctx進行繪圖操作;3. 可通過fillrect畫矩形、moveto/lineto畫線等方法實現圖形繪制;4. 性能優化包括離屏渲染、減少狀態改變、使用requestanimationframe、避免浮點坐標、優化clearrect區域;5. 實現交互需監聽鼠標鍵盤事件,并判斷點擊位置是否在圖形內;6. canvas適合高性能需求場景如游戲動畫,svg則適合需要可訪問性和頻繁修改圖形的場景。

html中canvas怎么用 html中canvas畫布教程

Canvas,簡單來說,就是html5提供的一個標簽,讓你可以在網頁上畫東西。你可以用JavaScript來控制它,畫各種圖形、圖像,做動畫,甚至搞一些小游戲。是不是聽起來就挺有意思?

html中canvas怎么用 html中canvas畫布教程

直接上干貨,告訴你怎么用canvas:

html中canvas怎么用 html中canvas畫布教程

  1. HTML 準備: 首先,在你的HTML文件中添加標簽。就像這樣:

    立即學習前端免費學習筆記(深入)”;

    html中canvas怎么用 html中canvas畫布教程

    <canvas id="myCanvas" width="500"    style="max-width:90%"></canvas>

    id屬性是為了方便你用JavaScript找到這個canvas元素。width和height定義了畫布的尺寸,非常重要,直接影響到你畫的東西的顯示效果。

  2. JavaScript 初始化: 接下來,用JavaScript獲取canvas元素,并獲取它的2D渲染上下文(context)。

    var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext('2d');

    ctx對象就是你用來畫東西的畫筆,所有的繪圖操作都通過它來進行。

  3. 開始畫畫: 現在,你可以用ctx對象提供的各種方法來畫東西了。比如,畫一個矩形:

    ctx.fillStyle = 'red'; // 設置填充顏色為紅色 ctx.fillRect(50, 50, 100, 80); // 畫一個矩形,左上角坐標(50, 50),寬度100,高度80

    再比如,畫一條線:

    ctx.beginPath(); // 開始一個新的路徑 ctx.moveTo(150, 50); // 移動畫筆到(150, 50) ctx.lineTo(250, 100); // 畫一條線到(250, 100) ctx.strokeStyle = 'blue'; // 設置線條顏色為藍色 ctx.stroke(); // 繪制線條

    注意,每次開始畫新的圖形之前,最好調用beginPath(),避免之前的樣式影響到新的圖形。

Canvas 的性能優化技巧有哪些?

Canvas的性能確實是個需要注意的點,特別是當你做復雜動畫或者處理大量圖形的時候。

  • 離屏渲染: 可以先在內存中創建一個臨時的canvas(也就是離屏canvas),在這個canvas上完成所有的繪制操作,然后再將這個離屏canvas的內容一次性繪制到主canvas上。這樣可以減少主canvas的重繪次數,提高性能。

    var offscreenCanvas = document.createElement('canvas'); offscreenCanvas.width = canvas.width; offscreenCanvas.height = canvas.height; var offscreenCtx = offscreenCanvas.getContext('2d');  // 在 offscreenCanvas 上繪制 offscreenCtx.fillStyle = 'green'; offscreenCtx.fillRect(0, 0, 100, 100);  // 將 offscreenCanvas 的內容繪制到主 canvas 上 ctx.drawImage(offscreenCanvas, 0, 0);
  • 減少狀態改變: Canvas的繪圖操作會涉及到很多狀態,比如fillStyle、strokeStyle、lineWidth等等。頻繁地改變這些狀態會影響性能。所以,盡量將使用相同狀態的繪圖操作放在一起執行。

  • 使用requestAnimationFrame: 做動畫的時候,不要使用setInterval或者setTimeout,而應該使用requestAnimationFrame。requestAnimationFrame會根據瀏覽器的刷新頻率來優化動畫的執行,避免不必要的重繪,提高性能。

  • 避免浮點數坐標: Canvas在處理浮點數坐標的時候會進行額外的計算,影響性能。所以,盡量使用整數坐標。如果你需要使用浮點數坐標,可以考慮對坐標進行取整操作。

  • clearRect 優化: clearRect方法用于清除canvas上的內容。如果你的canvas只需要清除一部分區域,那么就只清除這部分區域,不要清除整個canvas。

如何在 Canvas 中實現交互?

Canvas本身不具備dom元素的事件處理能力,所以要實現交互,需要自己監聽鼠標事件鍵盤事件等,然后根據事件發生的位置來判斷用戶點擊了哪個圖形,或者按下了哪個按鍵。

  • 監聽鼠標事件: 可以監聽mousedown、mouseup、mousemove、click等鼠標事件。

    canvas.addEventListener('click', function(event) {     var x = event.clientX - canvas.offsetLeft;     var y = event.clientY - canvas.offsetTop;      // 判斷點擊位置是否在某個圖形內部     if (isPointInRect(x, y, rectX, rectY, rectWidth, rectHeight)) {         // 用戶點擊了矩形         console.log('點擊了矩形');     } });  function isPointInRect(x, y, rectX, rectY, rectWidth, rectHeight) {     return x >= rectX && x <= rectX + rectWidth && y >= rectY && y <= rectY + rectHeight; }
  • 監聽鍵盤事件: 可以監聽keydown、keyup、keypress等鍵盤事件。注意,要讓canvas能夠接收鍵盤事件,需要先讓canvas獲得焦點。

  • 事件委托 如果canvas上有大量的圖形,那么為每個圖形都綁定事件監聽器會影響性能。可以使用事件委托,將事件監聽器綁定到canvas上,然后根據事件發生的位置來判斷用戶操作了哪個圖形。

  • 使用庫: 有一些JavaScript庫可以簡化Canvas的交互操作,比如fabric.JS、Konva.js等。這些庫提供了更高級的API,可以方便地創建、操作圖形,處理事件。

Canvas 和 SVG 有什么區別? 什么時候應該用 Canvas,什么時候應該用 SVG?

Canvas和SVG都是在網頁上繪制圖形的技術,但它們有很大的區別

  • Canvas: 基于像素的位圖。這意味著Canvas繪制出來的圖形實際上是由一個個像素點組成的。當你放大Canvas的時候,會看到像素顆粒。Canvas的優點是性能好,適合做動畫、游戲等需要頻繁重繪的場景。缺點是可訪問性差,不容易修改,因為一旦繪制完成,就很難單獨修改某個圖形。
  • SVG: 基于矢量的圖形。SVG繪制出來的圖形實際上是由一系列的指令組成的,比如“畫一條從A點到B點的直線”。當你放大SVG的時候,不會看到像素顆粒,圖形依然清晰。SVG的優點是可訪問性好,容易修改,因為每個圖形都是一個DOM元素,可以單獨修改樣式、添加事件監聽器。缺點是性能相對較差,不適合做復雜的動畫。

什么時候應該用Canvas,什么時候應該用SVG?

  • Canvas:
    • 需要高性能的場景,比如游戲、動畫、數據可視化等。
    • 圖形數量非常多,DOM元素會影響性能的場景。
    • 不需要頻繁修改圖形的場景。
  • SVG:
    • 需要可訪問性的場景,比如圖表、地圖等。
    • 需要頻繁修改圖形的場景。
    • 圖形數量比較少,DOM元素不會影響性能的場景。

總的來說,Canvas和SVG各有優缺點,選擇哪種技術取決于你的具體需求。如果你需要高性能,并且不需要頻繁修改圖形,那么Canvas是更好的選擇。如果你需要可訪問性,并且需要頻繁修改圖形,那么SVG是更好的選擇。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享