canvas画箭头demo
2024-08-24 13:45:45
效果图:
代码:
<!DOCTYPE html>
<html>
<title>canvas画箭头demo</title>
<body>
<canvas id="canvas" width="200" height="200" style="border:1px dotted #d3d3d3;"></canvas>
<script>
var canvas=document.getElementById("canvas");
var context=canvas.getContext("2d"); function Line(x1,y1,x2,y2){
this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
}
Line.prototype.drawWithArrowheads=function(ctx,type){ // 设置箭头样式
ctx.strokeStyle="black";
ctx.fillStyle="black";
ctx.lineWidth=3; // 画线
ctx.beginPath();
ctx.moveTo(this.x1,this.y1);
ctx.lineTo(this.x2,this.y2);
ctx.stroke(); if(type == 1){
// 画向上的箭头
var startRadians=Math.atan((this.y2-this.y1)/(this.x2-this.x1));
startRadians+=((this.x2>this.x1)?-90:90)*Math.PI/-180;
this.drawArrowhead(ctx,this.x1,this.y1-5,startRadians);
}else{
// 画向下的箭头
var endRadians=Math.atan((this.y2-this.y1)/(this.x2-this.x1));
endRadians+=((this.x2>this.x1)?90:-90)*Math.PI/-180;
this.drawArrowhead(ctx,this.x2,this.y2+5,endRadians); }
}
Line.prototype.drawArrowhead=function(ctx,x,y,radians){
ctx.save();
ctx.beginPath();
ctx.translate(x,y);
ctx.rotate(radians);
ctx.moveTo(0,0);
ctx.lineTo(5,20);
ctx.lineTo(-5,20);
ctx.closePath();
ctx.restore();
ctx.fill();
} // 创建一个新的箭头对象
var line=new Line(50,50,50,155);
var line1=new Line(60,50,60,155);
// 第二个参数为1则箭头向上,不为1则箭头向下
line.drawWithArrowheads(context,1);
line1.drawWithArrowheads(context,2);
</script>
</body>
</html>
最新文章
- 【Win 10 应用开发】TCP通信过程
- shell-for循环
- 清空文件下的SVN控制文件
- win7下安装redies
- CF #371 (Div. 2) C、map标记
- iOS开发数据库篇—SQLite常用的函数
- 树中是否存在路径和为 sum leecode java
- $_GLOBALS超全局数组和global定义的全局变量区别?
- java Socket实例
- javascript中new Date()存在的兼容性问题
- Codeforces 1096D Easy Problem 【DP】
- JAVA自学笔记13
- Java学习笔记之——if条件语句和三目运算符
- Linux内核线程创建
- Installing haproxy load balancing for http and https--转载
- SpringData_CrudRepository接口
- CAM350对比两个gerber之间的差异
- vue 路由传参
- 【转载】SQL Server 2012将数据导出为脚本详细图解
- spirng boot打包成war部署