当前位置: 首页 > article >正文

微信小程序-canvas

文章目录

  • 微信小程序-canvas
    • 概述
    • canvas常用属性
    • RenderingContext属性和方法

微信小程序-canvas

概述

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

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

<canvas></canvas>

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

canvas常用属性

属性类型说明
typestring指定 canvas 组件的类型,支持 2D 和 WebGL
canvas-idstringcanvas 组件的唯一表示,若指定 type 属性则无需再指定该属性
disable-scrollboolean当在 canvas 中移动时且有绑定手势事件时,禁止屏幕滚动以及下拉刷新
bindtouchstarteventhandle手指触摸动作开始
bindtouchmoveeventhandle手指触摸移动
bindtouchendeventhandle手指触摸动作结束
bindtouchcanceleventhandle手指触摸动作被打断,如:来电提醒、弹窗等
bindlongtapeventhandle手指长按 500 毫秒后触发,触发了长按事件后进行移动不会触发屏幕的滚动
binderroreventhandle当发生错误时触发
<canvas id="myCanvas" type="2d"></canvas>
#myCanvas {
	dispplay: block;
    width: 300px;
    height: 150px;
    position: relative;
    border: 1px solid red;
}
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保存绘图上下文
<canvas id="draw" type="2d" ></canvas>
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()            
    }
})

http://www.kler.cn/news/321528.html

相关文章:

  • go语言网络编程
  • 【Linux 从基础到进阶】Kafka消息队列配置与管理
  • C/C++中的内存管理
  • c语言200例 063 信息查询
  • 数据结构 ——— 移除元素(快慢指针)
  • io流(学习笔记03)字符集
  • 大数据时代的PDF解析:技术与挑战
  • Python:百度贴吧实现自动化签到
  • Spring是什么
  • 有源蜂鸣器(5V STM32)
  • 无人机之虚拟云台技术篇
  • LeetCode 137. 只出现一次的数字 II
  • Linux安装vim超详细教程
  • MySQL重点,面试题
  • 深入Android UI开发:从自定义View到高级布局技巧的全面学习资料
  • RestSharp简介
  • 通信工程学习:什么是SDN软件定义网络
  • 电脑如何设置代理IP:详细步骤指南
  • STM32 入门教程(江科大教材)#笔记4
  • 01.前端面试题之ts:说说如何在Vue项目中应用TypeScript?
  • 趣笔阁爬虫实验
  • Hadoop FileSystem Shell 常用操作命令
  • GO Message Bus
  • 【Python报错已解决】AttributeError: ‘tuple‘ object has no attribute ‘log_softmax‘
  • 华为为什么要做三折叠屏手机?
  • (已解决)torch.load的时候发生错误ModuleNotFoundError: No module named ‘models‘
  • kafka分区和副本的关系?
  • 深度学习:ResNet残差神经网络
  • 【OpenSSL】OpenSSL 教程
  • C++ 数据类型分类