程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

  • uniapp多端开发

    • 快速入门

    • 内置组件

      • 视图容器

      • 基础内容

      • 表单组件

      • 路由页面跳转

      • 媒体组件

      • 地图

      • 画布

        • 画布组件
          • 1. 什么是 canvas 组件?
          • 2. canvas 组件的常用属性
            • 2.1 指定 canvas 类型
            • 2.2 禁止滚动 disable-scroll
            • 2.3 高清处理 hidpi
          • 3. 绘制图形与响应事件
            • 3.1 基本图形绘制
            • 3.2 错误处理事件
      • 网页嵌入

      • 页面属性配置节点

      • nvue组件

      • 小程序组件

    • 扩展组件

  • 小程序开发
  • uniapp多端开发
  • 内置组件
  • 画布
scholar
2024-10-21
目录

画布组件

# 画布组件

canvas 组件是 Uniapp 中用于绘制图形、处理图像和进行自由渲染的基础组件,广泛用于图表、动画、图片处理等场景。canvas 组件支持 2D 和 WebGL 两种渲染模式,具有较高的灵活性和跨平台兼容性。

# 1. 什么是 canvas 组件?

canvas 组件用于在网页或应用中动态绘制内容,支持 2D 和 WebGL 渲染模式。开发者可以通过 JavaScript 来控制绘制图形、处理图像、制作图表或进行复杂的动画处理。canvas 组件常见于 H5 页面、小程序、App-Vue 等环境,允许用户直接绘制和更新内容。

使用场景

  • 图表绘制:使用 canvas 绘制各种类型的图表,如柱状图、折线图、饼图等。
  • 图片处理:处理图片的合成、裁剪、滤镜等操作。
  • 动画渲染:实现帧动画、粒子特效等复杂的动画效果。
  • 自由绘制:用户可通过触摸屏或鼠标进行自由绘图操作,如画板类应用。

# 2. canvas 组件的常用属性

canvas 组件提供了丰富的属性和事件,用于控制绘图行为和响应用户操作。以下是常用属性的详细说明及使用示例:

属性名 类型 默认值 说明 平台差异说明
type String 指定 canvas 类型,支持 2d 和 webgl 微信小程序 2.7.0+,抖音小程序1.78.0+
canvas-id String canvas 组件的唯一标识符
disable-scroll Boolean false 当在 canvas 中移动时且有绑定手势事件时,禁止屏幕滚动及下拉刷新 抖音小程序与飞书小程序不支持
hidpi Boolean true 是否启用高清处理,优化绘图清晰度 H5 (HBuilder X 3.4.0+)、App-vue (HBuilder X 3.4.0+)
@touchstart EventHandle 手指触摸动作开始 抖音小程序1.78.0+
@touchmove EventHandle 手指触摸后移动 抖音小程序1.78.0+
@touchend EventHandle 手指触摸动作结束 抖音小程序1.78.0+
@touchcancel EventHandle 手指触摸动作被打断,如来电提醒,弹窗 抖音小程序1.78.0+
@longtap EventHandle 手指长按 500ms 后触发,触发了长按事件后进行移动不会触发屏幕的滚动 抖音小程序与飞书小程序不支持
@error EventHandle 当发生错误时触发 error 事件,detail = {errMsg: 'something wrong'} 抖音小程序与飞书小程序不支持

# 2.1 指定 canvas 类型

  • 说明:通过 type 属性指定 canvas 的类型,支持 2d 和 webgl 渲染。
  • 类型:String
  • 默认值:无
<template>
  <!-- 2D canvas 类型 -->
  <canvas canvas-id="2dCanvas" type="2d" style="width: 300px; height: 200px;"></canvas>

  <!-- WebGL canvas 类型 -->
  <canvas canvas-id="webglCanvas" type="webgl" style="width: 300px; height: 200px;"></canvas>
</template>
1
2
3
4
5
6
7

# 2.2 禁止滚动 disable-scroll

  • 说明:通过 disable-scroll 属性可以在 canvas 中绑定手势事件时禁止屏幕滚动或下拉刷新。
  • 类型:Boolean
  • 默认值:false
<template>
  <canvas canvas-id="noScrollCanvas" disable-scroll="true" style="width: 300px; height: 200px;"></canvas>
</template>
1
2
3

# 2.3 高清处理 hidpi

  • 说明:是否启用高清处理,主要在 H5 和 App-Vue 中使用,用于优化 canvas 的清晰度。
  • 类型:Boolean
  • 默认值:true
<template>
  <canvas canvas-id="hdCanvas" hidpi="true" style="width: 300px; height: 200px;"></canvas>
</template>
1
2
3

# 3. 绘制图形与响应事件

以下案例展示了如何使用 canvas 绘制基本图形,并处理用户的触摸事件。

# 3.1 基本图形绘制

通过 JavaScript 代码绘制简单的矩形和圆形,演示 canvas 的基本绘图功能。

<template>
  <view>
    <!-- 2D Canvas 画布 -->
    <canvas canvas-id="basicCanvas" style="width: 300px; height: 200px;"></canvas>
  </view>
</template>

<script>
import { onMounted } from 'vue'

export default {
  setup() {
    onMounted(() => {
      // 创建 canvas 上下文
      const context = uni.createCanvasContext('basicCanvas')
      
      // 绘制矩形
      context.setFillStyle('#00ff00')
      context.fillRect(0, 0, 150, 100)
      
      // 绘制圆形
      context.setFillStyle('#ff0000')
      context.arc(75, 75, 50, 0, Math.PI * 2, true)
      context.fill()
      
      // 完成绘制
      context.draw()
    })
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 3.2 错误处理事件

通过 @error 事件捕捉 canvas 组件发生的错误,并打印详细的错误信息。

<template>
  <view>
    <canvas canvas-id="errorCanvas" style="width: 300px; height: 200px;" @error="handleCanvasError"></canvas>
  </view>
</template>

<script>
import { ref } from 'vue'

export default {
  setup() {
    const handleCanvasError = (e) => {
      console.error('Canvas 错误:', e.detail.errMsg)
    }
    
    return {
      handleCanvasError
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
编辑此页 (opens new window)
上次更新: 2025/02/01, 02:18:15
地图组件
网页嵌入组件

← 地图组件 网页嵌入组件→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式