【Tank】2.0 canvas-画布实现
Author: 图恩Category: 编程开发Views: 647Published: 2022-05-11 以下是针对用户需求的优化和调整建议,涵盖样式布局、功能实现及用户体验提升:
---
### **1. 核心样式优化**
```css
body {
height: 100vh;
width: 100vw;
background-color: #34459e;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 10px; /* 增加按钮间的间距 */
}
.btns {
display: flex;
flex-direction: column;
gap: 5px;
align-items: center;
background-color: #fff;
border: 1px solid #ccc;
padding: 8px 12px;
border-radius: 4px;
}
.line-color-container {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.img-print-screen {
width: 300px;
height: 150px;
object-fit: cover;
border: 1px solid #ccc;
border-radius: 4px;
background-color: #f0f0f0;
}
```
---
### **2. 功能实现细节**
#### **(1) 按钮布局优化**
- **按钮间距**:使用 `gap` 属性调整按钮间距,避免拥挤。
- **颜色切换**:在 `setLineColor()` 方法中,确保颜色选项的 `div` 元素正确绑定点击事件,并动态更新 `lineColor` 变量。
- **动态宽度**:通过 `this.app.lineWidth` 控制笔触宽度,橡皮擦功能设置为 `10`,铅笔设置为 `1`。
#### **(2) 截图保存功能**
- **图片生成**:`this.el.toDataURL('image/jpeg')` 生成图片数据URL,确保兼容性。
- **图片显示**:`img.classList.add('img-print-screen')` 保证图片居中显示,`margin-top: 15px` 优化视觉层级。
#### **(3) 交互增强**
- **悬停效果**:为按钮添加 `:hover` 伪类,提升用户体验。
- **点击反馈**:通过 `this.app.beginPath()` 重置画布状态,确保操作后画布清空。
---
### **3. 风格统一与排版**
- **颜色方案**:使用 `#16a085`(青色)作为主色调,与 `#34459e`(深蓝)形成对比,提升视觉层次。
- **按钮设计**:统一按钮边框、背景色和悬停效果,确保视觉一致性。
- **响应式布局**:通过 `gap: 10px` 和 `flex-wrap: wrap` 适应不同屏幕尺寸,确保颜色选项在移动设备上可操作。
---
### **4. 代码结构优化**
- **模块化**:将功能(清屏、橡皮擦、铅笔)封装在 `Blackboard` 类中,保持代码结构清晰。
- **可扩展性**:通过 `this.app.lineWidth` 动态控制笔触宽度,便于未来扩展其他工具(如橡皮擦、铅笔)。
---
### **5. 附加建议**
- **性能优化**:避免频繁调用 `this.app.beginPath()`,可考虑在操作前重置画布状态。
- **文档注释**:为 `setLineColor()` 等方法添加注释,提升代码可读性。
- **测试覆盖**:通过 `console.log` 或测试工具验证功能是否正常,确保截图保存图片无误。
---
### **最终效果**
- **布局**:按钮层级清晰,颜色选项可交互,图片保存功能正常。
- **体验**:操作流畅,视觉美观,适配不同屏幕尺寸。
- **扩展性**:预留接口(如新增工具),便于未来功能扩展。
通过以上调整,用户可实现功能完善、样式美观的画布编辑器,满足需求并提升用户体验。