canvas基础2 -- 形状

七巧板

七巧板本质上就是 分别由几个直线 拼成一个个图形,再将这些图形结合起来

复制代码
var tangram = [
      { p: [{ x: 0, y: 0 }, { x: 800, y: 0 }, { x: 400, y: 400 }], color: "#caff67" },
      { p: [{ x: 0, y: 0 }, { x: 400, y: 400 }, { x: 0, y: 800 }], color: "#67beef" },
      { p: [{ x: 800, y: 0 }, { x: 800, y: 400 }, { x: 600, y: 600 }, { x: 600, y: 200 }], color: "#ef3d61" },
      { p: [{ x: 600, y: 200 }, { x: 600, y: 600 }, { x: 400, y: 400 }], color: "#f9f5la" },
      { p: [{ x: 400, y: 400 }, { x: 600, y: 600 }, { x: 400, y: 800 }, { x: 200, y: 600 }], color: "#a594c0" },
      { p: [{ x: 200, y: 600 }, { x: 400, y: 800 }, { x: 0, y: 800 }], color: "#fa8ecc" },
      { p: [{ x: 800, y: 400 }, { x: 800, y: 800 }, { x: 400, y: 800 }], color: "#f6ca29" }
    ]
    const canvas = document.getElementById('canvas')
    canvas.width = 800
    canvas.height = 800
    const context = canvas.getContext('2d')

    for (let i = 0; i < tangram.length; i++) {
      draw(tangram[i], context)
    }

    function draw(piece, cxt) {
      cxt.beginPath()
      cxt.moveTo(piece.p[0].x, piece.p[0].y)
      for (var i = 1; i < piece.p.length; i++) {
        cxt.lineTo(piece.p[i].x, piece.p[i].y)
      }
      cxt.closePath()

      cxt.fillStyle = piece.color
      cxt.fill()

      cxt.strokeStyle = "black"
      cxt.lineWidth = 3
      cxt.stroke()
    }

图示:

箭头

复制代码
    context.beginPath()
    context.moveTo(100, 350) 
    context.lineTo(500, 350) 
    context.lineTo(500, 200) 
    context.lineTo(700, 400)
    context.lineTo(500, 600)
    context.lineTo(500, 450)
    context.lineTo(100, 450)
    context.closePath()
    
    context.lineWidth = 5  
    context.strokeStyle = '#058'

    context.stroke() 

图示:

1

相关推荐
ashcn20011 小时前
水滴按钮解析
前端·javascript·css
iReachers4 小时前
HTML打包APK(安卓APP)中下载功能常见问题和详细介绍
前端·javascript·html·html打包apk·网页打包app·下载功能
Java陈序员4 小时前
告别手写礼簿!一款开源免费的电子红白喜事礼簿系统!
javascript·css·html
唐叔在学习5 小时前
insertAdjacentHTML踩坑实录:AI没搞定的问题,我给搞定啦
前端·javascript·html
小则又沐风a5 小时前
数据结构->链表篇
前端·html
晓得迷路了7 小时前
栗子前端技术周刊第 112 期 - Rspack 1.7、2025 JS 新星榜单、HTML 状态调查...
前端·javascript·html
jinmo_C++7 小时前
从零开始学前端 · HTML 基础篇(一):认识 HTML 与页面结构
前端·html·状态模式
winfredzhang7 小时前
从零构建:基于 Node.js 的全栈视频资料管理系统开发实录
css·node.js·html·音视频·js·收藏,搜索,缩略图
松涛和鸣21 小时前
49、智能电源箱项目技术栈解析
服务器·c语言·开发语言·http·html·php
加个鸡腿儿1 天前
经验分享2:SSR 项目中响应式组件的闪动陷阱与修复实践
前端·css·架构