JavaScript使用canvas绘制坐标和线


Posted in Javascript onApril 28, 2021

本文实例为大家分享了JavaScript使用canvas绘制坐标和线的具体代码,供大家参考,具体内容如下

具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>在指定位置画多个点</title>
    <style>
        canvas{
            border: 1px dashed gray;
        }
    </style>
</head>
<body>
    <canvas id="cvs" width="500" height="500"></canvas>
</body>
</html>

js代码:

<script>
    var cvs = document.getElementById('cvs');
    var ctx = cvs.getContext('2d');
 
    // 坐标轴距离画布上右下左的边距
    var padding = {
        top:20,
        right:20,
        bottom:20,
        left:20
    }
    // 坐标轴中箭头的宽和高
    var arrow = {
        width:12,
        height:20
    }
    // 求坐标轴上顶点的坐标
    var vertexTop = {
        x:padding.left,
        y:padding.top
    }
    // 求坐标轴原点的坐标
    var origin = {
        x:padding.left,
        y:cvs.height - padding.bottom
    }
    // 求坐标轴右顶点的坐标
    var vertexRight = {
        x:cvs.width - padding.left,
        y:cvs.height - padding.bottom
    }
 
    //设置线宽
    ctx.lineWidth = 2;
    //画坐标轴的两条线
    ctx.beginPath();
    ctx.moveTo(vertexTop.x,vertexTop.y);
    ctx.lineTo(origin.x,origin.y);
    ctx.lineTo(vertexRight.x,vertexRight.y);
    ctx.stroke();
 
    //如何画箭头
    //画顶上箭头
    // ^
    // |
    // |
    ctx.beginPath();
    ctx.moveTo(vertexTop.x,vertexTop.y);
    ctx.lineTo(vertexTop.x - arrow.width/2,vertexTop.y + arrow.height);
    ctx.lineTo(vertexTop.x,vertexTop.y + arrow.height/2);
    ctx.lineTo(vertexTop.x + arrow.width/2,vertexTop.y + arrow.height);
    ctx.fill();
 
    //画右边的箭头
    // --->
    ctx.beginPath();
    ctx.moveTo(vertexRight.x,vertexRight.y);
    ctx.lineTo(vertexRight.x - arrow.height,vertexRight.y - arrow.width);
    ctx.lineTo(vertexRight.x - arrow.height/2,vertexRight.y);
    ctx.lineTo(vertexRight.x - arrow.height,vertexRight.y + arrow.width);
    ctx.fill();
 
    /*
     * 在坐标轴中指定位置画点,坐标算法:
     * 点的x轴:原点x坐标 + 点到原点的水平距离
     * 点的y轴:原点y坐标 - 点到原点的垂直距离
     */
    //定义点的坐标
    var points = [[10,10],[50,50],[90,90],[130,130],[170,170],[200,200]];
    //在坐标中画点 使用循环遍历数组中的坐标
    //设置颜色
    ctx.fillStyle = "green";
    points.forEach(function(arr){
        ctx.fillRect(origin.x + arr[0],origin.y - arr[1],5,5);
    });
    //根据点连线
    //防止重绘
    ctx.beginPath();
    ctx.lineWidth = 2;
    ctx.strokeStyle = "yellow";
    points.forEach(function (arr) {
        ctx.lineTo(origin.x + arr[0] + 1.8,origin.y - arr[1] + 1.8);
    });
    //描边
    ctx.stroke();
</script>

效果如下:

JavaScript使用canvas绘制坐标和线

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 显示当前系统时间代码
Dec 28 Javascript
判断控件是否已加载完成的代码
Feb 24 Javascript
基于jquery的仿百度搜索框效果代码
Apr 11 Javascript
一样的table?不一样的table(可编辑状态table)
Sep 19 Javascript
基于jQuery实现的图片切换焦点图整理
Dec 07 Javascript
javacript使用break内层跳出外层循环分析
Jan 12 Javascript
12个非常实用的JavaScript小技巧【推荐】
May 18 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
JavaScript中Dom操作实例详解
Jul 08 Javascript
nodemon实现Typescript项目热更新的示例代码
Nov 19 Javascript
js实现烟花特效
Mar 02 Javascript
js实现浏览器打印功能的示例代码
Jul 15 Javascript
JS Object构造函数之Object.freeze
Apr 28 #Javascript
关于vue中如何监听数组变化
vue实现简单数据双向绑定
Apr 28 #Vue.js
JS异步堆栈追踪之为什么await胜过Promise
Apr 28 #Javascript
vue引入Excel表格插件的方法
Apr 28 #Vue.js
react如何快速设置文件路径别名
原生JS封装vue Tab切换效果
You might like
基于mysql的bbs设计(三)
2006/10/09 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
用js解决数字不能换行问题
2010/08/10 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
Vue实现日历小插件
2019/06/26 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
详解python基础之while循环及if判断
2017/08/24 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
简单了解python数组的基本操作
2019/11/26 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
商场拾金不昧表扬信
2014/01/13 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
诚信考试承诺书
2014/03/27 职场文书
国际会计专业求职信
2014/08/04 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
详细介绍python类及类的用法
2021/05/31 Python
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL