const example = {} example.setGreen = function (context, isOld) { example.setRandom(context, isOld, 'green') } example.setRed = function (context, isOld) { example.setRandom(context, isOld, 'red') } // 设置随机颜色 example.setRandom = function (context, isOld, color) { if (isOld) { context.setFillStyle(color) context.setStrokeStyle(color) context.setFontSize(10) context.setShadow(10, 10, 30, color) context.setLineCap('butt') context.setLineJoin('miter') context.setLineWidth(1) context.setMiterLimit(10) } else { context.fillStyle = color context.strokeStyle = color context.fontSize = 10 context.shadowColor = color context.shadowBlur = 30 context.shadowOffsetX = 10 context.shadowOffsetY = 10 context.lineCap = 'butt' context.lineJoin = 'miter' context.lineWidth = 1 context.miterLimit = 10 } } // 重置颜色 example.reset = function (context, isOld) { context.beginPath() if (isOld) { context.setFillStyle('#000000') context.setStrokeStyle('#000000') context.setFontSize(10) context.setShadow(0, 0, 0, 'rgba(0, 0, 0, 0)') context.setLineCap('butt') context.setLineJoin('miter') context.setLineWidth(1) context.setMiterLimit(10) } else { context.fillStyle = '#000000' context.strokeStyle = '#000000' context.fontSize = 10 context.shadowColor = 'rgba(0, 0, 0, 0)' context.shadowBlur = 0 context.shadowOffsetX = 0 context.shadowOffsetY = 0 context.lineCap = 'butt' context.lineJoin = 'miter' context.lineWidth = 1 context.miterLimit = 10 } } example.transform = function (context, isOld) { context.transform(1, 0, 0, 1, 30, 10) } example.measureText = function (context, isOld) { const data = context.measureText('123') console.log(`width: ${data.width}`) } example.arc = function (context, isOld) { context.beginPath() context.arc(75, 75, 50, 0, Math.PI * 2, true) context.moveTo(110, 75) context.arc(75, 75, 35, 0, Math.PI, false) context.moveTo(65, 65) context.arc(60, 65, 5, 0, Math.PI * 2, true) context.moveTo(95, 65) context.arc(90, 65, 5, 0, Math.PI * 2, true) context.stroke() } example.arcTo = function (context, isOld) { context.beginPath(); context.moveTo(20, 20); // 创建开始点 context.lineTo(100, 20); // 创建水平线 context.arcTo(150, 20, 150, 70, 50); // 创建弧 context.lineTo(150, 120); context.arcTo(200, 120, 200, 170, 20); // 创建弧 context.stroke(); } example.beginPath = function (context, isOld) { context.beginPath() context.moveTo(20, 75) context.lineTo(250, 75) context.stroke() context.beginPath() context.moveTo(50, 20) context.lineTo(150, 130) context.stroke() } example.bezierCurveTo = function (context, isOld) { context.beginPath() context.moveTo(20, 20) context.bezierCurveTo(20, 100, 200, 100, 200, 20) context.stroke() context.beginPath() context.moveTo(60, 60) context.bezierCurveTo(60, 100, 200, 100, 200, 60) context.stroke() } example.clearRect = function (context, isOld) { context.beginPath() context.rect(0, 0, 300, 150) context.fill() context.clearRect(20, 20, 100, 50) } example.clip = function (context, isOld) { // 剪切矩形区域 context.rect(50, 20, 200, 120) context.stroke() context.clip() context.fillRect(0, 0, 150, 100) } example.closePath = function (context, isOld) { context.beginPath() context.moveTo(20, 20) context.lineTo(20, 100) context.lineTo(70, 100) context.closePath() context.stroke() context.beginPath() context.moveTo(100, 100) context.lineTo(120, 120) context.lineTo(100, 200) context.closePath() context.stroke() } example.rotate = function (context, isOld) { context.beginPath() context.rotate(10 * Math.PI / 180) context.rect(225, 75, 50, 50) context.fill() context.strokeStyle = 'red' context.rect(225, 75, 50, 50) context.stroke() } example.createCircularGradient = function (context, isOld) { if (isOld) { const grd = context.createCircularGradient(75, 50, 50) grd.addColorStop(0, 'red') grd.addColorStop(1, 'green') context.setFillStyle(grd) context.fillRect(10, 10, 150, 80) context.draw() } else { const grd = context.createRadialGradient(75, 50, 5, 20, 20, 20); grd.addColorStop(0, "red") grd.addColorStop(1, "green") context.fillStyle = grd context.fillRect(10, 10, 150, 80) } } example.createLinearGradient = function (context, isOld) { const grd = context.createLinearGradient(0, 0, 170, 0) grd.addColorStop(0, "black") grd.addColorStop(1, "white") if (isOld) { context.setFillStyle(grd) } else { context.fillStyle = grd } context.fillRect(20, 20, 150, 100) } example.createPattern = function (context, isOld, color, canvas) { if (isOld) { const pat = context.createPattern('../../../image/icon_cloud_HL.png', "repeat") context.setFillStyle(pat) context.rect(0, 0, 150, 100) context.fill() } else { const img = canvas.createImage() img.onload = () => { const pat = context.createPattern(img, "repeat") context.fillStyle = pat context.rect(0, 0, 150, 100) context.fill() } img.src = '../../../image/icon_cloud_HL.png' } } example.scale = function (context, isOld) { context.beginPath() context.rect(25, 25, 50, 50) context.stroke() context.scale(2, 2) context.beginPath() context.rect(25, 25, 50, 50) context.stroke() context.scale(3, 3) context.beginPath() context.rect(40, 40, 50, 50) context.stroke() context.scale(1, 1) } example.translate = function (context, isOld) { context.beginPath() context.rect(10, 10, 100, 50) context.fill() context.translate(70, 70) context.beginPath() context.fill() context.translate(120, 120) context.beginPath() context.fill() } example.save = function (context, isOld) { context.beginPath() if (isOld) { context.setStrokeStyle('#00ff00') } else { context.strokeStyle = '#00ff00' } context.save() context.scale(2, 2) if (isOld) { context.setStrokeStyle('#ff0000') } else { context.strokeStyle = '#ff0000' } context.rect(0, 0, 100, 100) context.stroke() context.restore() context.rect(0, 0, 50, 50) context.stroke() context.scale(1, 1) } example.restore = function (context, isOld) { [3, 2, 1].forEach(function (item) { context.beginPath() context.save() context.scale(item, item) context.rect(10, 10, 100, 100) context.stroke() context.restore() }) } example.drawImage = function (context, isOld, color, canvas) { if (isOld) { context.drawImage('/image/wechat.png', 0, 0) } else { const img = canvas.createImage() img.onload = () => { context.drawImage(img, 0, 0) } img.src = '/image/wechat.png' } } example.fillText = function (context, isOld) { context.beginPath() context.moveTo(0, 10) context.lineTo(300, 10) context.stroke() if (isOld) { context.setFontSize(10) } else { context.font = '10px arial' } context.fillText('Hello World', 0, 30) if (isOld) { context.setFontSize(20) } else { context.font = '20px arial' } context.fillText('Hello World', 100, 30) context.beginPath() context.moveTo(0, 30) context.lineTo(300, 30) context.stroke() } example.fill = function (context, isOld) { context.beginPath() context.rect(20, 20, 150, 100) context.fill() } example.stroke = function (context, isOld) { context.beginPath() context.moveTo(20, 20) context.lineTo(20, 100) context.lineTo(70, 100) context.stroke() } example.strokeRect = function (context, isOld) { context.strokeRect(20, 20, 150, 100) context.strokeRect(160, 180, 200, 200) } example.strokeText = function (context, isOld) { context.font = "20px arial" context.strokeText("Hello World!", 10, 50) context.font = "30px arial" // 创建渐变 const gradient = context.createLinearGradient(0, 0, 200, 0) gradient.addColorStop("0", "magenta") gradient.addColorStop("0.5", "blue") gradient.addColorStop("1.0", "red") // 用渐变填色 if (isOld) { context.setStrokeStyle(gradient) } else { context.strokeStyle = gradient } context.strokeText("finclip", 10, 90) } example.moveTo = function (context, isOld) { context.beginPath() context.moveTo(0, 0) context.lineTo(300, 150) context.stroke() context.beginPath() context.moveTo(40, 40) context.lineTo(200, 180) context.stroke() } example.lineTo = function (context, isOld) { context.beginPath() context.moveTo(20, 20) context.lineTo(20, 100) context.lineTo(70, 100) context.stroke() context.beginPath() context.moveTo(40, 40) context.lineTo(200, 180) context.lineTo(70, 100) context.stroke() } example.rect = function (context, isOld) { context.beginPath() context.rect(20, 20, 150, 100) context.stroke() context.beginPath() context.rect(40, 40, 180, 100) context.stroke() } example.quadraticCurveTo = function (context, isOld) { context.beginPath() context.moveTo(20, 20) context.quadraticCurveTo(20, 100, 200, 20) context.stroke() context.beginPath() context.moveTo(60, 60) context.quadraticCurveTo(30, 130, 200, 20) context.stroke() } example.setFillStyle = function (context, isOld) { ['#fef957', 'rgb(242,159,63)', 'rgb(242,117,63)', '#e87e51'].forEach(function (item, index) { if (isOld) { context.setFillStyle(item) } else { context.fillStyle = item } context.beginPath() context.rect(0 + 75 * index, 0, 50, 50) context.fill() }) } example.setStrokeStyle = function (context, isOld) { ['#fef957', 'rgb(242,159,63)', 'rgb(242,117,63)', '#e87e51'].forEach(function (item, index) { if (isOld) { context.setStrokeStyle(item) } else { context.strokeStyle = item } context.beginPath() context.rect(0 + 75 * index, 0, 50, 50) context.stroke() }) } example.setTextAlign = function (context, isOld) { // 在位置 150 创建蓝线 function setTextAlign(text) { if (isOld) { context.setTextAlign(text) } else { context.textAlign = text } } context.moveTo(150, 20) context.lineTo(150, 170) context.stroke() context.font = "15px Arial" // 显示不同的 textAlign 值 setTextAlign("start") context.fillText("textAlign=start", 150, 60) setTextAlign("end") context.fillText("textAlign=end", 150, 80) setTextAlign("left") context.fillText("textAlign=left", 150, 100) setTextAlign("center") context.fillText("textAlign=center", 150, 120) setTextAlign("right") context.fillText("textAlign=right", 150, 140) } example.setTextBaseline = function (context, isOld) { // 在位置 150 创建蓝线 function setTextBaseline(text) { if (isOld) { context.setTextBaseline(text) } else { context.textBaseline = text } } context.moveTo(5, 100) context.lineTo(395, 100) context.stroke() context.font = "20px Arial" // 显示不同的 textAlign 值 setTextBaseline("top") context.fillText("Top", 5, 100) setTextBaseline("bottom") context.fillText("Bottom", 50, 100) setTextBaseline("middle") context.fillText("Middle", 120, 100) setTextBaseline("alphabetic") context.fillText("Alphabetic", 190, 100) setTextBaseline("hanging") context.fillText("Hanging", 290, 100) } example.setTransform = function (context, isOld) { // 在位置 150 创建蓝线 context.fillRect(0, 0, 250, 100) context.setTransform(1, 0.5, -0.5, 1, 30, 10) if (isOld) { context.setFillStyle('red') } else { context.fillStyle = 'red' } context.fillRect(0, 0, 250, 100); context.setTransform(1, 0.5, -0.5, 1, 30, 10) if (isOld) { context.setFillStyle('blue') } else { context.fillStyle = 'blue' } context.fillRect(0, 0, 250, 100) } example.setGlobalAlpha = function (context, isOld) { [1, 0.5, 0.1].forEach(function (item, index) { try { context.setGlobalAlpha(item) } catch (e) { context.globalAlpha = item } context.beginPath() context.rect(0 + 75 * index, 0, 50, 50) context.fill() }) } example.setShadow = function (context, isOld) { context.beginPath() context.rect(10, 10, 100, 100) context.fill() context.beginPath() context.rect(50, 50, 100, 100) context.fill() } example.setFontSize = function (context, isOld) { [10, 20, 30, 40].forEach(function (item, index) { if (isOld) { context.setFontSize(item) } else { context.font = item + 'px arial' } context.fillText('Hello, world', 20, 20 + 40 * index) }) } example.setLineCap = function (context, isOld) { context.setLineWidth(10) if (isOld) { context.setLineWidth(10) } else { context.lineWidth = 10 } ['butt', 'round', 'square'].forEach(function (item, index) { context.beginPath() if (isOld) { context.setLineCap(item) } else { context.lineCap = item } context.moveTo(20, 20 + 20 * index) context.lineTo(100, 20 + 20 * index) context.stroke() }) } example.setLineDash = function (context, isOld) { context.beginPath() context.setLineDash([5, 15]) context.moveTo(0, 50) context.lineTo(300, 50) context.stroke() // Solid line context.beginPath() context.setLineDash([]) context.moveTo(0, 100) context.lineTo(300, 100) context.stroke() } example.setLineJoin = function (context, isOld) { if (isOld) { context.setLineWidth(10) } else { context.lineWidth = 10 } ['bevel', 'round', 'miter'].forEach(function (item, index) { context.beginPath() if (isOld) { context.setLineJoin(item) } else { context.lineJoin = item } context.moveTo(20 + 80 * index, 20) context.lineTo(100 + 80 * index, 50) context.lineTo(20 + 80 * index, 100) context.stroke() }) } example.setLineWidth = function (context, isOld) { [2, 4, 6, 8, 10].forEach(function (item, index) { context.beginPath() if (isOld) { context.setLineWidth(item) } else { context.lineWidth = item } context.moveTo(20, 20 + 20 * index) context.lineTo(100, 20 + 20 * index) context.stroke() }) } example.setMiterLimit = function (context, isOld) { if (isOld) { context.setLineWidth(4) } else { context.lineWidth = 4 } [2, 4, 6, 8, 10].forEach(function (item, index) { context.beginPath() if (isOld) { context.setMiterLimit(item) } else { context.miterLimit = item } context.moveTo(20 + 80 * index, 20) context.lineTo(100 + 80 * index, 50) context.lineTo(20 + 80 * index, 100) context.stroke() }) } example.globalCompositeOperation = function (context, isOld) { if (isOld) { context.setFillStyle('red') } else { context.fillStyle = 'red' } context.fillRect(20, 20, 75, 50) context.globalCompositeOperation = "source-over" if (isOld) { context.setFillStyle('blue') } else { context.fillStyle = 'blue' } context.fillRect(50, 50, 75, 50) if (isOld) { context.setFillStyle('red') } else { context.fillStyle = 'red' } context.fillRect(150, 20, 75, 50) context.globalCompositeOperation = "destination-over" if (isOld) { context.setFillStyle('blue') } else { context.fillStyle = 'blue' } context.fillRect(180, 50, 75, 50) } example.createImage = function (context, isOld, color, canvas) { if (isOld) { context.fillText('createImage 不会生效', 20, 20) } else { // 本地路径 1 const img = canvas.createImage() img.src = '../../../image/wechat.png' img.onload = () => { context.drawImage(img, 0, 0, 100, 100) } wx.getImageInfo({ src: 'http://img.daimg.com/uploads/allimg/210526/3-2105261P1490-L.jpg', success(res) { const img = canvas.createImage() img.src = res.path // finfile img.onload = () => { context.drawImage(img, 120, 0, 100, 100) } } }) // 网络路径 const img2 = canvas.createImage() img2.src = 'http://img.daimg.com/uploads/allimg/211113/3-2111131612510-L.jpg' img2.onload = () => { context.drawImage(img2, 240, 0, 100, 100) } } } module.exports = example