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-世界上误解最深的语言分析
Aug 12 Javascript
javascript深入理解js闭包
Jul 03 Javascript
js网页中的(运行代码)功能实现思路
Feb 04 Javascript
关于js遍历表格的实例
Jul 10 Javascript
jQuery避免$符和其他JS库冲突的方法对比
Feb 20 Javascript
在页面加载完成后通过jquery给多个span赋值
May 21 Javascript
js实现背景图片感应鼠标变化的方法
Feb 28 Javascript
再谈JavaScript线程
Jul 10 Javascript
javascript中sort() 方法使用详解
Aug 30 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
Dec 25 Javascript
vue实现侧边栏导航效果
Oct 21 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+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
JavaScript继承方式实例
2010/10/29 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
python如何创建TCP服务端和客户端
2018/08/26 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
在pycharm中实现删除bookmark
2020/02/14 Python
python3将变量输入的简单实例
2020/08/19 Python
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
爱情检讨书大全
2014/01/21 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
2014年党务公开方案
2014/05/08 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
2015年防汛工作总结
2015/05/15 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
学生会自荐信
2019/05/16 职场文书
如何Python使用re模块实现okenizer
2022/04/30 Python