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 相关文章推荐
jQuery判断iframe中元素是否存在的方法
May 11 Javascript
jquery中ajax使用error调试错误的方法
Feb 08 Javascript
JS实现的多张图片轮流播放幻灯片效果
Jul 22 Javascript
angularJS 如何读写缓冲的方法(推荐)
Aug 06 Javascript
vue一个页面实现音乐播放器的示例
Feb 06 Javascript
原生javascript AJAX 三级联动的实现代码
May 04 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
Aug 20 Javascript
解决Angular2 router.navigate刷新页面的问题
Aug 31 Javascript
js实现京东秒杀倒计时功能
Jan 21 Javascript
详解Next.js页面渲染的优化方案
Jan 27 Javascript
Vue 无限滚动加载指令实现方法
May 28 Javascript
vue基于v-charts封装双向条形图的实现代码
Dec 09 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
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
php取出数组单个值的方法
2018/03/12 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
js判断浏览器的比较全的代码
2007/02/13 Javascript
JavaScript Archive Network 集合
2007/05/12 Javascript
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
keras.layer.input()用法说明
2020/06/16 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
生物制药自我鉴定
2014/01/25 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
三八妇女节标语
2014/10/09 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
入团申请书格式
2019/06/20 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers