| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- class DrawCanvas {
- constructor() {
- this._ctx = null
- this._canvas = null
- this._executionArr = []
- this._pathArr = []
- this._style = null
- }
- _init({ width, height, canvas, baseMapUrl = '' }) {
- if (!width || !height || !canvas) return
- const ctx = canvas.getContext('2d')
- const dpr = wx.getSystemInfoSync().pixelRatio
- canvas.width = width * dpr
- canvas.height = height * dpr
- ctx.scale(dpr, dpr)
- // 添加底图
- if (baseMapUrl) {
- const img = canvas.createImage()
- img.onload = () => {
- this._ctx.drawImage(img, 0, 0, width, height)
- this._ctx.globalCompositeOperation = "source-atop" //画笔重叠部分覆盖
- }
- img.src = baseMapUrl
- }
- this._canvas = canvas
- this._ctx = ctx
- this._executionArr = [] //每移动一笔的数据
- this._pathArr = [] //抬起落下为一笔
- }
- mouseStart() {
- this._executionArr = []
- }
- mouseMove({ x = 0, y = 0 }) {
- if (!this._style) return
- this._executionArr.push([x, y])
- this._ctx.fillStyle = this._style
- this._ctx.fillRect(x - 5, y - 5, 10, 10)
- console.log('画图并存储');
- }
- mouseEnd() {
- this._pathArr.push({
- fillStyle: this._style,
- path: this._executionArr
- })
- }
- mouseBack() {
- // 删除每个移动数据
- if (this._pathArr.length) {
- const item = this._pathArr.length <= 1 ? this._pathArr[0] : this._pathArr[this._pathArr.length - 1]
- for (let k = 0; k < item.path.length; k++) {
- const el = item.path[k];
- this._ctx.clearRect(el[0] - 5, el[1] - 5, 11, 11)
- }
- this._pathArr.pop()
- }
- }
- // 切换画笔
- changeBrush(url = '') {
- if (!url) return
- const img = this._canvas.createImage()
- img.onload = () => {
- this._style = this._ctx.createPattern(img, 'repeat')
- }
- img.src = url
- }
- // 清除画布
- destory() {
- this._ctx.clearRect(0, 0, this._ctx.canvas.width, this._ctx.canvas.height)
- this._pathArr = []
- this._executionArr = []
- this._style = null
- }
- // 保存
- save() {
- wx.canvasToTempFilePath({
- canvas: this._canvas,
- success(res) {
- console.log('保存', res.tempFilePath);
- }
- })
- }
- }
- export { DrawCanvas }
|