用Canvas绘制2D平面近大远小的马路斑马线

用Canvas绘制2D平面近大远小的马路斑马线

设置canvas和上下文:

首先,你需要创建一个元素,并获取其2D渲染上下文。

绘制斑马线:

使用fillRect或strokeRect方法绘制斑马线。你可以通过循环和计算来绘制多条具有不同宽度和间隔的斑马线。

添加道路背景(可选):

为了增加效果,你还可以绘制一个道路背景,比如灰色或沥青色。

代码

HTML

html 复制代码
<canvas id="myCanvas" width="1960" height="1080"></canvas> 

JavaScript

javascript 复制代码
const canvas = document.getElementById('myCanvas');  
const ctx = canvas.getContext('2d');  
// 定义马路人行道和斑马线属性变量  
const sidewalkLength = 800; // 30米,按100像素/米计算  
const sidewalkWidth = 1000; // 人行道宽度  
const sidewalkColor = '#808080'; // 人行道颜色
const banmaWidth = 20;
const banmaLength = 300;
const banmaGap = 15;
// 绘制马路
ctx.fillStyle = sidewalkColor;  
ctx.fillRect(0, 0, sidewalkLength, sidewalkWidth);
ctx.save();
// 绘制人行道 
ctx.translate(350, 0);
ctx.rotate(Math.PI/2);
ctx.fillStyle = 'white';
for (let i = 0; i * banmaWidth < sidewalkLength; i ++) {
  ctx.fillRect((banmaWidth + banmaWidth + i * 2 ) * i, -i * 2.5, banmaWidth + i * 2, banmaLength + i * 5);
}
ctx.restore();
ctx.font = "15px serif";
ctx.strokeText("模拟近大远小的斑马线", 450, 300);

效果

相关推荐
仰望星空的小猴子10 分钟前
React18和React19新特性
前端
小码哥_常12 分钟前
Android新航标:Navigation 3为何成为变革先锋?
前端
SuperEugene12 分钟前
Vue状态管理扫盲篇:状态管理中的常见坑 | 循环依赖、状态污染与调试技巧
前端·vue.js·面试
骑着小黑马14 分钟前
从 Electron 到 Tauri 2:我用 3.5MB 做了个音乐播放器
前端·vue.js·typescript
进击的尘埃14 分钟前
前端大文件上传全方案:切片、秒传、断点续传与 Worker 并行 Hash 计算实践
javascript
aykon14 分钟前
DataSource详解以及优势
前端
Mintopia14 分钟前
戴了 30 天智能手环后,我才发现自己一直低估了“睡眠”
前端
leolee1815 分钟前
react redux 简单使用
前端·react.js·redux
仰望星空的小猴子16 分钟前
常用的Hooks
前端
天才熊猫君16 分钟前
Vue Fragment 锚点机制
前端