踩坑小程序canvas,uni + vite + vue3 搞起来

微信搜索【涂图了】即可体验小程序

先放出小程序码:
在这里插入图片描述

功能

先列出目前小程序已完成了功能:

  • 笔记绘制;
  • 颜色和宽度;
  • 背景;
  • 撤销;
  • 恢复撤销;
  • 清空;
  • 保存本地;
  • 笔记播放;
  • 分享/口令分享;

下面简单介绍几个重要的功能实现

画布的实现

由于一开始使用了uni + vite + vue3来进行小程序的开发,遇到的第一个坑就是当前版本的uni不支持canvas响应touch事件,从而直接导致无法进行正常的绘制操作。于是就给uni-app提了一个issue,为了不影响开发进度,于是先自己搞了一个解决方案:

其实也比较简单,就是在canvas上面覆盖了一层view,将touch事件绑定在view上。

然后就是创建上下文,由于目前uni没有跟上微信官方的api,所以就直接使用了微信官方提供 的api来获取上下文:

export default function usePaint(selector: string) {
   
  const paint = ref<Paint>();

  const initCanvas = (canvas: any) => {
   
    const {
    windowWidth, windowHeight, pixelRatio } = uni.getSystemInfoSync();
    /**
     * 解决绘图路径锯齿问题
     * 1. 尺寸取物理像素 windowWidth * pixelRatio
     * 2. 画布缩放像素比 ctx.scale
     */
    canvas.width = windowWidth * pixelRatio;
    canvas.height = windowHeight * pixelRatio;

    const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;
    ctx.translate(windowWidth * pixelRatio / 2, windowHeight * pixelRatio / 2);

    // #ifndef MP-TOUTIAO
    ctx.scale(pixelRatio
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值