鱼C论坛

 找回密码
 立即注册
查看: 2061|回复: 6

[作品展示] 【Web】画图

[复制链接]
发表于 2022-2-5 13:14:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ckblt 于 2022-2-5 13:11 编辑

我开发了一款画图软件,他的界面是这样的:
Snipaste_2022-02-05_12-57-17.png

好丑……

温馨提示
这款画图软件的画布用的是Canvas,如果你的浏览器不支持Canvas请换个浏览器

废话少说,上代码
<!DOCTYPE html>
<html lang="zh-cn">
  <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>画图</title>

    <style>
      * {
        margin: 0;
        padding: 0;
      }

      body {
        display: flex;
        justify-content: center;
        align-items: center;
        min-height: 100vh;
        flex-direction: column;
      }

      #picture {
        width: 400px;
        height: 400px;
        border: solid 1px #000;
      }

      #picture canvas {
        width: 100%;
        height: 100%;
      }

      #color,
      #line-width,
      #pen,
      #production {
        margin-bottom: 10px;
      }

      #production {
        text-align: end;
      }
      #production h1 {
        font-size: 2.5rem;
      }
      #production p {
        font-size: 0.5rem;
      }

      /* 本作品未得作者允许禁止转载 Ckblt */
    </style>
  </head>

  <body>
    <div id="production">
      <h1>画图</h1>
      <p>By Ckblt</p>
    </div>
    <div id="color">颜色: <input type="color" /></div>
    <div id="line-width">线条粗细: <input type="range" min="3" max="50" /></div>
    <div id="pen">
      <input type="radio" name="pen" value="pen" checked />
      <label>笔</label>

      <input type="radio" name="pen" value="eraser" />
      <label>橡皮</label>
    </div>

    <div id="picture">
      <canvas width="400" height="400"></canvas>
    </div>
    <script>
      let mousedown = false
      let mouseXY = [0, 0]
      let picture = []
      let color = ''
      let lineWidth = 10
      let temp = []
      let pen = 'pen'
      const ctx = document.querySelector('#picture canvas').getContext('2d')
      let i = 0

      document.querySelector('#picture').addEventListener('mousedown', (ev) => {
        temp = []
        mousedown = true

        ctx.moveTo(...mouseXY)
        ctx.beginPath()
      })
      document.querySelector('#picture').addEventListener('mousemove', (ev) => {
        if (mousedown && i >= 1) {
          mouseXY = [ev.offsetX, ev.offsetY]
          temp.push(mouseXY)

          color = document.querySelector('#color input').value
          lineWidth = document.querySelector('#line-width input').value

          ctx.lineTo(...mouseXY)

          ctx.strokeStyle = pen === 'eraser' ? '#fff' : color
          ctx.lineWidth = lineWidth
          ctx.stroke()
          i -= 3
        }
        i++
      })
      window.addEventListener('mouseup', () => {
        if (mousedown) {
          mousedown = false
          picture.push({
            color: color,
            lineWidth: lineWidth,
            pen: pen,
            content: temp
          })

          ctx.clearRect(0, 0, 400, 400)

          picture.forEach((t) => {
            const c = t.content
            if (c.length != 0) {
              ctx.beginPath()
              ctx.moveTo(...c[0])
              c.forEach((e) => {
                ctx.lineTo(...e)
              })

              ctx.strokeStyle = t.pen === 'eraser' ? '#fff' : t.color
              ctx.lineWidth = t.lineWidth
              ctx.stroke()
            }
          })
        }
      })

      document.getElementsByName('pen').forEach((e) => {
        e.addEventListener('click', (ev) => {
          pen = e.value
        })
      })

      // 本作品未得作者允许禁止转载 Ckblt
    </script>
    <!-- 本作品未得作者允许禁止转载 Ckblt -->
  </body>
</html>

还是那句话:如果有问题,请回复我哟~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-5 17:55:52 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-5 21:39:20 From FishC Mobile | 显示全部楼层
楼主,代码是什么编程语言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-5 22:20:37 | 显示全部楼层
shiyouroc 发表于 2022-2-5 21:39
楼主,代码是什么编程语言

html + css + js
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2022-2-6 00:25:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-7 16:20:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-7 22:39:47 | 显示全部楼层
shiyouroc 发表于 2022-2-5 21:39
楼主,代码是什么编程语言

后缀名是.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 00:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表