#4 fillStyle 填充样式几种选项

线性渐变

这个和css中的background-image: linear-gradient() 异曲同工,只是操作步骤略有不同。

1.第1步,创建渐变

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

2.第2步,设置颜色点位置和颜色值

// 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);

当颜色点stop的位置相同时,则不会产生渐变效果,而是很清晰的边界线

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);

当然xStart,yStart等值可以为负值

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

还有可以通过xStart, yStart, xEnd, yEnd这几个参数控制绘制的方向,默认的是45度,左上角到右下角

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

射线渐变Radial Gradient

这个渐变是建立在 两个圆环 的基础上的

1.第1步,创建渐变

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

2.第2步,设置颜色点和颜色值

这个颜色点可以设置任意个数

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

这个功能比较强大,可以根据img | video | grd(渐变图,甚至可以根据另一个canvas(画布)来创建填充样式对象

比如

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

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

对于img对象

这个是基于 new Image() 的对象, 多用于纹理材料的重复

使用方法:

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);
}

效果代码

创建canvas画布作为参数

利用星空图:

function createBgCanvas() {
  # 创建一个新的canvas画布
  var bgCanvas = document.createElement('canvas');
  bgCanvas.width = 100;
  bgCanvas.height = 100;
 
  var bgCanvasContext = bgCanvas.getContext('2d');
  # 在这个canvas上绘制一个星星
  drawStar(bgCanvasContext, 50, 50, 50, 0);
  return bgCanvas;
}

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

具体效果

总结

主要是关于canvas填充样式(fillStyle)的设置的一些apis:

  • createLinearGradient(x0, y0, x1, y1)
  • createRadialGradient(x0, y0, r0, x1, y1, r1)
  • 以及强大的createPattern(patternSource, repeatStyle)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • 一:canvas简介 1.1什么是canvas? ①:canvas是HTML5提供的一种新标签 ②:HTML5 ...
    GreenHand1阅读 4,678评论 2 32
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    J_L_L阅读 1,513评论 0 4
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    Looog阅读 3,940评论 3 40
  • 【canvas】 《2.6.5 面向对象基础复习补充:》 创建对象的方式: * var o = { name: '...
    夜幕小草阅读 372评论 0 0
  • 又是一年开学季,时间总是了无痕迹。清晰记得收到录取通知书那天父亲的自豪和开心。报道那天父母叔叔送我来上学对...
    杨阳洋呀阅读 410评论 0 3