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 相关文章推荐
Add Formatted Data to a Spreadsheet
Jun 12 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
Sep 02 Javascript
得到form下的所有的input的js代码
Nov 07 Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 Javascript
js实现在网页上简单显示时间的方法
Mar 02 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
Mar 05 Javascript
微信小程序 火车票查询实例讲解
Oct 17 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
原JS实现banner图的常用功能
Jun 12 Javascript
深入浅出es6模板字符串
Aug 26 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
Apr 11 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
Apr 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中实现进程间通讯
2006/10/09 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
js身份证验证超强脚本
2008/10/26 Javascript
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
JS实现状态栏跑马灯文字效果代码
2015/10/24 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
python 远程统计文件代码分享
2015/05/14 Python
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
Python函数装饰器实现方法详解
2018/12/22 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
这段代码难道不该打印出56吗
2013/02/27 面试题
介绍一下linux文件系统分配策略
2012/11/17 面试题
致跳远、跳高运动员广播稿
2014/01/09 职场文书
团支部推优材料
2014/05/21 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
浅谈Node的内存泄露问题
2022/05/06 NodeJs