14-JS canvas 學(xué)習(xí)

Canvas簡(jiǎn)介

canvas作用:

  • canvas元素可以讓用戶在網(wǎng)頁上繪制圖形;

canvas介紹

  • HTML5中的canvas元素只是圖形容器,必須要使用JavaScript腳本來繪制圖像;
  • 畫布是一個(gè)矩形區(qū)域,可以控制其中的每一個(gè)像素;
  • canvas給用戶提供多種繪制路徑、矩形、圓形、字符及添加圖像的方法;
  • H5新增元素,IE8及之前版本不支持canvas。

canvas使用

創(chuàng)建canvas元素(行內(nèi)塊)

  • 向H5頁面添加canvas元素,該元素和其它元素一樣,可以設(shè)置它的寬高等;
<canvas width="100px" height="100px" style="background-color:red"></canvas>
  • 不可在canvas元素中間添加內(nèi)容,因?yàn)闊o法顯示;只有在瀏覽器不支持canvas時(shí),才會(huì)顯示元素里面的內(nèi)容。
  • 畫布的默認(rèn)大小為:300*150。

繪制

  • canvas元素本身沒有繪制能力,所有的繪制工作都必須通過JavaScript來完成,步驟如下:
  • 獲取元素;
  • 獲取元素的上下文對(duì)象;
  • 指定填充樣式等;
  • 指定元素位置和大小。
<body>
        <canvas class="draw"></canvas>
        <script type="text/javascript">
            var can = document.querySelector(".draw");
            var ctx = can.getContext("2d");
            ctx.fillStyle = "#f00";
            ctx.fillRect(100,100,150,100);
        </script>
</body>

應(yīng)用

實(shí)線
  • 首先獲取上下文ctx;
  • ctx.moveTo(x,y);:指定起點(diǎn);
  • ctx.lineTo(x,y);:指定終點(diǎn);
  • ctx.stroke();:繪制。
<script>
    <canvas class="beeline"></canvas>
    <script>
        //獲取元素
        var beeline = document.querySelector(".beeline");
        //獲取上下文元素
        var ctx = beeline.getContext("2d");
        //開始繪制
        ctx.moveTo(100,100);
        ctx.lineTo(250,50);
        ctx.lineTo(50,10);
        ctx.lineTo(10,10);
        //結(jié)束繪制
        ctx.stroke();
    </script>
</body>
  • 獲取元素;
  • 獲取上下文ctx;
  • 指定填充樣式;
  • 開始描繪路徑;
  • 畫圖形;
ctx.arc(x,y,radius,startAngle,endAngle,[boolean,optional]anticlockwise);
  • 關(guān)閉路徑;
  • 填充上下文。
    <canvas class="circle"></canvas>
    <script>
        var circle = document.getElementsByClassName("circle")[0];
        var ctx = circle.getContext("2d");
        ctx.fillStyle = "#0f0";
        ctx.beginPath();
        ctx.arc(40,40,40,Math.PI/4,Math.PI*3/4,true);
        ctx.closePath();
        ctx.fill();
    </script>
漸變
  • 獲取元素;
  • 獲取上下文ctx;
  • 創(chuàng)建漸變效果grd:
var grd = ctx.createLinearGradient(x0,y0,x1,y1);
  • 指定漸變效果開始、結(jié)束顏色:grd.addColorStop(offset,color);
grd.addColorStop(0.5,"#f00");
grd.addColorStop(1,"#0f0");
  • 其中offset范圍為0~1,指定漸變顏色的范圍。
  • 指定上下文填充樣式為漸變樣式;
  • 指定填充大小,一般和漸變區(qū)域大小一樣。
<script>
    var jianB = document.querySelector(".jianbian");
    var ctx = jianB.getContext("2d");
    var grd = ctx.createLinearGradient(10,10,200,100);
    grd.addColorStop(0,"#f00");
    grd.addColorStop(1,"#0f0");
    ctx.fillStyle = grd;
    ctx.fillRect(10,10,200,100);
</script>
圖像
  • 獲取元素;
  • 獲取上下文;
  • 創(chuàng)建圖片
  • 將圖片繪制到上下文中。
<canvas class="img"></canvas>
<script>
    var drawImg = document.querySelector(".img");
    var ctx = drawImg.getContext("2d");
    var img = new Image();
    img.src = "images/mage.png";
    ctx.drawImage(img,50,20);
</script>

顏色、樣式以及陰影設(shè)置的屬性及方法

屬性 描述
fillStyle 設(shè)置或返回用于填充繪畫的顏色、漸變或模式
strokeStyle 設(shè)置或返回用于筆觸的顏色、漸變或模式
shadowColor 設(shè)置或返回用于陰影的顏色
shadowBlur 設(shè)置或返回用于陰影的模糊級(jí)別
shadowOffsetX 設(shè)置或返回陰影距形狀的水平距離
shadowOffsetY 設(shè)置或返回陰影距形狀的垂直距離
方法 描述
createLinearGradient() 創(chuàng)建線性漸變(用在畫布內(nèi)容上)
createPattern() 在指定的方向上重復(fù)指定的元素
createRadialGradient() 創(chuàng)建放射狀/環(huán)形的漸變(用在畫布內(nèi)容上)
addColorStop() 規(guī)定漸變對(duì)象中的顏色和停止位置

線條樣式

屬性 描述
lineCap 設(shè)置或返回線條的<span style="color:red">結(jié)束端點(diǎn)樣式</span>
lineJoin 設(shè)置或返回兩條線相交時(shí),所創(chuàng)建的<span style="color:red">拐角類型</span>
lineWidth 設(shè)置或返回當(dāng)前的線條寬度
miterLimit 設(shè)置或返回最大斜接長(zhǎng)度

矩形

方法 描述
rect() 創(chuàng)建矩形
fillRect() 繪制“被填充”的矩形
strokeRect() 繪制矩形(無填充)
clearRect() 在給定的矩形內(nèi)清除指定的像素

路徑相關(guān)方法

方法 描述
fill() 填充當(dāng)前繪圖(路徑)
stroke() 繪制已定義的路徑
beginPath() 起始一條路徑,或重置當(dāng)前路徑
moveTo() 把路徑移動(dòng)到畫布中的指定點(diǎn),不創(chuàng)建線條
closePath() 創(chuàng)建從當(dāng)前點(diǎn)回到起始點(diǎn)的路徑
lineTo() 添加一個(gè)新點(diǎn),然后在畫布中創(chuàng)建從該點(diǎn)到最后指定點(diǎn)的線條
clip() 從原始畫布剪切任意形狀和尺寸的區(qū)域
quadraticCurveTo() 創(chuàng)建二次貝塞爾曲線
bezierCurveTo() 創(chuàng)建三次方貝塞爾曲線
arc() 創(chuàng)建弧/曲線(用于創(chuàng)建圓形或部分圓)
arcTo() 創(chuàng)建兩切線之間的弧/曲線
isPointInPath() 如果指定的點(diǎn)位于當(dāng)前路徑中,則返回 true,否則返回 false
  • 暫時(shí)只發(fā)現(xiàn)畫曲線時(shí)需要開啟/關(guān)閉路徑。

轉(zhuǎn)換

方法 描述
scale() 縮放當(dāng)前繪圖至更大或更小
rotate() 旋轉(zhuǎn)當(dāng)前繪圖
translate() 重新映射畫布上的 (0,0) 位置
transform() 替換繪圖的當(dāng)前轉(zhuǎn)換矩陣
setTransform() 將當(dāng)前轉(zhuǎn)換重置為單位矩陣。然后運(yùn)行 transform()

文本的相關(guān)屬性和方法

屬性 描述
font 設(shè)置或返回文本內(nèi)容的當(dāng)前字體屬性
textAlign 設(shè)置或返回文本內(nèi)容的當(dāng)前對(duì)齊方式
textBaseline 設(shè)置或返回在繪制文本時(shí)使用的當(dāng)前文本基線
方法 描述
fillText() 在畫布上繪制“被填充的”文本
strokeText() 在畫布上繪制文本(無填充)
measureText() 返回包含指定文本寬度的對(duì)象

圖像繪制方法

方法 描述
drawImage() 向畫布上繪制圖像、畫布或視頻

像素操作相關(guān)的屬性和方法

屬性 描述
width 返回 ImageData 對(duì)象的寬度
height 返回 ImageData 對(duì)象的高度
data 返回一個(gè)對(duì)象,其包含指定的ImageData對(duì)象的圖像數(shù)據(jù)
方法 描述
createImageData() 創(chuàng)建新的、空白的ImageData對(duì)象
getImageData() 返回ImageData對(duì)象,該對(duì)象為畫布上指定的矩形復(fù)制像素?cái)?shù)據(jù)
putImageData() 把圖像數(shù)據(jù)(從指定的 ImageData 對(duì)象)放回畫布上

合成

屬性 描述
globalAlpha 設(shè)置或返回繪圖的當(dāng)前 alpha 或透明值
globalCompositeOperation 設(shè)置或返回新圖像如何繪制到已有的圖像上

其他

方法 描述
save() 保存當(dāng)前環(huán)境的狀態(tài)
restore() 返回之前保存過的路徑狀態(tài)和屬性
createEvent()
getContext()
toDataURL()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:canvas簡(jiǎn)介 1.1什么是canvas? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,880評(píng)論 2 32
  • 一、canvas簡(jiǎn)介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個(gè)矩形區(qū)...
    Looog閱讀 4,038評(píng)論 3 40
  • 一、canvas簡(jiǎn)介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個(gè)矩形區(qū)...
    J_L_L閱讀 1,690評(píng)論 0 4
  • canvas由Apple公司推出,現(xiàn)在大部分瀏覽器支持繪制2D圖形,3D圖形的繪制使用WebGL的3D上下文。 基...
    exialym閱讀 616評(píng)論 0 3
  • 根目錄 (/) 的意義與內(nèi)容: 根目錄是整個(gè)系統(tǒng)最重要的一個(gè)目錄,因?yàn)椴坏械哪夸浂际怯筛夸浹苌鰜淼? 同時(shí)...
    彭業(yè)閱讀 322評(píng)論 0 0

友情鏈接更多精彩內(nèi)容