<template> <view> <page-head :title="title"></page-head> <view class="uni-common-mt"> <canvas class="canvas-element" canvas-id="canvas" id="canvas"></canvas> <scroll-view class="canvas-buttons" scroll-y="true"> <block v-for="(name, index) in names" :key="index"> <button class="canvas-button" @click="handleCanvasButton(name)">{{name}}</button> </block> <button class="canvas-button" @click="toTempFilePath" type="primary">toTempFilePath</button> </scroll-view> </view> </view> </template> <script> var context = null; export default { data() { return { title: 'createContext', names: ["rotate", "scale", "reset", "translate", "save", "restore", "drawImage", "fillText", "fill", "stroke", "clearRect", "beginPath", "closePath", "moveTo", "lineTo", "rect", "arc", "quadraticCurveTo", "bezierCurveTo", "setFillStyle", "setStrokeStyle", "setGlobalAlpha", "setShadow", "setFontSize", "setLineCap", "setLineJoin", "setLineWidth", "setMiterLimit" ] } }, onReady: function() { context = uni.createCanvasContext('canvas',this) }, methods: { toTempFilePath: function() { uni.canvasToTempFilePath({ canvasId: 'canvas', success: function(res) { console.log(res.tempFilePath) }, fail: function(err) { console.error(JSON.stringify(err)) } }) }, handleCanvasButton: function(name) { this[name] && this[name](); }, rotate: function() { context.beginPath() context.rotate(10 * Math.PI / 180) context.rect(225, 75, 20, 10) context.fill() context.draw() }, scale: function() { 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.draw() }, reset: function() { context.beginPath() context.setFillStyle('#000000') context.setStrokeStyle('#000000') context.setFontSize(10) context.setGlobalAlpha(1) context.setShadow(0, 0, 0, 'rgba(0, 0, 0, 0)') context.setLineCap('butt') context.setLineJoin('miter') context.setLineWidth(1) context.setMiterLimit(10) context.draw() }, translate: function() { context.beginPath() context.rect(10, 10, 100, 50) context.fill() context.translate(70, 70) context.beginPath() context.fill() context.draw() }, save: function() { context.beginPath() context.setStrokeStyle('#00ff00') context.save() context.scale(2, 2) context.setStrokeStyle('#ff0000') context.rect(0, 0, 100, 100) context.stroke() context.restore() context.rect(0, 0, 50, 50) context.stroke() context.draw() }, restore: function() { [3, 2, 1].forEach(function(item) { context.beginPath() context.save() context.scale(item, item) context.rect(10, 10, 100, 100) context.stroke() context.restore() }); context.draw() }, drawImage: function() { // #ifdef APP-PLUS context.drawImage('../../../static/app-plus/uni@2x.png', 0, 0) // #endif // #ifndef APP-PLUS context.drawImage('../../../static/uni.png', 0, 0) // #endif context.draw() }, fillText: function() { context.setStrokeStyle('#ff0000') context.beginPath() context.moveTo(0, 10) context.lineTo(300, 10) context.stroke() // context.save() // context.scale(1.5, 1.5) // context.translate(20, 20) context.setFontSize(10) context.fillText('Hello World', 0, 30) context.setFontSize(20) context.fillText('Hello World', 100, 30) // context.restore() context.beginPath() context.moveTo(0, 30) context.lineTo(300, 30) context.stroke() context.draw() }, fill: function() { context.beginPath() context.rect(20, 20, 150, 100) context.setStrokeStyle('#00ff00') context.fill() context.draw() }, stroke: function() { context.beginPath() context.moveTo(20, 20) context.lineTo(20, 100) context.lineTo(70, 100) context.setStrokeStyle('#00ff00') context.stroke() context.draw() }, clearRect: function() { context.setFillStyle('#ff0000') context.beginPath() context.rect(0, 0, 300, 150) context.fill() context.clearRect(20, 20, 100, 50) context.draw() }, beginPath: function() { context.beginPath() context.setLineWidth(5) context.setStrokeStyle('#ff0000') context.moveTo(0, 75) context.lineTo(250, 75) context.stroke() context.beginPath() context.setStrokeStyle('#0000ff') context.moveTo(50, 0) context.lineTo(150, 130) context.stroke() context.draw() }, closePath: function() { context.beginPath() context.setLineWidth(1) context.moveTo(20, 20) context.lineTo(20, 100) context.lineTo(70, 100) context.closePath() context.stroke() context.draw() }, moveTo: function() { context.beginPath() context.moveTo(0, 0) context.lineTo(300, 150) context.stroke() context.draw() }, lineTo: function() { context.beginPath() context.moveTo(20, 20) context.lineTo(20, 100) context.lineTo(70, 100) context.stroke() context.draw() }, rect: function() { context.beginPath() context.rect(20, 20, 150, 100) context.stroke() context.draw() }, arc: function() { context.beginPath() context.setLineWidth(2) 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() context.draw() }, quadraticCurveTo: function() { context.beginPath() context.moveTo(20, 20) context.quadraticCurveTo(20, 100, 200, 20) context.stroke() context.draw() }, bezierCurveTo: function() { context.beginPath() context.moveTo(20, 20) context.bezierCurveTo(20, 100, 200, 100, 200, 20) context.stroke() context.draw() }, setFillStyle: function() { ['#fef957', 'rgb(242,159,63)', 'rgb(242,117,63)', '#e87e51'].forEach(function(item, index) { context.setFillStyle(item) context.beginPath() context.rect(0 + 75 * index, 0, 50, 50) context.fill() }) context.draw() }, setStrokeStyle: function() { ['#fef957', 'rgb(242,159,63)', 'rgb(242,117,63)', '#e87e51'].forEach(function(item, index) { context.setStrokeStyle(item) context.beginPath() context.rect(0 + 75 * index, 0, 50, 50) context.stroke() }) context.draw() }, setGlobalAlpha: function() { context.setFillStyle('#000000'); [1, 0.5, 0.1].forEach(function(item, index) { context.setGlobalAlpha(item) context.beginPath() context.rect(0 + 75 * index, 0, 50, 50) context.fill() }) context.draw() context.setGlobalAlpha(1) }, setShadow: function() { context.beginPath() context.setShadow(10, 10, 10, 'rgba(0, 0, 0, 199)') context.rect(10, 10, 100, 100) context.fill() context.draw() }, setFontSize: function() { [10, 20, 30, 40].forEach(function(item, index) { context.setFontSize(item) context.fillText('Hello, world', 20, 20 + 40 * index) }) context.draw() }, setLineCap: function() { context.setLineWidth(10); ['butt', 'round', 'square'].forEach(function(item, index) { context.beginPath() context.setLineCap(item) context.moveTo(20, 20 + 20 * index) context.lineTo(100, 20 + 20 * index) context.stroke() }) context.draw() }, setLineJoin: function() { context.setLineWidth(10); ['bevel', 'round', 'miter'].forEach(function(item, index) { context.beginPath() context.setLineJoin(item) context.moveTo(20 + 80 * index, 20) context.lineTo(100 + 80 * index, 50) context.lineTo(20 + 80 * index, 100) context.stroke() }) context.draw() }, setLineWidth: function() { [2, 4, 6, 8, 10].forEach(function(item, index) { context.beginPath() context.setLineWidth(item) context.moveTo(20, 20 + 20 * index) context.lineTo(100, 20 + 20 * index) context.stroke() }) context.draw() }, setMiterLimit: function() { context.setLineWidth(4); [2, 4, 6, 8, 10].forEach(function(item, index) { context.beginPath() context.setMiterLimit(item) context.moveTo(20 + 80 * index, 20) context.lineTo(100 + 80 * index, 50) context.lineTo(20 + 80 * index, 100) context.stroke() }) context.draw() } } } </script> <style> .canvas-element-wrapper { display: block; margin-bottom: 100rpx; } .canvas-element { width: 100%; height: 500rpx; background-color: #ffffff; } .canvas-buttons { padding: 30rpx 50rpx 10rpx; width: 100%; height: 360rpx; box-sizing: border-box; } .canvas-button { float: left; display: inline-flex; align-items: center; justify-content: center; height: 40px; line-height: 1; width: 300rpx; margin: 15rpx 12rpx; } </style>