<template>
<div >
<canvas class='firstCanvas'
canvas-id="firstCanvas"
@touchmove='move'
@touchend='end'
@error="error"
disable-scroll='true'>
</canvas>
<div class="operate-btn">
<div class="button" @click='clearClick()'>清除</div>
<div class="button" @click='saveClick()' >保存</div>
</div>
</div>
</template> <script>
let content = null;
let touchs = [];
let canvasw = 0;
let canvash = 0;
wx.getSystemInfo({
success: function (res) {
canvasw = res.windowWidth;
canvash = canvasw*9/16;
},
});
export default {
data(){
return {
signImage : '',
}
},
onLoad () {
content = wx.createCanvasContext('firstCanvas',this);
content.setStrokeStyle("#000000");
content.setLineWidth(5);
content.setLineCap('round');
content.setLineJoin('round')
},
methods:{
error(e){
wx.showModal({
title:"yes11"
});
},
move(e) {
let point = {x: e.touches[0].x, y: e.touches[0].y};
touchs.push(point);
if(touchs.length >= 2) {
this.draw(touchs)
}
},
end(e){
for (let i = 0 ;i < touchs.length;i++ ){
touchs.pop()
}
},
clearClick() {
content.clearRect(0,0,canvasw,canvash);
content.draw(true)
},
saveClick() {
let that = this;
wx.canvasToTempFilePath({
canvasId: 'firstCanvas',
success:function(res) {
that.signImage = res.tempFilePath;
that.$emit("success",that.signImage);
}
},this)
},
draw(touchs) {
let point1 = touchs[0];
let point2 = touchs[1];
touchs.shift();
content.moveTo(point1.x, point1.y);
content.lineTo(point2.x, point2.y);
content.stroke();
content.draw(true);
}
}
}
</script> <style scoped>
.firstCanvas {
background-color: #fff;
width: 100%;
height: 200px;
}
.operate-btn{
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
.button{
flex: 1;
height: 80rpx;
line-height: 80rpx;
font-size: 30rpx;
text-align: center;
color: deepskyblue;
border-radius: 0;
background-color: #fff;
border-top: 1px solid #ddd;
outline: none;
}
.button:first-of-type{
border-right: 1px solid #ddd;
}
.button:last-of-type{
border-left: 1px solid #ddd;
}
</style>
<!--
使用
import sureName from "@/components/sure-name.vue"
export default {
components:{
sureName
},
methods:{
success(url){
console.log(url);
}
}
} <div style="background-color: #EEEEEE;min-height: 100vh">
<div style="width: 80%;margin:auto;padding-top: 40rpx;">
<sure-name @success="success"></sure-name>
</div>
</div> Read me
属性名 说明 举例 是否必传 默认 返回值说明
success 保存事件 @success="success" 否 返回图片链接
-->

  预览

 tip:
   组件封装后在page中调用无效,直接放在page中是没有任何问题的。

mpvue 签字组件的更多相关文章

  1. 使用mpvue开发小程序教程(三)

    在上一篇文章中,我们熟悉了一下通过vue-cli生成的mpvue工程代码骨架的基本结构,大致了解了每一个部分的代码到底要放到何处.从本文起我们就开始涉及真正的编码部分,学习使用Vue的语法去编写小程序 ...

  2. 快速上手小程序的mpvue框架

    一.什么是mpvue框架? mpvue 是一个使用 Vue.js 开发小程序的前端框架.框架基于 Vue.js 核心(所以建议熟练掌握vue再使用mpvue框架,否则还是建议去使用原生框架去写小程序) ...

  3. 微信小程序----没有 DOM 对象,一切基于组件化 ---- mpvue

    封装好用的 类库 和 组件,复用且灵活度高 抽取相同的部分放在函数内部(组件内部) 抽取不同的部分放在形参(组件 props 传参,或者插槽) new Promise 运行时 初始化实例对象的状态为 ...

  4. 小程序使用mpvue框架无缝接入Vant Weapp组件库

    有美团开源出的mpvue以其vue的语法和良好的开发效率再搭配上用户体验良好的UI组件无疑是定制化微信小程序的开发方式,然而由于mpvue是对微信原生开发的再次封装,这也为我们引入UI组件添加了不少麻 ...

  5. 微信小程序mpvue项目使用WuxWeapp前端UI组件

    前言:这是一篇简单粗暴的使用指南 在最近的小程序项目里前端UI框架最后选择使用WuxWeapp,这篇文章记录一下如何在小程序mpvue项目中使用该UI组件. 步骤一:下载源码 (地址在这里)主要是里面 ...

  6. mpvue的toast弹窗组件-mptosat

    几乎每个小程序都会用到的弹窗功能,弹窗是为了友好的提示用户目前小程序的状态.这样以来toast弹窗就成了小程序不可或缺的组件.mptosat用过,不赖的一款.下面记录以下使用方法: 介绍 mptoas ...

  7. mpvue——componets中引入vant-weapp组件

    前言 这个问题很奇葩,网上也有很多人,给了很多方法,但是我想说的是,那些方法我用了都没效果,我试了一些都没效果,因为我当时引入时报错说没有export default出来,但是一旦暴露出来就又出其他问 ...

  8. mpvue——修改第三方组件样式

    前言 我们都知道在vue中可以定义多个<style>,一般为了防止全局污染,我们会使用<style scoped>代表这里面的css样式只在本页面生效. 全局 这个当时测试是直 ...

  9. MpVue开发之组件引入的问题

    再一次开发订餐系统中,遇到订餐页面引入头部商品列表,底部组件时,报错,模块编译失败,未进入缓存区. 我以为是新添加的模块没有重新启动导致的,然后重新与运行npm run dev后还是失败, 最后经过反 ...

随机推荐

  1. 271.已正确安装证书,但https显示连接不安全(此页面的部分内容不安全)

    1.问题描述 成功安装证书,但是显示连接不安全 此页面的部分内容(例如图像)不安全 如下图 2.问题原因 页面引用(含有)http资源的文件.图片.脚本 如:图片引自其他http资源的网站 我的是引自 ...

  2. 不要小看小小的 emoji 表情

    前言 好久没更新了,最近事比较多,或许下个月就会恢复到正常的发文频次. 这篇文章得从一个 emoji 表情开始,我之前开源的一个 IM 项目中有朋友提到希望可以支持 emoji 表情传输. https ...

  3. 变量的范围 namespace

    变量的范围 范围 变量有 菊部变量 和 全局变量之分, local variable 和 global variable 一般在函数体外定义的变量是全局的,函数体内定义的变量只能在函数内使用 注意:在 ...

  4. Redis字符串键的底层原理

    before C语言基础 Redis基础 导入 redis的命令如下: set x "hello"; get x; hello Redis作为一种存储字符串的缓存结构,其具体实现是 ...

  5. Filter过滤器学习

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  6. print.js继承原有样式

    npm install --save print-js import Print from 'print-js' 调用print.js插件 Print({ printable: 'printJS-fo ...

  7. PythonI/O进阶学习笔记_5.python的set和dict

    前言: 我一直觉得对我来说学习知识很忌讳不系统.本篇内容与上一篇 自定义序列类是有联系的. 上一篇比较通范的了解了序列类的一些协议和特性,并且有些list的内容.这篇更加具体到set和dict这两个序 ...

  8. 去掉Myeclipse对JS等文件的验证

    在用Myeclipse导入新工程或在写代码时,最郁闷的就是它对js,jsp,html的验证太严格了,有时会呈现一个红叉或者一个黄色的感慨号,一运行就报Cannot return from outsid ...

  9. 二分练习题3 查找小于x的最大元素 题解

    题目描述 现在告诉你一个长度为 \(n\) 的有序数组 \(a_1, a_2, ..., a_n\) ,以及 \(q\) 次询问,每次询问会给你一个数 \(x\) ,对于每次询问,你需要输出数组 \( ...

  10. C++输入输出常用格式(cin,cout,stringstream)

    输入格式 1.cin>>a; 最基本的格式,适用于各种类型.会过滤掉不可见字符例如空格,TAB,回车等 2.cin>>noskipws>>ch[i]; 使用了 no ...