效果图:

代码:

<!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>

最新文章

  1. 【Win 10 应用开发】TCP通信过程
  2. shell-for循环
  3. 清空文件下的SVN控制文件
  4. win7下安装redies
  5. CF #371 (Div. 2) C、map标记
  6. iOS开发数据库篇—SQLite常用的函数
  7. 树中是否存在路径和为 sum leecode java
  8. $_GLOBALS超全局数组和global定义的全局变量区别?
  9. java Socket实例
  10. javascript中new Date()存在的兼容性问题
  11. Codeforces 1096D Easy Problem 【DP】
  12. JAVA自学笔记13
  13. Java学习笔记之——if条件语句和三目运算符
  14. Linux内核线程创建
  15. Installing haproxy load balancing for http and https--转载
  16. SpringData_CrudRepository接口
  17. CAM350对比两个gerber之间的差异
  18. vue 路由传参
  19. 【转载】SQL Server 2012将数据导出为脚本详细图解
  20. spirng boot打包成war部署

热门文章

  1. 棋盘n皇后问题-递归
  2. ueditor粘贴word中图片
  3. pytz
  4. SONiC项目的发展及其相关介绍(转载)
  5. 【原创】go语言学习(十四)IO操作1
  6. 二分算法题目训练(一)——Shell Pyramid详解
  7. spark常见错误【持续更新】
  8. VM 虚拟机 CentOS 7 设置 桥接网络
  9. Spring boot + mybatis 只读取到一个jar包中的mapper配置文件
  10. ShardingSphere Hint模式 SpringBoot + Mybatis