原生canvas标签画线——直线、平行线(设置不同颜色和宽度)

news2024/11/26 0:30:36

1.一条直线

效果图如下:

 代码如下:

<!--
 * @Author: your name
 * @Date: 2023-05-24 17:50:28
 * @LastEditTime: 2023-05-24 18:06:39
 * @LastEditors: localhost
 * @Description: In User Settings Edit
 * @FilePath: /canvas/day01/体验canvas.html
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        canvas {
            border: 1px solid #ccc;
        }
    </style>
</head>

<body>
    <!-- canvas的大小在行内设置,在style里面设置的宽高会使画布变形 -->
    <canvas width="200" height="100"></canvas>

    <script>
        // 1.获取元素
        var mycanvas = document.querySelector('canvas');
        // 2.获取上下文,绘制工具箱
        var ctx = mycanvas.getContext('2d');
        // 3.移动画笔
        ctx.moveTo(50, 50)
        // 4.绘制直线(轨迹,绘制路径)
        ctx.lineTo(100, 50);
        // 5.描边
        ctx.stroke();

    </script>
</body>

</html>

2.画两条平行线

效果如下:

代码如下:

<body>
    <canvas width="300" height="200"></canvas>
    <script>
        var mycanvas=document.querySelector('canvas')
        var ctx=mycanvas.getContext('2d')

        // 平行线的第一条线
        ctx.moveTo(50,50)
        ctx.lineTo(200,50)

        // 平行线的第二条线
        ctx.moveTo(50,70)
        ctx.lineTo(200,70)

        // 描边
        ctx.stroke()
        
    </script>
</body>

/ 有关线条 /

线条宽度,1px

线条颜色,黑色

线条的显示肉眼感觉是灰色且比1px粗一点?对齐的点是线的中心位置,会把线分成两个0.5px,显示会不饱和增加宽度

解决方法:前后移动0.5px

3.画三条不同颜色宽度的平行线

效果图如下:

代码如下:

<!--
 * @Author: your name
 * @Date: 2023-05-24 18:22:50
 * @LastEditTime: 2023-05-24 18:28:37
 * @LastEditors: localhost
 * @Description: In User Settings Edit
 * @FilePath: /canvas/day01/线条颜色.html
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <canvas width="300" height="200"></canvas>
    <script>
        var mycanvas = document.querySelector('canvas')
        var ctx = mycanvas.getContext('2d')

        // 开启新路径
        ctx.beginPath()
        // 平行线的第一条线
        ctx.moveTo(50, 50)
        ctx.lineTo(200, 50)
        ctx.strokeStyle = 'bule'
        ctx.lineWidth = 10;
        ctx.stroke()

        // 开启新路径
        ctx.beginPath()
        // 平行线的第二条线
        ctx.moveTo(50, 70)
        ctx.lineTo(200, 70)
        ctx.strokeStyle = 'green'
        ctx.lineWidth = 5;
        ctx.stroke()

        // 开启新路径
        ctx.beginPath()
        // 平行线的第三条线
        ctx.moveTo(50, 90)
        ctx.lineTo(200, 90)
        ctx.strokeStyle = 'pink'
        ctx.lineWidth = 8;
        // 描边
        ctx.stroke()

    </script>
</body>

</html>

 tips:

1.画一条单独样式的线要开启新路径 ctx.beginPath()

2.设置线条颜色 ctx.strokeStyle = 'bule'

3.设置线条宽度 ctx.lineWidth = 10;

4.开启新路径之后都要有描边的代码,不然不会显示效果

4.换一个三角形

效果如下:

代码如下:

<!--
 * @Author: your name
 * @Date: 2023-05-24 18:34:09
 * @LastEditTime: 2023-05-24 18:44:47
 * @LastEditors: localhost
 * @Description: In User Settings Edit
 * @FilePath: /canvas/day01/绘制填充三角形颜色.html
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        canvas{
            border: 1px solid #ccc;
        }
    </style>
</head>
<body>
    <canvas width="400" height="200"></canvas>
    <script>
        var mycanvas=document.querySelector('canvas')
        var ctx=mycanvas.getContext('2d')
        ctx.moveTo(50,50)
        ctx.lineTo(100,50)
        ctx.lineTo(100,100)
        ctx.lineTo(50,50)

        // 描边
        ctx.stroke()
    </script>
</body>
</html>

 延伸

当如上三角形给10px的宽度(ctx.lineWidth = 10),会出现一个角有缺口的情况

 解决这个问题,我们要用一个新的语法 ctx.closePath() --关闭路径,达到效果

补充:

lineWidth 设置线的宽度,默认1px

lineCap 线末端的类型,默认butt、round、square

lineJoin 相交线的拐点,默认miter、round、bevel

strokeStyle 线的颜色

fillStyle 填充的颜色

setLineDash([5 , 10]) 设置虚线【其中[5,10]是用来设置线和空白位置的px,数组里面也可以写多个数字】

getLineDash() 获取虚线宽度集合

lineDashOffset() 设置虚线偏移量(负值向右偏移)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/578606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python潮流周刊#3:PyPI 的安全问题

△点击上方“Python猫”关注 &#xff0c;回复“1”领取电子书 你好&#xff0c;我是猫哥。这里记录每周值得分享的 Python 及通用技术内容&#xff0c;部分为英文&#xff0c;已在小标题注明。&#xff08;标题取自其中一则分享&#xff0c;不代表全部内容都是该主题&#xff…

网站部署与上线(2)远程连接云服务器或虚拟机

文章目录 搭建服务器部署环境配置pm2 可能听说过Windows系统提供的远程桌面。实际上&#xff0c;Linux中也提供了类似的功能&#xff0c;其远程连接基于命令行。 在Windows端连接Linux需要使用SSH软件&#xff0c;最流行的有Xshell和SecureCRT。 首先确定需要连接的云服务器或虚…

Pyside6-第一篇-创建第一个窗口

Hi&#xff0c;今天起开始更新Pyside6教程了&#xff0c;从0-1开始更新&#xff0c;过程比较的久&#xff0c;一点点来。 今天&#xff0c;我们先来搭建环境。 我的环境&#xff1a; ❝ pycharm 2021.3.3(版本随意&#xff0c;只要不是很低就行)Python版本3.95Pyside版本6.50 ❞…

【FreeRTOS】——中断优先级设置中断相关寄存器临界段代码保护调度器挂起与恢复

目录 前言&#xff1a; 一、中断优先级设置 二、中断相关寄存器&#xff08;STM32-Cortex M3&#xff09; 三、临界段代码保护 四、任务调度器的挂起和恢复 总结&#xff1a; 前言&#xff1a; 博客笔记根据正点原子视频教程编辑&#xff0c;仅供学习交流使用&#xff0…

电子器件系列38:mos管散热片

板子上需要用到一个封装为to220的mos管&#xff0c;还得立起来散热&#xff0c;得要加一个散热片。 散热片简介&#xff0c;分类&#xff1f;用途&#xff1f;如何使用&#xff1f;封装&#xff1f;使用注意事项&#xff1f; 简介&#xff1a; mos散热片是一种给电器中的易发热…

线程池实现

一、线程池介绍 1&#xff09;应用场景 当并发数很多的时候&#xff0c;并且每个线程执行时间很短的任务&#xff0c;这样就会频繁创建线程&#xff0c;而这样的频繁创建和销毁线程会大大降低系统的执行效率。对于这种场景我们可以使用线程池来复用之前创建的线程&#xff0c…

Linux—基础篇:目录结构

1、基本介绍 1、linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构的最上层是根目录“/”,然后在此目录下创建其他目录 2、在Linux的世界里&#xff0c;一切皆文件&#xff01;&#xff01;&#xff01; 2、具体的目录结构 不用背&#xff0c;知道即可 2.1、…

价值1000元的稀有二开版的无限坐席在线客服系统源码+教程

demo软件园每日更新资源,请看到最后就能获取你想要的: 1.价值1000元的稀有二开版的无限坐席在线客服系统源码教程 价值1000元的稀有二开版的无限坐席在线客服系统源码 直接一键安装的&#xff0c;启动两个端口就行了&#xff0c;安装倒是简单 类型&#xff1a;在线客服系统 …

MathType7精简版数学公式编辑器

许多简单的数学公式&#xff0c;我们可以使用输入法一个个找到特殊符号并输入&#xff0c;但是对于高等数学中较多复杂的公式符号&#xff0c;是很难使用输入法完成的。那么&#xff0c;我们就需要借助公式编辑器&#xff0c;这里推荐一款我自己正在使用的MathType。 MathType是…

Redis单机数据库

文章目录 一、Redis数据库Redis数据库redisDb数据库键空间——dict过期字典——expires设置键的生存时间移除键的过期时间返回键的生存时间 Redis的过期删除策略1、定期删除2、惰性删除3、内存淘汰机制 过期键处理1、RDB功能对过期键的处理2、AOF功能对过期键的处理3、复制功能…

chatgpt赋能python:Python隐藏变量:探秘程序内部的“奥秘”

Python 隐藏变量&#xff1a;探秘程序内部的“奥秘” 作为一门高级编程语言&#xff0c;Python备受程序员的欢迎。但是&#xff0c;你是否了解Python隐藏变量&#xff1f;这些看似神秘的变量对程序员的编码工作有哪些影响呢&#xff1f;本篇文章将为您详细介绍Python隐藏变量的…

Hive 实现ACID

Hive官方提示&#xff0c;Hive在版本0.14之后可以支持对表数据的UPDATE和DELETE&#xff1a; 具体操作如下&#xff1a; -- 环境参数设置 set hive.support.concurrencytrue; set hive.txn.managerorg.apache.hadoop.hive.ql.lockmgr.DbTxnManager;-- 建表&#xff0c;以ORC的…

【MySQL新手到通关】第六章 时间日期函数

文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数&#xff08;天&#xff09;3.4 相差时间&…

VSLAM视觉里程计总结

相机模型是理解视觉里程计之前的基础。视觉里程计&#xff08;VIO&#xff09;主要分为特征法和直接法。如果说特征点法关注的是像素的位置差&#xff0c;那么&#xff0c;直接法关注的则是像素的颜色差。特征点法通常会把图像抽象成特征点的集合&#xff0c;然后去缩小特征点之…

Docker容器 和 Kubernetes容器集群管理系统

一、快速了解Docker 1. 什么是Docker的定义 Docker 是一个开源的应用容器引擎&#xff0c;基于Go语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以…

C#,码海拾贝(23)——求解“复系数线性方程组“的“全选主元高斯消去法“之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary&g…

【C++】利用游戏壳实现飞机大战(设计类图、开发实现)

文章目录 飞机大战飞机大战类图分析背景类&#xff08;CBackGround&#xff09;成员属性成员函数 程序类&#xff08;CPlaneApp&#xff09;成员属性成员函数 玩家类&#xff08;CPlayer&#xff09;成员属性成员函数 炮弹类&#xff08;CGunner&#xff09;成员属性成员函数 炮…

AI周报-一周发生两次Ai事件;DragGAN 问世

&#x1f680; AI 图像编辑技术 DragGAN 问世&#xff0c;用户可以通过拖拽改变汽车大小或人物表情等 近日&#xff0c;马克斯・普朗克计算机科学研究所研究者们推出了一种控制GAN的新方法DragGAN&#xff0c;用户可以通过拖拽改变汽车大小或人物表情等。 DragGAN类似于Photo…

Rk1126 实现 yolov5 6.2 推理

基于 RK1126 实现 yolov5 6.2 推理. 转换 ONNX python export.py --weights ./weights/yolov5s.pt --img 640 --batch 1 --include onnx --simplify 安装 rk 环境 安装部分参考网上, 有很多. 参考: https://github.com/rockchip-linux/rknpu 转换 RK模型 并验证 yolov562_t…

企业想提高商机转化率该如何挑选CRM系统

CRM客户管理系统可以帮助销售人员跟踪和分析潜在客户的需求、行为和偏好&#xff0c;制定合适的销售策略&#xff0c;提高商机转化率。下面我们就来说说&#xff0c;CRM系统如何加速销售商机推进。 1、跟踪客户和动态 Zoho CRM可以帮助您记录和分析客户的需求、行为和偏好&am…