#4 fillStyle 填充樣式幾種選項(xiàng)

線性漸變

這個(gè)和css中的background-image: linear-gradient() 異曲同工,只是操作步驟略有不同。

1.第1步,創(chuàng)建漸變

var grd = context.createLinearGradient(xStart, yStart, xEnd, yEnd);

2.第2步,設(shè)置顏色點(diǎn)位置和顏色值

// stop: 取值范圍為: 0.0 - 1.0
grd.addColorStop(stop, color)

示例:

// ctx 為context

var grd = ctx.createLinearGradient(0, 0, 400, 400);
grd.addColorStop(0.0, 'white');
grd.addColorStop(1.0, 'black');

ctx.fillStyle = grd;
ctx.fillRect(0, 0, 400, 400);

當(dāng)顏色點(diǎn)stop的位置相同時(shí),則不會(huì)產(chǎn)生漸變效果,而是很清晰的邊界線

var grd = ctx.createLinearGradient(0, 0, 400, 400);
grd.addColorStop(0.5, 'white');
grd.addColorStop(0.5, 'black');

ctx.fillStyle = grd;
ctx.fillRect(0, 0, 400, 400);

當(dāng)然xStart,yStart等值可以為負(fù)值

var grd = ctx.createLinearGradient(-100, -100, 400, 400);

還有可以通過(guò)xStart, yStart, xEnd, yEnd這幾個(gè)參數(shù)控制繪制的方向,默認(rèn)的是45度,左上角到右下角

// 垂直方向
var grd = ctx.createLinearGradient(0, 0, 0, 400);
// 水平方向
var grd = ctx.createLinearGradient(0, 0, 400, 0);

射線漸變Radial Gradient

這個(gè)漸變是建立在 兩個(gè)圓環(huán) 的基礎(chǔ)上的

1.第1步,創(chuàng)建漸變

var radialGrd = ctx.createRadialGradient(x0, y0, r0, x1, y1, r1);

2.第2步,設(shè)置顏色點(diǎn)和顏色值

這個(gè)顏色點(diǎn)可以設(shè)置任意個(gè)數(shù)

radialGrd.addColorStop(stop, color)

示例:

canvas.height = 800
canvas.width = 1200

var grd = ctx.createRadialGradient(
  canvas.width / 2, canvas.height, 0,
  canvas.width ,canvas.height, canvas.height*2
);
grd.addColorStop(1, 'black')
grd.addColorStop(0,'#035')

ctx.fillStyle = grd;

ctx.fillRect(0, 0, canvas.width, canvas.height)

createPattern

這個(gè)功能比較強(qiáng)大,可以根據(jù)img | video | grd(漸變圖,甚至可以根據(jù)另一個(gè)canvas(畫(huà)布)來(lái)創(chuàng)建填充樣式對(duì)象

比如

createPattern([img | video | grd | canvas], repeat-style)

repeat-style: repeat | no-repeat | repeat-x | repeat-y

對(duì)于img對(duì)象

這個(gè)是基于 new Image() 的對(duì)象, 多用于紋理材料的重復(fù)

使用方法:

var bgIamge = new Iamge();
bgIamge.src = 'somepic.jpg';

// 使用onload 事件
bgImage.onload = function() {
  var partten = ctx.createPattern(bgImage, 'repeat');
  ctx.fillStyle = pattern;
  ctx.fillRect(0, 0, 400, 400);
}

效果代碼

創(chuàng)建canvas畫(huà)布作為參數(shù)

利用星空?qǐng)D:

function createBgCanvas() {
  # 創(chuàng)建一個(gè)新的canvas畫(huà)布
  var bgCanvas = document.createElement('canvas');
  bgCanvas.width = 100;
  bgCanvas.height = 100;
 
  var bgCanvasContext = bgCanvas.getContext('2d');
  # 在這個(gè)canvas上繪制一個(gè)星星
  drawStar(bgCanvasContext, 50, 50, 50, 0);
  return bgCanvas;
}

var bgCanvas = createBgCanvas();
# 創(chuàng)建pattern
var pattern = ctx.createPattern(bgCanvas, 'repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 800, 800);

具體效果

總結(jié)

主要是關(guān)于canvas填充樣式(fillStyle)的設(shè)置的一些apis:

  • createLinearGradient(x0, y0, x1, y1)
  • createRadialGradient(x0, y0, r0, x1, y1, r1)
  • 以及強(qiáng)大的createPattern(patternSource, repeatStyle)
最后編輯于
?著作權(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)書(shū)系信息發(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ū)...
    J_L_L閱讀 1,688評(píng)論 0 4
  • 一、canvas簡(jiǎn)介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個(gè)矩形區(qū)...
    Looog閱讀 4,038評(píng)論 3 40
  • 【canvas】 《2.6.5 面向?qū)ο蠡A(chǔ)復(fù)習(xí)補(bǔ)充:》 創(chuàng)建對(duì)象的方式: * var o = { name: '...
    夜幕小草閱讀 455評(píng)論 0 0
  • 又是一年開(kāi)學(xué)季,時(shí)間總是了無(wú)痕跡。清晰記得收到錄取通知書(shū)那天父親的自豪和開(kāi)心。報(bào)道那天父母叔叔送我來(lái)上學(xué)對(duì)...
    楊陽(yáng)洋呀閱讀 455評(píng)論 0 3

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