uniapp+vue3,签字功能

1、html部分(我的程序是要生成小程序和app,只需要其中一个可以单独复制)


<view @click="signatureEvent()">重新签字事件<view>
app
 <!-- #ifdef APP-PLUS -->
 <canvas canvas-id="firstCanvas"
  id="firstCanvas" @touchstart="touchstartEvent($event)" @touchmove="touchmoveEvent($event)"
  @touchend="touchendEvent($event)" style="width: 100%; height: 100%"
  disable-scroll="false"></canvas>
 <!-- #endif -->
 小程序
 <!-- #ifdef MP|H5 -->
  <canvas canvas-id="firstCanvas"
   id="firstCanvas" @touchstart.stop="touchstartEvent($event)"
   @touchmove.stop="touchmoveEvent($event)" @touchend.stop="touchendEvent($event)"
   style="width: 100%; height: 100%" disable-scroll="false"></canvas>
 <!-- #endif -->
<view @click="submit">提交</view>

2.ts部分

<script lang="ts" setup>
const context = ref<any>(null);//Canvas
const clientYTop = ref<any>(0);//画布与顶部的距离
const touch = ref<number>(0);//笔画数

onLoad((options) => {
//刚进来一定要初始化canvas
 initCanvas();
})    

/**
 * 初始化Canvas
 */
function initCanvas() {
    const contextInit = uni.createCanvasContext("firstCanvas");
    contextInit.setFillStyle("#FFF");
    contextInit.fillRect(0, 0, 500, 350);
    context.value = contextInit;
    contextInit.draw();
}
/**
 * 重新签字事件
 */
function signatureEvent() {
    initCanvas();
    clear();
}
/**
 * 清空Canvas
 */
function clear() {
    touch.value = 0;
    context.value.draw();
    context.value.setFillStyle("#fff");
    context.value.fillRect(0, 0, 500, 180);
}
//小程序(开发者工具,手机打开小程序,app,有轻微差别,所以取了e.changedTouches[0].x  ||e.changedTouches[0].clientX)
/**
 * Canvas开始滑动
 */
function touchstartEvent(e: any) {
    touch.value += 1;
    var query: any = uni.createSelectorQuery();
    query.select("#firstCanvas").boundingClientRect();
    query.selectViewport().scrollOffset();
    query.exec(function(res: any) {
        clientYTop.value = res[0].top;
        var x = e.changedTouches[0].x || e.changedTouches[0].clientX
        var y = e.changedTouches[0].y || (e.changedTouches[0].clientY - clientYTop.value)
        context.value.moveTo(
            x,
            y
        );
    });
}
/**
 * 滑动事件
 */
function touchmoveEvent(e: any) {
    if (clientYTop.value) {
        var x = e.changedTouches[0].x || e.changedTouches[0].clientX
        var y = e.changedTouches[0].y || (e.changedTouches[0].clientY - clientYTop.value)
        context.value.lineTo(
            x,
            y
        );
        context.value.stroke();
        context.value.draw(true);
        context.value.moveTo(
            x,
            y
        );
    }
}
/**
 * 移开清除 clientYTop
 */
function touchendEvent(e: any) {
    clientYTop.value = 0;
}

/**
 * Canvas导出图片
 */
function exportFilePath() {
    return new Promise((resolve, reject) => {
        context.value.draw(
            true,
            wx.canvasToTempFilePath({
                fileType: "jpg",
                canvasId: "firstCanvas",
                success: (res: any) => resolve(res.tempFilePath),
                fail: () => ($ajax.showToast("导出失败"), reject()),
            })
        );
    });
}
async function submit() {
 const filePath = await exportFilePath();
 console.log(filePath)
}

   
</script>

如果有帮助到你,请帮我点个赞,谢谢

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
uniapp是一个基于Vue.js的跨平台开发框架,而Vue3是Vue.js的最新版本。它们的结合可以带来更好的开发体验和性能优化。uniapp提供了导航栏双页切换的功能,而Vue3的Pinia框架则提供了参数输出和方法调用的功能,还支持模块化和持久化存储。如果您有关于uniappVue3的使用问题,您可以查看uniapp官网获取更详细的信息和示例代码。uniapp在早期版本中开始支持Vue3的使用,并且从HBuilderX 3.2版本开始支持创建基于Vue3的uniapp项目。使用uniappVue3开发项目的流程与常规的Vue3开发类似。您可以按照官方提供的升级指南和使用文档来进行开发。希望以上信息对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [uniapp+vue3+pinia框架(模块化+持久化存储)](https://download.csdn.net/download/qq_35079107/87910679)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [uniapp + vue3微信小程序开发(1)框架搭建](https://blog.csdn.net/qq_39404437/article/details/124345386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [uniapp开发:uniapp之切换vue3,一直使用一直爽](https://blog.csdn.net/qq_42961150/article/details/121375073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值