微信小程序-canvas

文章目录

微信小程序-canvas

概述

在HTML中,canvas 标签可用于图形的绘制,也可用于创建图片特效和动画。在微信小程序中,canvas组件也起着类似作用,可用于自定义绘制图形,该组件支持2D和WebGL的绘图。

canvas 组件通过 <canvas> 标签来定义:

xml 复制代码
<canvas></canvas>

canvas 标签默认宽度300px、高度150px。

canvas常用属性

属性 类型 说明
type string 指定 canvas 组件的类型,支持 2D 和 WebGL
canvas-id string canvas 组件的唯一表示,若指定 type 属性则无需再指定该属性
disable-scroll boolean 当在 canvas 中移动时且有绑定手势事件时,禁止屏幕滚动以及下拉刷新
bindtouchstart eventhandle 手指触摸动作开始
bindtouchmove eventhandle 手指触摸移动
bindtouchend eventhandle 手指触摸动作结束
bindtouchcancel eventhandle 手指触摸动作被打断,如:来电提醒、弹窗等
bindlongtap eventhandle 手指长按 500 毫秒后触发,触发了长按事件后进行移动不会触发屏幕的滚动
binderror eventhandle 当发生错误时触发
xml 复制代码
<canvas id="myCanvas" type="2d"></canvas>
css 复制代码
#myCanvas {
	dispplay: block;
    width: 300px;
    height: 150px;
    position: relative;
    border: 1px solid red;
}
js 复制代码
wx.createSelectorQuery()
    .select("myCanvas")
    .fields({node:true,size:true})
    .exec(res => {
        const canvas = res[0].node // 获取Canvas实例
        const ctx = canvas.getContext("2d") // 获取RenderingContext实例
    })

RenderingContext属性和方法

属性:

属性 说明
width 画布宽度
height 画布高度
fillStyle 设置或返回用于填充绘画的颜色、渐变或模式
strokeStyle 设置描边颜色
lineWidth 设置或返回当前线条宽度
font 设置或返回文本内容的当前字体属性
textBaseline 设置或返回在绘制文本时使用的当前文本基线

方法:

方法 说明
rect() 创建矩形
fillRect() 创建填充矩形
strokeRect() 画一个矩形(非填充)。
clearRect() 清除矩形范围内的像素
stroke() 画出当前路径的边框。默认颜色色为黑色。
beginPath() 开始创建一个路径
closePath() 创建从当前点回到起点的路径
moveTo() 移动路径到指定点,不创建线
arc() 绘制一条弧线
rotate() 以原点为中心顺时针旋转当前坐标轴。多次调用旋转的角度会叠加。原点可以用 translate 方法修改。
translate() 对当前坐标系的原点 (0, 0) 进行变换。默认的坐标系原点为页面左上角。
fillText() 在画布上绘制被填充的文本
restore() 恢复之前保存的绘图上下文
save 保存绘图上下文
xml 复制代码
<canvas id="draw" type="2d" ></canvas>
js 复制代码
Page({
    onReady() {
        wx.createSelectorQuery()
            .select("#draw")
            .fields({node: true, size: true})
            .exec(res => {
            const canvas = res[0].node
            const ctx = canvas.getContext("2d")
            this.drawRect(ctx)
            this.drawSmile(ctx)
        })
    },
    drawRect(ctx) {
        ctx.fillStyle = "rgba(0,0,200,0.4)"
        ctx.fillRect(10, 10, 150, 150)
    },
    drawSmile(ctx) {
        // 绘制线条
        ctx.strokeStyle = "#f00"
        ctx.lineWidth = "2"
        // 绘制外部大圆
        ctx.moveTo(160, 80)
        ctx.arc(100, 80, 60, 0, 2*Math.PI, true)
        // 绘制外部嘴巴线条
        ctx.moveTo(140, 80)
        ctx.arc(100, 80, 40, 0, Math.PI, false)
        // 绘制左边眼圈
        ctx.moveTo(85, 60)
        ctx.arc(80, 60, 5, 0, 2*Math.PI, true)
        // 绘制右边眼圈
        ctx.moveTo(125, 60)
        ctx.arc(120, 60, 5, 0, 2*Math.PI, true)
        ctx.stroke()            
    }
})
相关推荐
是一碗螺丝粉13 小时前
拯救你的app/小程序审核!一套完美避开审核封禁的URL黑名单机制
前端·javascript·微信小程序
weixin_lynhgworld17 小时前
盲盒抽谷机小程序系统开发:从0到1的完整方法论
小程序
weixin_lynhgworld17 小时前
短剧小程序系统开发:赋能创作者,推动短剧艺术创新发展
小程序
德育处主任18 小时前
p5.js 3D 形状 "预制工厂"——buildGeometry ()
前端·javascript·canvas
一匹电信狗20 小时前
【C++】异常详解(万字解读)
服务器·c++·算法·leetcode·小程序·stl·visual studio
我叫黑大帅21 小时前
微信小程序分包:告别加载慢,像拆快递一样简单!
前端·微信小程序
两个月菜鸟1 天前
vue+微信小程序 五角星
前端·vue.js·微信小程序
说私域1 天前
基于开源AI智能客服、AI智能名片与S2B2C商城小程序的微商服务优化及复购转介绍提升策略研究
人工智能·小程序
熬耶2 天前
Uniapp之微信小程序自定义底部导航栏形态
微信小程序·小程序·uni-app
IT毕设实战小研2 天前
基于Spring Boot校园二手交易平台系统设计与实现 二手交易系统 交易平台小程序
java·数据库·vue.js·spring boot·后端·小程序·课程设计