微信小程序 ·
微信小程序在Page、Component中获取Canvas(2d)实例
微信小程序在Page、Component中获取Canvas(2d)实例
一、wxml内容
<view class="canvas-viwe">
<canvas id="canvas-normal" canvas-id="normal-canvas" class="canvas"></canvas>
<canvas id="canvas-2d" class="canvas" type="2d"></canvas>
</view>
注意:如果Canvas没有开启type=2d模式,请声明canvas-id,否则会自带默认内联样式display:none!
二、wxss内容
.canvas {
display: block;
width: 300rpx;
height: 300rpx;
}
.canvas + .canvas {
margin-top: 30rpx;
}
三、js内容
// 在Page、Component中获取普通Canvas实例方法是一样的
getNormalContext: function () {
var ctx = wx.createCanvasContext('canvas-normal', this);
return Promise.resolve(ctx);
}
// 在Page中获取2d模式Canvas实例
get2dContext() {
let width = 150, height = 150;
let dpr = wx.getSystemInfoSync().pixelRatio;
return new Promise(resolve => {
wx.createSelectorQuery()
.select('#canvas-2d')
.fields({node: true, size: true})
.exec(res => {
let canvas = res[0].node;
let context = canvas.getContext('2d');
if (!_this.inited) {
_this.inited = true;
canvas.width = width * dpr;
canvas.height = height * dpr;
context.scale(dpr, dpr);
}
resolve({context, canvas})
})
})
}
// 在Component中获取2d模式Canvas实例
get2dContext: function () {
let _this = this,width = 150, height = 150;
var dpr = wx.getSystemInfoSync().pixelRatio;
return new Promise(function (resolve) {
wx.createSelectorQuery()
.in(_this)
.select('#canvas-2d')
.node()
.exec(function (res) {
var canvas = res[0].node;
var context = canvas.getContext('2d');
if (!_this.inited) {
_this.inited = true;
canvas.width = width * dpr;
canvas.height = height * dpr;
context.scale(dpr, dpr);
}
resolve({context, canvas})
});
});
}