281 lines
8.0 KiB
JavaScript
281 lines
8.0 KiB
JavaScript
import utils from "../../utils/utils";
|
||
// painting-2.js
|
||
Component({
|
||
properties: {
|
||
showPaint:{
|
||
type: Boolean,
|
||
value:false,
|
||
observer(newval) {
|
||
this.setData({
|
||
showPaint: newval
|
||
});
|
||
},
|
||
},
|
||
paintFrom:{
|
||
type: String,
|
||
value:'',
|
||
observer(newval) {
|
||
this.setData({
|
||
paintFrom: newval
|
||
});
|
||
},
|
||
},
|
||
paintSrc:{
|
||
type: String,
|
||
value:'',
|
||
observer(newval) {
|
||
this.setData({
|
||
paintSrc: newval
|
||
},()=>{
|
||
this.initData();
|
||
|
||
});
|
||
|
||
},
|
||
}
|
||
|
||
},
|
||
|
||
ready(){
|
||
let that = this;
|
||
// 获取设备信息,canvas高度用
|
||
wx.getSystemInfo({
|
||
success: function(res) {
|
||
console.log(res);
|
||
that.setData({
|
||
canvasWidth: res.windowWidth,
|
||
canvasHeight: res.windowHeight-50,
|
||
windowHeight: res.windowHeight
|
||
})
|
||
},
|
||
})
|
||
// 选照片
|
||
//this.chooseImg();
|
||
},
|
||
/**
|
||
* 页面的初始数据
|
||
*/
|
||
data: {
|
||
showPaint:false,
|
||
paintFrom:'',
|
||
hasChoosedImg: false,
|
||
canvasWidth: 0,
|
||
showBars: false,
|
||
canvasHeight: 0, // canvas的完整高度
|
||
canvasHeightLen: 0, // canvas的临时高度(用在操作栏影响画布高度时)
|
||
windowHeight: 0, // 屏幕高度
|
||
prevPosition: [0, 0], // 手指触摸的所在位置
|
||
background: '', // 背景图片,即导入的图片
|
||
colors: ["#FFFFFF", "#000000", "#ff0000", "#ffff00", "#00CC00", "#99CCFF", "#0000ff", "#ff00ff"],
|
||
selectColor:"#99CCFF",
|
||
btnInfo: [
|
||
{
|
||
type: 'width',
|
||
background: 'url("http://ov8a2tdri.bkt.clouddn.com/wx-app/icon-1.png"); background-size: 30px 30px;'
|
||
},
|
||
{
|
||
type: 'color',
|
||
background: 'url("http://ov8a2tdri.bkt.clouddn.com/wx-app/icon-2.png") white no-repeat; background-size: 24px 24px;background-position: 3px 3px;'
|
||
},
|
||
{
|
||
type: 'clear',
|
||
background: 'url("http://img0.imgtn.bdimg.com/it/u=1358545290,3102156418&fm=26&gp=0.jpg") white no-repeat; background-size: 20px 20px;background-position: 5px 5px;'
|
||
},
|
||
{
|
||
type: 'save',
|
||
background: 'url("http://ov8a2tdri.bkt.clouddn.com/wx-app/icon-6.png") white no-repeat; background-size: 20px 20px;background-position: 5px 5px;'
|
||
}
|
||
],
|
||
width: false, // 是否开启宽度调整栏
|
||
color: false, // 是否开启颜色调整栏
|
||
r: 33,
|
||
g: 33,
|
||
b: 33,
|
||
selectSize:8,
|
||
clear: false, // 是否开启清空栏
|
||
eraser: false, // 是否开启橡皮擦
|
||
saving: false, // 是否在保存状态
|
||
scope: false, // 是否有保存图片的权限
|
||
},
|
||
methods:{
|
||
initData(){
|
||
let that=this;
|
||
that.setData({
|
||
hasChoosedImg: true,
|
||
})
|
||
wx.getImageInfo({
|
||
src: this.data.paintSrc,
|
||
success: function (res) {
|
||
// 获取图片信息,主要为宽高,选择合适的自适应方式(将最大边完整显示)
|
||
console.log(res)
|
||
let [height, width] = [that.data.canvasWidth / res.width * res.height, that.data.canvasWidth];
|
||
if (height > that.data.windowHeight - 50) {
|
||
height = that.data.windowHeight - 50;
|
||
width = height / res.height * res.width;
|
||
}
|
||
that.setData({
|
||
canvasHeight: height,
|
||
canvasWidth: width,
|
||
background: res.path
|
||
});
|
||
that.chooseBi();
|
||
}
|
||
})
|
||
},
|
||
hideTuya(){
|
||
this.setData({
|
||
showPaint:false,
|
||
})
|
||
},
|
||
chooseBi(){
|
||
this.setData({
|
||
width: false, // 是否开启宽度调整栏
|
||
color: false,
|
||
clear: false, // 是否开启清空栏
|
||
eraser: false, // 是否开启橡皮擦
|
||
saving: false,
|
||
showBars: false
|
||
})
|
||
},
|
||
// save(e){
|
||
// saveImg(this, 2);
|
||
// this.triggerEvent('confirmUpload')
|
||
// },
|
||
tapBtn: function (e) {
|
||
wx.showLoading({
|
||
title: '图片上传中',
|
||
mask: true
|
||
})
|
||
utils.tapBtn(e, this, 2,this.data.paintFrom);
|
||
this.hideBarsHandler()
|
||
},
|
||
showBarsHandler(e) {
|
||
//this.tapBtn(e)
|
||
this.setData({
|
||
showBars: !this.data.showBars,
|
||
clear:false,
|
||
//eraser:false
|
||
|
||
})
|
||
},
|
||
|
||
sizeHandler(e) {
|
||
const size = e.detail.value;
|
||
this.setData({
|
||
selectSize: size
|
||
})
|
||
},
|
||
hideBarsHandler() {
|
||
this.setData({
|
||
showBars: false
|
||
})
|
||
},
|
||
colorChange(e) {
|
||
//this.tapBtn(e);
|
||
const color = e.currentTarget.dataset.color;
|
||
this.setData({
|
||
selectColor: color
|
||
})
|
||
},
|
||
addImg: function (e) {
|
||
this.chooseImg();
|
||
},
|
||
|
||
chooseImg() {
|
||
let that = this;
|
||
wx.chooseImage({
|
||
count:1,
|
||
success: function (res) {
|
||
that.setData({
|
||
hasChoosedImg: true,
|
||
})
|
||
wx.getImageInfo({
|
||
src: res.tempFilePaths[0],
|
||
success: function (res) {
|
||
// 获取图片信息,主要为宽高,选择合适的自适应方式(将最大边完整显示)
|
||
let [height, width] = [that.data.canvasWidth / res.width * res.height, that.data.canvasWidth];
|
||
if (height > that.data.windowHeight - 50) {
|
||
height = that.data.windowHeight - 50;
|
||
width = height / res.height * res.width;
|
||
}
|
||
that.setData({
|
||
canvasHeight: height,
|
||
canvasWidth: width,
|
||
background: res.path
|
||
});
|
||
}
|
||
})
|
||
},
|
||
fail: function (res) {
|
||
console.log(res);
|
||
}
|
||
})
|
||
},
|
||
|
||
touchStart: function (e) {
|
||
// 开始画图,隐藏所有的操作栏
|
||
this.setData({
|
||
prevPosition: [e.touches[0].x, e.touches[0].y],
|
||
width: false,
|
||
color: false,
|
||
canvasHeightLen: 0
|
||
})
|
||
},
|
||
|
||
touchMove: function (e) {
|
||
// 触摸移动,绘制中。。。
|
||
let ctx = wx.createCanvasContext('myCanvas',this);
|
||
|
||
if (this.data.eraser) {
|
||
ctx.clearRect(e.touches[0].x, e.touches[0].y, this.data.selectSize,this.data.selectSize);
|
||
ctx.draw(true);
|
||
} else {
|
||
ctx.setStrokeStyle(this.data.selectColor);
|
||
ctx.setLineWidth(this.data.selectSize);
|
||
ctx.setLineCap('round');
|
||
ctx.setLineJoin('round');
|
||
ctx.moveTo(this.data.prevPosition[0], this.data.prevPosition[1]);
|
||
ctx.lineTo(e.touches[0].x, e.touches[0].y);
|
||
ctx.stroke();
|
||
ctx.draw(true);
|
||
}
|
||
|
||
this.setData({
|
||
prevPosition: [e.touches[0].x, e.touches[0].y]
|
||
})
|
||
|
||
},
|
||
|
||
clearCanvas: function (e) {
|
||
this.tapBtn(e)
|
||
let ctx = wx.createCanvasContext('myCanvas',this);
|
||
ctx.clearRect(0, 0, this.data.canvasWidth, this.data.canvasHeight);
|
||
ctx.draw();
|
||
this.setData({
|
||
clear: false,
|
||
canvasHeightLen: 0
|
||
});
|
||
this.chooseBi();
|
||
},
|
||
|
||
chooseEraser: function () {
|
||
this.setData({
|
||
eraser: true,
|
||
clear: false,
|
||
canvasHeightLen: 0,
|
||
showBars: false
|
||
})
|
||
},
|
||
|
||
changeColor: function (e) {
|
||
utils.changeColor(e, this);
|
||
this.hideBarsHandler()
|
||
},
|
||
|
||
changeWidth: function (e) {
|
||
utils.changeWidth(e, this, (this.data.canvasHeightLen + this.data.w - e.detail.value), 2);
|
||
},
|
||
|
||
},
|
||
|
||
}) |