手把手教你实现一个canvas智绘画板
前言
本文主要介绍:
- 项目介绍
- 项目效果展示
- 一步步实现项目效果
- 踩坑
一、项目介绍
名称: 智绘画板
技术栈: HTML5,CSS3,JavaScript,移动端
功能描述:
- 支持PC端和移动端在线绘画功能
- 实现任意选择画笔颜色、调整画笔粗细以及橡皮檫擦除等绘画功能
- 实现在线画板的本地保存功能
- 支持撤销和返回操作
- 自定义背景颜色[这个功能尚未完善好]
注:本项目仅仅是canvas和JavaScript练手小项目,存在一个问题尚未解决,橡皮擦把背景层都给擦掉了,希望有大神给一些建议给我,谢谢!
二、一步步实现项目效果
(一)分析页面
用户可以进行的操作:
- 画画
- 改变画笔的粗细
- 切换画笔的颜色
- 使用橡皮檫擦除不想要的部分
- 清空画板
- 将自己画的东西保存成图片
- 进行撤销和重做操作
- 兼容移动端(支持触摸)
(二)进行HTML布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>智绘画板</title>
<link rel="shortcut icon" href="./image/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<canvas id="canvas"></canvas>
<!-- 自定义背景颜色功能尚未完善好 -->
<!--<div class="bg-btn"></div>
<div class="color-group" id="bgGroup">
<h3>选择背景颜色:</h3>
<ul class="clearfix">
<li class="bgcolor-item" style="background-color: blue;"></li>
<li class="bgcolor-item" style="background-color: black;"></li>
<li class="bgcolor-item" style="background-color: #FF3333;"></li>
<li class="bgcolor-item" style="background-color: #0066FF;"></li>
<li class="bgcolor-item" style="background-color: #FFFF33;"></li>
<li class="bgcolor-item" style="background-color: #33CC66;"></li>
<li class="bgcolor-item" style="background-color: gray;"></li>
<li class="bgcolor-item" style="background-color: #F34334;"></li>
<li class="bgcolor-item" style="background-color: #fff;box-shadow: 0 1px 2px 0 rgba(32,33,36,0.28);"></li>
<li class="bgcolor-item" style="background-color: #9B27AC;"></li>
<li class="bgcolor-item" style="background-color: #4CB050;"></li>
<li class="bgcolor-item" style="background-color: #029688;"></li>
</ul>
<i class="closeBtn"></i>
</div>-->
<div class="tools">
<div class="container">
<button class="save" id="save" title="保存"></button>
<button class="brush active" id="brush" title="画笔"></button>
<button class="eraser" id="eraser" title="橡皮擦"></button>
<button class="clear" id="clear" title="清屏"></button>
<button class="undo" id="undo" title="撤销"></button>
<button class="redo" id="redo" title="再做"></button>
</div>
<<