摘要:使用繪圖基本用法要使用元素,必須先設置其和屬性,指定可以繪圖的區域大小。,將繪圖游標移動到,不畫線。,表示文本對齊方式。執行這個變換之后,坐標會變成之前由表示的點。,后繪制的圖形完全替代與之重疊的先繪制圖形。也實現了,但默認是禁用的。
使用Canvas繪圖 基本用法
要使用
A drawing of something
要在這塊畫布上繪圖,需要取得繪圖上下文,而取得繪圖上下文對象的引用,需要調用getContext()方法并傳入上下文的名字,傳入"2d",就可以取得2D上下文的對象
var drawing=document.getElementById("drawing"); //確定瀏覽器支持元素 if(drawing.getContext){ var context=drawing.getContext("2d"); //更多代碼 }
在使用
var drawing=document.getElementById("drawing"); //確定瀏覽器支持2D上下文元素 if(drawing.getContext){ //取得圖像的數據URI var imgURI=drawing.toDataURL("image/png"); //顯示圖像 var image=document.createElement("img"); image.src=imgURI; document.body.appendChild(image); }
2D上下文的坐標開始于
操作得結果取決于兩個屬性,fillStyle和strokeStyle
這兩個屬性的值可以是字符串,漸變對象或模擬對象,而且它們的默認值都是"#000000"
var drawing=document.getElementById("drawing"); //確定瀏覽器支持繪制矩形元素 if(drawing.getContext){ var content=drawing.getContext("2d"); context.strokeStyle="red"; context.fillStyle="#0000ff" }
與矩形相關的方法包括fillRect()、strokeRect()、clearRect()三個方法接收4個參數,矩形的x坐標、矩形的y坐標、矩形的寬度和矩形的高度。這些參數的單位都是像素
fillRect()方法在畫布上繪制的矩形會填充指定的顏色
var drawing = document.getElementById("drawing"); //確定瀏覽器支持元素 if (drawing.getContext){ var context = drawing.getContext("2d"); // 繪制紅色矩形 context.fillStyle = "#ff0000"; context.fillRect(10, 10, 50, 50); // 繪制半透明的藍色矩形 context.fillStyle = "rgba(0,0,255,0.5)"; context.fillRect(30, 30, 50, 50); }
strokeRect()方法在畫布上繪制的矩形會使用指定的顏色描邊,描邊顏色通過strokeStyle屬性指定
var drawing=document.getElementById("drawing"); //確定瀏覽器支持元素 if(drawing.getContext){ var context=drawing.getContext("2d"); //繪制紅色描邊矩形 context.strokeStyle="#ff0000"; context.strokeRect(10,10,50,50); //繪制半透明的藍色描邊矩形 context.strokeStyle="rgba(0,0,255,0.5)"; context.strokeRect(30,30,50,50) }
clearRect()方法用于清除畫布上的矩形區域,本質上,這個方法可以把繪制上下文中的某一矩形區域變透明
var drawing = document.getElementById("drawing"); //確定瀏覽器支持繪制路徑元素 if (drawing.getContext){ var context = drawing.getContext("2d"); //繪制紅色矩形 context.fillStyle = "#ff0000"; context.fillRect(10, 10, 50, 50); //繪制半透明的藍色矩形 context.fillStyle = "rgba(0,0,255,0.5)"; context.fillRect(30, 30, 50, 50); // 在兩個矩形重疊的地方清除一個小矩形 context.clearRect(40, 40, 10, 10); }
要繪制路徑,首先必須調用beginPath()方法,表示要開始繪制的新路徑
arc(x, y, radius, startAngle, endAngle, counterclockwise),以 (x,y) 為圓心繪制一條弧線,弧線半徑為 radius ,起始和結束角度(用弧度表示)分別為 startAngle 和endAngle 。最后一個參數表示 startAngle 和 endAngle 是否按逆時針方向計算,值為 false表示按順時針方向計算。
arcTo(x1, y1, x2, y2, radius),從上一點開始繪制一條弧線,到 (x2,y2) 為止,并且以給定的半徑 radius 穿過 (x1,y1) 。
bezierCurveTo(c1x, c1y, c2x, c2y, x, y),從上一點開始繪制一條曲線,到 (x,y) 為止,并且以 (c1x,c1y) 和 (c2x,c2y) 為控制點。
lineTo(x, y),從上一點開始繪制一條直線,到 (x,y) 為止。
moveTo(x, y),將繪圖游標移動到 (x,y) ,不畫線。
quadraticCurveTo(cx, cy, x, y),從上一點開始繪制一條二次曲線,到 (x,y) 為止,并且以 (cx,cy) 作為控制點。
rect(x, y, width, height),從點 (x,y) 開始繪制一個矩形,寬度和高度分別由 width 和height 指定。這個方法繪制的是矩形路徑,而不是 strokeRect() 和 fillRect() 所繪制的獨立的形狀。
var drawing = document.getElementById("drawing"); //確定瀏覽器支持繪制文本元素 if (drawing.getContext){ var context = drawing.getContext("2d"); // 開始路徑 context.beginPath(); // 繪制外圓 context.arc(100, 100, 99, 0, 2 * Math.PI, false); // 繪制內圓 context.moveTo(194, 100); context.arc(100, 100, 94, 0, 2 * Math.PI, false); // 繪制分針 context.moveTo(100, 100); context.lineTo(100, 15); // 繪制時針 context.moveTo(100, 100); context.lineTo(35, 100); // 描邊路徑 context.stroke(); }
繪制文本主要兩個方法:fillText()和strokeText()。這兩個方法都可以接收4個參數:要繪制的文本字符串、x坐標、y坐標和可選的最大像素寬度
這兩個方法以3個屬性為基礎
font,表示文本樣式、大小及字體,用 CSS 中指定字體的格式來指定,例如 "10px Arial" 。
textAlign,表示文本對齊方式。可能的值有 "start" 、 "end" 、 "left" 、 "right" 和 "center" 。建議使用 "start" 和 "end" ,不要使用 "left" 和 "right" ,因為前兩者的意思更穩妥,能同時適合從左到右和從右到左顯示(閱讀)的語言。
textBaseline,表示文本的基線。可能的值有 "top" 、 "hanging" 、 "middle" 、 "alphabetic" 、"ideographic" 和 "bottom" 。
//正常 context.font = "bold 14px Arial"; context.textAlign = "center"; context.textBaseline = "middle"; context.fillText("12", 100, 20); // 起點對齊 context.textAlign = "start"; context.fi llText("12", 100, 40); // 終點對齊 context.textAlign = "end"; context.fi llText("12", 100, 60);變換
修改變換矩陣
rotate(angle),圍繞原點旋轉圖像 angle 弧度。
scale(scaleX, scaleY),縮放圖像,在 x 方向乘以 scaleX ,在 y 方向乘以 scaleY 。 scaleX和 scaleY 的默認值都是 1.0。
translate(x, y),將坐標原點移動到 (x,y) 。執行這個變換之后,坐標(0,0)會變成之前由 (x,y)表示的點。
transform(m1_1, m1_2, m2_1, m2_2, dx, dy),直接修改變換矩陣,方式是乘以如下矩陣。
m1_1 m1_2 dx
m2_1 m2_2 dy
0 0 1
setTransform(m1_1, m1_2, m2_1, m2_2, dx, dy),將變換矩陣重置為默認狀態,然后再調用 transform()
var drawing = document.getElementById("drawing"); //確定瀏覽器支持繪制圖像元素 if (drawing.getContext){ var context = drawing.getContext("2d"); //開始路徑 context.beginPath(); //繪制外圓 context.arc(100, 100, 99, 0, 2 * Math.PI, false); //繪制內圓 context.moveTo(194, 100); context.arc(100, 100, 94, 0, 2 * Math.PI, false); //變換原點 context.translate(100, 100); // 旋轉表針 context.rotate(1); //繪制分針 context.moveTo(0,0); context.lineTo(0, -85); //繪制時針 context.moveTo(0, 0); context.lineTo(-65, 0); //描邊路徑 context.stroke(); }
使用drawImage()將圖像繪制到畫布上,三種不同的參數組合
3個參數:傳入HTML元素,繪制圖像的起點的x和y坐標
5個參數:3個參數+目標寬度和目標高度
9個參數:要繪制的圖像,源圖像的x坐標,源圖像的y坐標,源圖像的寬度,源圖像的高度,目標圖像的x坐標,目標圖像的y坐標,目標圖像的寬度,目標圖像的高度
陰影
2D上下文根據屬性值自動繪制陰影
shadowColor,用 CSS 顏色格式表示的陰影顏色,默認為黑色。
shadowOffsetX,形狀或路徑 x 軸方向的陰影偏移量,默認為 0。
shadowOffsetY,形狀或路徑 y 軸方向的陰影偏移量,默認為 0。
shadowBlur,模糊的像素數,默認 0,即不模糊。
var context = drawing.getContext("2d"); // 設置陰影 context.shadowOffsetX = 5; context.shadowOffsetY = 5; context.shadowBlur = 4; context.shadowColor = "rgba(0, 0, 0, 0.5)"; //繪制紅色矩形 context.fillStyle = "#ff0000"; context.fillRect(10, 10, 50, 50); //繪制藍色矩形 context.fillStyle = "rgba(0,0,255,1)"; context.fillRect(30, 30, 50, 50);漸變
要創建一個新的線性漸變,可以調用createLinearGradient()方法,這個方法接收4個參數:起點的x坐標、起點的y坐標、終點的x坐標、終點的y坐標
//繪制紅色矩形 context.fillStyle="#ff0000"; context.fillRect(10,10,50,50); //繪制漸變矩形 context.fillStyle=gradient; context.fillRect(30,30,50,50);模式
var image=document.images[0], pattern=context.createPattern(image,"repeat"); //繪制矩形 context.fillStyle=pattern; context.fillRect(10,10,150,150);使用圖像數據
getImageData()取得原始圖像數據,這個方法接收4個參數:要取得其數據的畫面區域的x和y坐標以及該區域的像素寬度和高度
var drawing = document.getElementById("drawing"); //確定瀏覽器支持合成元素 if (drawing.getContext){ var context = drawing.getContext("2d"), image = document.images[0], imageData, data, i, len, average, red, green, blue, alpha; //繪制原始圖像 context.drawImage(image, 0, 0); //取得圖像數據 imageData = context.getImageData(0, 0, image.width, image.height); data = imageData.data; for (i=0, len=data.length; i < len; i+=4){ red = data[i]; green = data[i+1]; blue = data[i+2]; alpha = data[i+3]; //求得 rgb 平均值 average = Math.floor((red + green + blue) / 3); //設置顏色值,透明度不變 data[i] = average; data[i+1] = average; data[i+2] = average; } //回寫圖像數據并顯示結果 imageData.data = data; context.putImageData(imageData, 0, 0); }
應用到2D上下文所有繪制操作得屬性。globalAlpha和globalCompositionOperation
globalAlpha是一個介于0和1之間的值,用于指定所有繪制的透明度,默認值為0,如果所有后續操作都要基于相同的透明度,就可以先把globalAlpha設置為適當值,然后繪制,最后再把它設置回默認值0
//繪制紅色矩形 context.fillStyle = "#ff0000"; context.fillRect(10, 10, 50, 50); //修改全局透明度 context.globalAlpha = 0.5; //繪制藍色矩形 context.fillStyle = "rgba(0,0,255,1)"; context.fillRect(30, 30, 50, 50); //重置全局透明度 context.globalAlpha = 0
globalCompositionOperation表示繪制的圖形怎樣與先繪制的圖形結合,這個屬性的值是字符串
source-over默認值,后繪制的圖形位于先繪制的圖形上方。
source-in,后繪制的圖形與先繪制的圖形重疊的部分可見,兩者其他部分完全透明。
source-out,后繪制的圖形與先繪制的圖形不重疊的部分可見,先繪制的圖形完全透明。
source-atop,后繪制的圖形與先繪制的圖形重疊的部分可見,先繪制圖形不受影響。
destination-over,后繪制的圖形位于先繪制的圖形下方,只有之前透明像素下的部分才可見。
destination-in,后繪制的圖形位于先繪制的圖形下方,兩者不重疊的部分完全透明。
destination-out,后繪制的圖形擦除與先繪制的圖形重疊的部分。
destination-atop,后繪制的圖形位于先繪制的圖形下方,在兩者不重疊的地方,先繪制的圖形會變透明。
lighter,后繪制的圖形與先繪制的圖形重疊部分的值相加,使該部分變亮。
copy,后繪制的圖形完全替代與之重疊的先繪制圖形。
xor,后繪制的圖形與先繪制的圖形重疊的部分執行“異或”操作。
WebGL 類型化數組類型化數組也是數組,只不過其元素被設置為特定類型的值
類型化數組的核心就是一個名為ArrayBuffer的類型。
WebGL上下文 支持Firefox 4+和 Chrome 都實現了 WebGL API。Safari 5.1 也實現了 WebGL,但默認是禁用的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108525.html
摘要:游戲開發實戰主要講解使用來開發和設計各類常見游戲的思路和技巧,在介紹相關特性的同時,還通過游戲開發實例深入剖析了其內在原理,讓讀者不僅知其然,而且知其所以然。HTML5 Canvas游戲開發實戰主要講解使用HTML5 Canvas來開發和設計各類常見游戲的思路和技巧,在介紹HTML5 Canvas相關特性的同時,還通過游戲開發實例深入剖析了其內在原理,讓讀者不僅知其然,而且知其所以然。在本書...
摘要:基本概念語法區分大小寫,中的一切變量函數名和操作符都區分大小寫。要將一個值轉換成對應的值,可以調用類型包括整數和浮點數值,基本數值字面量格式是十進制整數,除了十進制外還有八進制十六進制。八進制第一位必須是,十六進制第一位必須是。 基本概念 語法 區分大小寫,ECMAScript中的一切(變量、函數名和操作符)都區分大小寫。函數名不能使用typeof,因為它是一個關鍵字,但typeOf...
摘要:對象的核心對象是,它表示瀏覽器的一個實例。而和則表示該容器中頁面視圖區的大小。在中,與返回相同的值,即視口大小而非瀏覽器窗口大小。第三個參數是一個逗號分隔的設置字符串,表示在新窗口中都顯示哪些特性。這應該是用戶打開窗口后的第一個頁面 BOM window對象 BOM的核心對象是window,它表示瀏覽器的一個實例。在瀏覽器中,window對象有雙重角色,它既是通過JavaScript訪...
摘要:簡介簡史誕生于年,當時主要負責表單的輸入驗證。實現一個完整的由三部分組成核心文檔對象模型瀏覽器對象模型就是對實現該標準規定的各個方面內容的語言的描述。把整個頁面映射為一個多層節點結構。由萬維網聯盟規劃。主要目標是映射文檔的結構。 JavaScript簡介 JavaScript簡史 JavaScript誕生于1995年,當時主要負責表單的輸入驗證。 如果沒有表單驗證的功能,填入信息之...
摘要:操作類名時可以通過屬性添加刪除和替換類名。如果將可選的參數設置為,則表示盡量將元素顯示在視口中部垂直方向。將元素的內容滾動指定的頁面高度,具體高度由元素的高度決定。 DOM擴展 選擇符API querySelector()方法 querySelector()方法接收一個CSS選擇符,返回與該模式匹配的第一個元素,如果沒有找到匹配的元素,返回null //取得body元素 var b...
閱讀 2581·2021-11-22 12:01
閱讀 1105·2021-11-15 11:37
閱讀 3685·2021-09-22 14:59
閱讀 1746·2021-09-04 16:45
閱讀 1382·2021-09-03 10:30
閱讀 1013·2021-08-11 11:18
閱讀 2459·2019-08-30 10:53
閱讀 2013·2019-08-29 15:13