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 相关文章推荐
web 页面分页打印的实现
Jun 22 Javascript
JS 表单验证大全
Nov 23 Javascript
jQuery筛选器children()案例详解(图文)
Feb 17 Javascript
jquery索引在使用中的一些困惑
Oct 24 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
Jan 07 Javascript
js二维数组定义和初始化的三种方法总结
Mar 03 Javascript
js中this用法实例详解
May 05 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
Jan 13 Javascript
完美JQuery图片切换效果的简单实现
Jul 21 Javascript
bootstrap Table的一些小操作
Nov 01 Javascript
js如何找出字符串中的最长回文串
Jun 04 Javascript
javascript中如何判断类型汇总
May 14 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
初探PHP5
2006/10/09 PHP
一些使用频率比较高的php函数
2008/10/03 PHP
php define的第二个参数使用方法
2013/11/04 PHP
php获取twitter最新消息的方法
2015/04/14 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
jQuery动画animate方法使用介绍
2013/05/06 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
domReady的实现案例
2016/11/23 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
浅谈python 线程池threadpool之实现
2017/11/17 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
自荐信如何制作?
2014/02/21 职场文书
文化活动实施方案
2014/03/28 职场文书
人力资源职位说明书
2014/07/29 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
教师个人总结范文
2015/02/11 职场文书
企业催款函范本
2015/06/24 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python