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

canvas绘制横竖坐标轴(带有箭头和刻度)

在这里插入图片描述

查看专栏目录

canvas实例应用100+专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重要的帮助。

文章目录

    • 示例效果图
    • 示例源代码(共79行)
    • canvas基本属性
    • canvas基础方法

canvas如何绘制带有箭头和标有刻度的横竖坐标轴呢? 首先使用for循环遍历横坐标轴的刻度位置,然后使用beginPath()、moveTo()和lineTo()方法绘制刻度线,接着使用font、textAlign和fillText()方法设置字体样式、对齐方式和填充文本内容,最后使用stroke()方法将它们渲染到画布上。同样的操作也应用于纵坐标轴的刻度。

示例效果图

在这里插入图片描述

示例源代码(共79行)


/*
* @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN)
* @此源代码版权归大剑师兰特所有,可供学习或商业项目中借鉴,未经授权,不得重复地发表到博客、论坛,问答,git等公共空间或网站中。
* @Email: 2909222303@qq.com
* @weixin: gis-dajianshi
* @First published in CSDN
* @First published time: 2024-02-08
*/
<template>
	<div class="djs_container">
		<div class="top">
			<h3>canvas绘制带有箭头和标有刻度的横竖坐标轴</h3>
			<div>大剑师兰特, 还是大剑师兰特,gis-dajianshi</div>
			<h4>
				<el-button type="success" size="mini" @click="draw()">绘制</el-button>
				<el-button type="danger" size="mini" @click="clearCanvas()">清除画屏</el-button>
			</h4>
		</div>
		<div class="dajianshi ">
			<canvas id="dajianshi" ref="mycanvas" width="980" height="480"></canvas>
		</div>
	</div>
</template>
<script>
	export default {
		data() {
			return {
				ctx: null,
				canvas: null,
			}
		},
		mounted() {
			this.setCanvas()
		},
		methods: {
			clearCanvas() {
				this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
			},
			setCanvas() {
				this.canvas = document.getElementById('dajianshi');
				if (!this.canvas.getContext) return;
				this.ctx = this.canvas.getContext("2d");
				this.ctx.translate(200,50)
			},

			draw() {
				let ctx=this.ctx
				// 绘制横坐标轴
				ctx.beginPath();
				ctx.moveTo(50, 350);
				ctx.lineTo(680, 350);
				ctx.stroke();

				// 绘制纵坐标轴
				ctx.beginPath();
				ctx.moveTo(50, 50);
				ctx.lineTo(50, 350);
				ctx.stroke();

				// 绘制横坐标轴刻度
				for (let i = 1; i <= 15; i++) {
					const x = 50 + i * 40;
					ctx.beginPath();
					ctx.moveTo(x, 350);
					ctx.lineTo(x, 360);
					ctx.stroke();
					  // 绘制刻度值
					  ctx.font = '12px Arial';
					  ctx.textAlign = 'center';
					  ctx.fillText(i, x, 370);
					  
				}
				ctx.fillText('0', 50, 370);

				// 绘制纵坐标轴刻度
				for (let i = 1; i <= 9; i++) {
					const y = 350 - i * 30;
					ctx.beginPath();
					ctx.moveTo(50, y);
					ctx.lineTo(40, y);
					ctx.stroke();
					  // 绘制刻度值
					  ctx.font = '12px Arial';
					  ctx.textAlign = 'right';
					  ctx.fillText(i, 45, y);
				}

				// 绘制横坐标轴箭头
				ctx.beginPath();
				ctx.moveTo(680, 340);
				ctx.lineTo(690, 350);
				ctx.lineTo(680, 360);
				ctx.closePath();
				ctx.fillStyle = 'red';
				ctx.fill();

				// 绘制纵坐标轴箭头
				ctx.beginPath();
				ctx.moveTo(40, 55);
				ctx.lineTo(50, 45);
				ctx.lineTo(60, 55);
				ctx.closePath();
				ctx.fillStyle = 'red';
				ctx.fill();
			},

		}
	}
</script>
<style scoped>
	.djs_container {
		width: 1000px;
		height: 680px;
		margin: 50px auto;
		border: 1px solid #222;
		position: relative;
	}

	.top {
		margin: 0 auto 0px;
		padding: 10px 0;
		background: #222;
		color: #fff;
	}

	.dajianshi {
		margin: 5px auto 0;
		border: 1px solid #cde;
		width: 980px;
		height: 480px;
		background-color: #eee;
	}

</style>




canvas基本属性

属性属性属性
canvasfillStylefilter
fontglobalAlphaglobalCompositeOperation
heightlineCaplineDashOffset
lineJoinlineWidthmiterLimit
shadowBlurshadowColorshadowOffsetX
shadowOffsetYstrokeStyletextAlign
textBaselinewidth

canvas基础方法

方法方法方法
arc()arcTo()addColorStop()
beginPath()bezierCurveTo()clearRect()
clip()close()closePath()
createImageData()createLinearGradient()createPattern()
createRadialGradient()drawFocusIfNeeded()drawImage()
ellipse()fill()fillRect()
fillText()getImageData()getLineDash()
isPointInPath()isPointInStroke()lineTo()
measureText()moveTo()putImageData()
quadraticCurveTo()rect()restore()
rotate()save()scale()
setLineDash()setTransform()stroke()
strokeRect()strokeText()transform()
translate()

http://www.kler.cn/a/231380.html

相关文章:

  • 视频直播5G CPE解决方案:ZX7981PG/ZX7981PMWIFI6网络覆盖
  • 集群聊天服务器(7)数据模块
  • thinkphp6模板调用URL方法生成的链接异常
  • 领海基点的重要性-以黄岩岛(民主礁)的领海及专属经济区时空构建为例
  • 从零开始创建一个 Vue3+Vite+TS+Eslint项目
  • Vue3中使用Axios构建高效的请求处理机制
  • 飞天使-k8s知识点16-kubernetes实操1-pod
  • 堆排序-Python实现
  • 风行智能电视N39S、N40 强制刷机升级方法,附刷机升级数据MstarUpgrade.bin
  • B站UP主实时信息获取展示php源码
  • 详细分析python中的 async 和 await(附Demo)
  • [python]基于opencv实现的车道线检测
  • C程序设计(第5版)谭浩强习题解答 第8章 善于利用指针
  • 2023年ABC123公众号年刊下载(PDF电子书)
  • 开源软件对技术以及行业发展的影响
  • 进程状态 | 僵尸进程 | 孤儿进程 | 前台后台进程 | 守护进程
  • JavaEE作业-实验三
  • List与数组相互转换
  • 【react native】ScrollView的触摸事件与TouchableWithoutFeedback的点击事件冲突
  • 蓝桥杯基础知识8 list
  • Flutter组件 StatefulWidget、StatelessWidget 可继承写法
  • Docker 搭建mysql 集群(二)
  • C语言——oj刷题——实现字符串逆序
  • 波纹扩散效果
  • 阿里云游戏服务器租用价格表,2024最新报价
  • Linux下centos操作系统安装Mysql8.0过程及踩坑填补