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

从零开始学习在VUE3中使用canvas(六):lineCap(线条端点样式)

一、简介

lineCap能够让我们设置线条的端点样式,例如

1. butt

  const ctx = canvas.getContext("2d");ctx.lineCap = "butt"; // 默认样式,也可以显式指定

2.round

  const ctx = canvas.getContext("2d");//圆头ctx.lineCap = "round";

3.square

  const ctx = canvas.getContext("2d");//方头ctx.lineCap = "square";

二、全部代码展示

<template><div class="canvasPage"><!-- 写一个canvas标签 --><canvas class="main" ref="main"></canvas></div>
</template>
<script setup lang="ts">
import { ref, onMounted } from "vue";// 获取canvas元素
const main = ref<HTMLCanvasElement>();// 绘制canvas
const drawCanvas = () => {// 确保获取到了canvas元素if (!main.value) return console.error("无法获取Canvas元素");const canvas = main.value;// 设置canvas的宽高canvas.width = 200;canvas.height = 100;// 获取Canvas绘制2D环境const ctx = canvas.getContext("2d");if (!ctx) return console.error("无法获取CanvasRenderingContext2D");// 设置三条线的起始Y坐标,保持平行const startY = 20;const lineSpacing = 20;// 第一条线:butt样式ctx.lineWidth = 12;ctx.lineCap = "butt"; // 默认样式,也可以显式指定ctx.beginPath(); // 开始新的路径ctx.moveTo(10, startY);ctx.lineTo(190, startY);ctx.stroke(); // 绘制线条// 第二条线:round样式ctx.lineCap = "round";ctx.beginPath(); // 开始新的路径ctx.moveTo(10, startY + lineSpacing);ctx.lineTo(190, startY + lineSpacing);ctx.stroke(); // 绘制线条// 第三条线:square样式ctx.lineCap = "square";ctx.beginPath(); // 开始新的路径ctx.moveTo(10, startY + lineSpacing * 2);ctx.lineTo(190, startY + lineSpacing * 2);ctx.stroke(); // 绘制线条
};
// 页面挂载后才能绘制
onMounted(() => {drawCanvas();
});
</script>
<style lang="scss" scoped>
.canvasPage {width: 100%;height: 100vh;display: flex;justify-content: center;align-items: center;background-color: #ffffff;.main {width: 200px;height: 100px;}
}
</style>

相关文章:

  • C++简单实现哈希查找
  • TypeScript再学习(1)数据类型
  • Docker之docker compose!!!!
  • 数据结构与算法2-俩变量值交换、理解异或位运算
  • 还敢自学黑客,骂醒一个算一个(网络安全/信息安全)
  • 【Android】【Bluetooth Stack】蓝牙音乐协议分析之音频控制与信息加载(超详细)
  • 二叉树的遍历及线索二叉树试题(三)
  • 【CMake】所见所闻所学
  • 【蓝桥杯-单片机】基于定时器的倒计时程序设计
  • 基础:TCP四次挥手做了什么,为什么要挥手?
  • 编程题:相同数字的积木游戏(Java)
  • 暴力快速入门强化学习
  • 2024年阿里云服务器地域和可用区所在地区城市分布表
  • MT2191 整数大小比较(高精度)
  • React—— props校验(非typescript校验类型)
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • AHK 中 = 和 == 等比较运算符的用法
  • AngularJS指令开发(1)——参数详解
  • co模块的前端实现
  • Java-详解HashMap
  • JAVA之继承和多态
  • JS学习笔记——闭包
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Lucene解析 - 基本概念
  • orm2 中文文档 3.1 模型属性
  • PHP变量
  • PHP的Ev教程三(Periodic watcher)
  • Promise面试题,控制异步流程
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Vue组件定义
  • 初识MongoDB分片
  • 从setTimeout-setInterval看JS线程
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 老板让我十分钟上手nx-admin
  • 区块链共识机制优缺点对比都是什么
  • 小程序 setData 学问多
  • FaaS 的简单实践
  • scrapy中间件源码分析及常用中间件大全
  • Spring第一个helloWorld
  • # 安徽锐锋科技IDMS系统简介
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • $L^p$ 调和函数恒为零
  • (04)odoo视图操作
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (java)关于Thread的挂起和恢复
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (分类)KNN算法- 参数调优
  • . NET自动找可写目录
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net 应用中使用dot trace进行性能诊断