摘要:一基礎知識基礎知識代碼示例獲取元素獲取畫圖環境,指明為基礎知識線條線條寬度繪制出輪廓圓形填充路徑填充顏色描邊繪制文字繪制文字繪制描邊文字清除二高級功能保存和恢復繪圖狀態代碼示例保存狀態保存狀態恢復狀態你可以用棧的概覽去理解保存和恢復繪圖的狀
一、canvas 基礎知識: 1、基礎知識
代碼示例
var canvas = document.getElementById("canvas"), //獲取canvas元素 context = canvas.getContext("2d"); //獲取畫圖環境,指明為2d // 1,基礎知識 context.fillStyle="rgb(0,255,0)"; context.fillRect(0,0,200,200);2、線條
context.lineWidth = 5; // 線條寬度 context.beginPath(); context.moveTo(40,40); context.lineTo(340,40); context.closePath(); context.stroke();// 繪制出輪廓3、圓形
context.arc(x,y,radius,startAngle,endAngle,anticlockwise);
context.beginPath(); context.arc(230,90,50,0,Math.PI*2,false); context.closePath(); context.fill();// 填充路徑4、填充顏色
context.fillStyle = "rgb(255,0,0)"; context.fillRect(40,40,100,100);5、描邊:
context.strokeStyle = "rgb(255,0,0)"; context.strokeRect(40,40,100,100);6、繪制文字
var text = "Zeng tian sheng"; context.font = "30px serif"; context.fillText(text,40,40); // 繪制文字 //context.strokeText(text,40,40); // 繪制描邊文字7、清除 canvas
context.clearRect(0,0,100,100);二、canvas高級功能 1、保存和恢復繪圖狀態: 代碼示例
context.fillStyle = "rgb(255,0,0)"; context.save(); // 保存狀態 context.fillRect(0,0,50,50); context.fillStyle = "rgb(0,255,255)"; context.save(); // 保存狀態 context.fillRect(100,0,50,50); context.restore(); // 恢復狀態 context.fillRect(200,0,50,50);
你可以用棧的概覽去理解保存和恢復繪圖的狀態,save() 將當前繪圖層存入棧中,restore()取出棧頂的圖層,后進先出。
2、平移注意:平移的是像素值 ,100px
context.translate(100,100)3、縮放
注意:縮放的是比例,下面代碼是將圖形寬高放大 2 倍
context.scale(2,2)4、旋轉
context.rotate(Math.PI/4);// 順時針旋轉 45"5、矩陣 ?
transform(a, b, c, d, e, f)
context.transform(2,0,2,150,150) ;// 平移+縮放 context.fillRect(0,0,100,100)
需要重置矩陣才能進行下面的再次 transform()
context.transform(2,0,2,150,150) ;// 平移+縮放 context.fillRect(0,0,100,100); context.setTransform(1,0,0,1,0,0);// 單位矩陣 context.transform(2,0,2,150,150) ;// 平移+縮放 context.fillRect(100,100,100,100)6、全局透明度:globalAlpha
context.fillStyle = "rgb(255,0,0)"; context.fillRect(0,0,50,50); context.globalAlpha = 0.5; context.fillStyle = "rgb(0,255,255)"; context.fillRect(25,25,50,50);7、合成 : globalCompositeOperation
注意:上面的圖層也有合成的效果,但都是使用默認的
context.globalCompositeOperation = "source-over";
所以都是 上一層覆蓋下一層的效果
context.globalCompositeOperation = "source-over|lighter ....";
更多請見示例代碼
8、陰影 示例代碼context.fillStyle= "rgb(0,255,0)"; context.shadowBlur = 50; context.shadowColor = "rgb(0,255,0)"; context.shadowOffsetX = 2; context.shadowOffsetY = 2; context.arc(100,100,50,0,Math.PI*2,false); context.fill();9、漸變
createLinearGradient(x1,y1,x2,y2); 漸變的起點個終點 ?
var gradient = context.createLinearGradient(10,10,50,100); gradient.addColorStop(0,"rgb(0,0,0)"); gradient.addColorStop(1,"rgb(0,255,0)"); context.fillStyle = gradient; // gradient context.fillRect(0,0,100,100);10、放射漸變:
createRadialGradient(x0,y0,r0,x1,y1,r1);
var gradient = context.createRadialGradient(300,300,10,100,100,50); gradient.addColorStop(0,"rgb(0,0,0)"); gradient.addColorStop(1,"rgb(0,255,0)"); context.fillStyle = gradient; context.fillRect(0,0,200,200);11、復雜線路
context.fillStyle = "rgb(255,0,0)"; context.beginPath(); context.moveTo(100,50); context.lineTo(150,150); context.lineTo(50,150); context.closePath(); context.stroke(); context.fill();12、貝塞爾曲線
二次貝塞爾只有一次彎曲,三次貝塞爾有兩次彎曲 ?
context.lineWidth = 5; context.beginPath(); context.moveTo(50,250); context.quadraticCurveTo(250,100,450,250); context.stroke();
context.lineWidth = 5; context.beginPath(); context.moveTo(50,250); context.bezierCurveTo(150,50,350,450,450,250); context.stroke();13、加載圖像
var image = new Image(); image.src = "https://avatars3.githubusercontent.com/u/15622519?v=3&u=48049875e3e38cfc9499bda745ec77b1c000066d&s=400"; image.onload = function () { context.drawImage(image,0,0); }
context.drawImage(image,x,y,width,height);
14、終極絕招,一切皆像素點 ? ? ?context.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)
訪問像素值 / 一個像素點有4個值 rgba
可以拿到像素點對其進行一定比例的改變像素值從而得到比如灰度的圖片,不同色調的圖片等 ?
var imgData = context.getImageData(x,y,width,height); var pixel = imgData.data; // 得到一個數組像素 var red = pixel[0]; var green = pixel[1]; var blue = pixel[2]; var alpha = pixel[3];
var imgdata = context.createImageData(200,200); var pixel = imgdata.data; var numpixel = imgdata.width*imgdata.height; for(i=0;i三、? 實戰篇 示例代碼
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83464.html
摘要:是新增的標簽,是個圖形容器。允許在其區域內進行繪制。其它大小由和決定。的創建標簽只有和兩個屬性,在沒有設置它們的情況下,默認大小為。只有一個參數,就是上下文的格式。下面的代碼用于檢測瀏覽器的是否支持支持不支持 canvas是Html5新增的標簽,是個圖形容器。允許JavaScript在其區域內進行繪制。其它大小由width和height決定。 canvas的創建 ;canvas標簽只有...
摘要:前言上篇主要是理論的概述,本篇會多些實踐,來講講的基礎用法,并包含一些基礎三角函數的應用,推薦沒有基礎的朋友閱讀,熟悉的朋友可以跳過。完整實例一個會跟蹤鼠標位置的箭頭三角函數上下運動終于順利過渡到三角函數的話題笑。 前言 上篇主要是理論的概述,本篇會多些實踐,來講講canvas的基礎用法,并包含一些基礎三角函數的應用,推薦沒有canvas基礎的朋友閱讀,熟悉的朋友可以跳過。 本人能力...
摘要:前言上篇主要是理論的概述,本篇會多些實踐,來講講的基礎用法,并包含一些基礎三角函數的應用,推薦沒有基礎的朋友閱讀,熟悉的朋友可以跳過。完整實例一個會跟蹤鼠標位置的箭頭三角函數上下運動終于順利過渡到三角函數的話題笑。 前言 上篇主要是理論的概述,本篇會多些實踐,來講講canvas的基礎用法,并包含一些基礎三角函數的應用,推薦沒有canvas基礎的朋友閱讀,熟悉的朋友可以跳過。 本人能力...
閱讀 3527·2021-10-09 09:41
閱讀 2733·2021-10-08 10:18
閱讀 2164·2021-09-10 10:51
閱讀 2668·2021-09-10 10:50
閱讀 763·2021-09-09 09:33
閱讀 3369·2021-09-06 15:14
閱讀 3002·2019-08-30 11:06
閱讀 3230·2019-08-29 14:04