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入门教程(2) JS基础知识
Jan 31 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
Feb 26 Javascript
JavaScript和CSS通过expression实现Table居中显示
Jun 28 Javascript
jquery 循环显示div的示例代码
Oct 18 Javascript
jquery实现图片随机排列的方法
May 04 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
Sep 14 Javascript
jQuery验证表单格式的使用方法
Jan 10 Javascript
html5+canvas实现支持触屏的签名插件教程
May 08 Javascript
node.js学习之事件模块Events的使用示例
Sep 28 Javascript
Node批量爬取头条视频并保存方法
Sep 20 Javascript
详解Vue中使用Axios拦截器
Apr 22 Javascript
Js图片点击切换轮播实现代码
Jul 27 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
php扩展ZF――Validate扩展
2008/01/10 PHP
php xml文件操作实现代码(二)
2009/03/20 PHP
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
php curl选项列表(超详细)
2013/07/01 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
JAVA四种基本排序方法实例总结
2015/07/24 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python字符串处理实现单词反转
2017/06/14 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
写给学生的新学期寄语
2014/01/18 职场文书
小组合作学习反思
2014/02/18 职场文书
家长学校实施方案
2014/03/15 职场文书
黄金酒广告词
2014/03/21 职场文书
高中同学会活动方案
2014/08/14 职场文书
公务员考察材料范文
2014/12/23 职场文书
奠基仪式致辞
2015/07/30 职场文书
德劲DE1105机评
2022/04/05 无线电