首页 > 其他分享 >[js] 突发奇想, 使用canvas绘制一个动态的扫描仪

[js] 突发奇想, 使用canvas绘制一个动态的扫描仪

时间:2024-11-13 11:30:58浏览次数:1  
标签:突发奇想 canvas const startDeg ctx js startAngle 370 Math

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta
    name="viewport"
    content="width=device-width, initial-scale=1.0"
  >
  <title>Document</title>
  <style>
    body {
      background-color: #10130f;
    }

    canvas {
      display: block;
      width: 800px;
      height: 800px;
      box-shadow: 2px 2px 10px 2px rgba(255, 255, 255, 1);
      margin: 20px auto 0;
    }
  </style>
</head>

<body>
  <canvas
    id="cvs"
    width="800"
    height="800"
  ></canvas>
  <script>
    const cvs = document.getElementById('cvs');
    const ctx = cvs.getContext('2d');
    const w = cvs.width;
    const h = cvs.height;
    const pi = Math.PI;
    ctx.lineWidth = 2
    ctx.translate(400, 400)


    // 绘制圆
    function drawCircle(rList) {
      ctx.beginPath();
      ctx.strokeStyle = "#06ea2f"
      for (let i = 0; i < rList.length; i++) {
        ctx.arc(0, 0, rList[i], 0, 2 * Math.PI);
        ctx.stroke();
      }
      ctx.closePath();
    }

    // 绘制直角坐标系
    function drawAxes() {
      ctx.beginPath();
      ctx.strokeStyle = "#06ea2f"
      ctx.moveTo(-370, 0);
      ctx.lineTo(370, 0);
      ctx.moveTo(0, -370);
      ctx.lineTo(0, 370);
      ctx.stroke();
      ctx.closePath();
    }

    // 绘制扫描线 弧度
    function drawScanLine(startDeg, endDeg) {
      ctx.beginPath();
      ctx.fillStyle = "#06ea2f"
      ctx.moveTo(w / 2, h / 2);
      const x1 = 370 * Math.cos(startDeg);
      const y1 = 370 * Math.sin(startDeg);
      const x2 = 370 * Math.cos(endDeg);
      const y2 = 370 * Math.sin(endDeg);
      ctx.moveTo(0, 0);
      ctx.lineTo(x1, y1);
      ctx.arc(0, 0, 370, startDeg, endDeg);
      ctx.fill()
      ctx.closePath();
    }

    // 绘制蒙版
    function drawMask() {
      ctx.beginPath()
      ctx.fillStyle = "rgba(16,19,15,.03)"
      ctx.fillRect(-400, -400, 800, 800)
      ctx.closePath()
    }

    // 起始角度
    let startAngle = 0;
    const speed = 1
    function draw() {
      drawMask()
      drawCircle([20, 90, 160, 230, 300, 370])
      drawAxes()
      // 计算弧度
      const startDeg = pi * 2 * ((startAngle - 1) / 360)
      const endDeg = pi * 2 * (startAngle / 360) + pi * 2 * speed / 360
      drawScanLine(startDeg, endDeg)
      startAngle += speed
      if (startAngle >= 360) {
        startAngle = 0
      }
      requestAnimationFrame(draw)
    }

    draw()
  </script>
</body>

</html>

结果如下, 会动的哟

 

标签:突发奇想,canvas,const,startDeg,ctx,js,startAngle,370,Math
From: https://www.cnblogs.com/fmg0224/p/18543561

相关文章

  • 无插件H5播放器EasyPlayer.js网页web无插件播放器vue和react详细介绍
    EasyPlayer.jsH5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS、WEBRTC、FMP4视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方式支持Windows、Linux、Android、iOS全平台终端的H5播放器,使用简单......
  • JSON 处理技术:字符串与对象的转换
    JSON处理技术:字符串与对象的转换在现代Web开发中,JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集。JSON格式易于人阅读和编写,同时也易于机器解析和生成。本文将探讨JSON.parse()和JSON.stringify()方法,这两个方法在处理JS......
  • T-SQL——自定义函数解析JSON字符串
    T-SQL——自定义函数解析JSON字符串适应于是2005及以上版本1.函数创建脚本CREATEFUNCTION[dbo].[parseJSON](@JSONNVARCHAR(MAX))/**Summary:>ThecodefortheJSONParser/ShredderwillruninSQLServer2005,andeveninSQLServer2000(withsomemo......
  • pjsip编译、说明及vs2022使用示例
    环境:window10_x64&vs2022pjsip版本:2.14.1 之前整理过pjsip2.10的编译及python使用示例:https://www.cnblogs.com/MikeZhang/p/pjsip20210116.htmlhttps://www.cnblogs.com/MikeZhang/p/win10py3pjsua-20211010.html 今天整理下pjsip2.14.1的编译、接口说明,以及在vs......
  • 猿人学web端爬虫攻防大赛赛题第5题——js 混淆 - 乱码增强
    题目网址:https://match.yuanrenxue.cn/match/5解题步骤抓数据包。在请求头和请求体中都有加密的内容。比较特殊的就RM4hZBv0dDon443M字段,全局搜索一下。没有任何内容,只能跟第2题一样,利用fiddler来设置断点了。(function(){'usestrict';varcookieTemp=''......
  • js.删除并获得点数
    链接:740.删除并获得点数-力扣(LeetCode)题目:给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i]-1 和 nums[i]+1 的元素。开始你拥有 0 个点数。返回你能......
  • nextjs 动态生成sitemap.xml 文件
    在app目录下创建文件sitemap.js,默认导出sitemap方法importfsfrom"fs";importpathfrom"path";constbaseUrl=process.env.NEXT_PUBLIC_SITE_URL||"https://www.adog.life";constbaseDir="src/app";constdynamicDirs=[......
  • H.264/H.265播放器EasyPlayer.js无插件直播流媒体音视频播放器延迟丢帧的原因
    EasyPlayer.jsH5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS、WEBRTC、FMP4视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方式,支持Windows、Linux、Android、iOS全平台终端的H5播放器,使用简单......
  • vue前端利用ofd.js实现ofd类型在线预览
    1.安装:npmiofd.js2.axios封装注意事项,responseType:'arraybuffer'//电子证件照exportfunctiongetXkzOriginal(data){returnreq({url:'/bigdata/getXkzOriginal',method:'POST',params:data,res......
  • node.js毕设虚拟财产交易系统(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于虚拟财产交易系统的研究,现有研究主要集中在虚拟货币、虚拟物品等方面,专门针对虚拟财产交易系统整体设计与实现的研究较少。因此,本选题将以虚拟财产......