用canvas画布画一个画板
前段时间,在对H5的回顾中突然对canvas有了感觉,闲来无事便对其进行了一些捯饬。这不,上周我还做了一个好玩的画板呢,废话不多说,直接上代码(PS:翠花,上代码~):
HTML部分:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Canvas 制作画板</title>
<style>
h1{
text-align: center;
margin: 0 auto;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.drawBox{
width: 830px;
height: auto;
margin: auto;
background: #999;
border-radius: 10px;
}
#myCanvas{
padding: 0;
background: #fff;
display: block;
cursor: pointer;
border-radius: 10px;
border: 15px solid #999;
}
.btnBox{
color: #fff;
}
.btnBox>a{
color:#fff;
width: 85px;
line-height: 40px;
text-align: center;
text-decoration: none;
display: inline-block;
background: #666;
border-radius: 10px;
}
.btnBox>a:first-child{
margin: 0 0 12px 15px;
}
.btnBox>a#toolBtn{
width: 50px;
}
.btnBox>input#color{
width: 22px;
height: 25px;
cursor: pointer;
outline: none;
border-radius: 50%;
margin: auto 10px;
}
.btnBox>input#thick{
outline: none;
width: 20px;
padding: 3px;
border-radius: 5px;
}
.btnBox>input#range{
outline: none;
position: relative;
top: 5px;
}
</style>
</head>
<body>
<h1>Canvas 制作画板</h1>
<div class="drawBox">
<canvas id="myCanvas" width="800" height="600">
对不起,您的浏览器不兼容canvas标签!
</canvas>
<div class="btnBox">
<a href="javascript:;" id="toolBtn" title="选择橡皮">橡皮</a>
<a href="javascript:;" id="clearBtn" title="清除画板">清除画板</a>
<a href="javascript:;" id="downLoad" title="点击下载">下载图片</a>
<input type="color" id="color" title="选择画笔颜色"/>
<input type="text" id="thick" value="1" title="请输入画笔粗细值"/>
细 <input type="range" name="range" id="range" title="画笔粗细调整" value="1" min="1" max="50"/> 粗
</div>
</div>
</body>
</html>
HTML页面准备就绪,Javascript部分:
document.onload=function(){
var can = document.getElementById('myCanvas'),
downBtn = document.getElementById('downLoad'),
clearBtn = document.getElementById('clearBtn'),
colorBtn = document.getElementById('color'),
rangeBtn = document.getElementById('range'),
toolBtn = document.getElementById('toolBtn'),
thick = document.getElementById('thick');// 获取按钮等元素
var ctx = can.getContext('2d');// 定义一个canvas画布
colorBtn.addEventListener('change',function () {
ctx.strokeStyle=this.value;
});// 颜色改变
rangeBtn.addEventListener('change',function () {
ctx.lineWidth=this.value;
thick.value=this.value;
});// 笔画粗细(拖拽)
thick.addEventListener('blur',function () {
ctx.lineWidth=this.value;
rangeBtn.value=this.value;
});// 笔画粗细(数值输入)
toolBtn.addEventListener('click',function () {
if(this.text=='橡皮'){
this.text='画笔';
ctx.strokeStyle='#fff';
ctx.lineWidth=20;
}else{
this.text='橡皮';
ctx.strokeStyle='#000';
ctx.lineWidth=rangeBtn.value;
}
});// 橡皮与画笔的一个转换
// 开始绘制
can.addEventListener('mousedown',function (from) {
// 绘制
var formX=from.clientX-can.offsetLeft-13,
formY=from.clientY-can.offsetTop-13;
ctx.beginPath();
ctx.moveTo(formX,formY);
// 画笔移动
function move(to) {
var toX=to.clientX-can.offsetLeft-13,
toY=to.clientY-can.offsetTop-13;
ctx.lineTo(toX,toY);
ctx.stroke();
};
can.addEventListener('mousemove',move);
// 停止绘制
document.addEventListener('mouseup',function () {
can.removeEventListener('mousemove',move,false);
});
});
// 下载图片按钮
downBtn.addEventListener('click',function () {
this.href=can.toDataURL('image/png');
this.setAttribute('download','picture.png');
});
// 清除画板按钮-画布情况
clearBtn.addEventListener('click',function () {
ctx.clearRect(0,0,can.width,can.height);
});
}
在此,我对橡皮的处理可能不够理想,因为如果下载的是透明的,那么会看见橡皮的痕迹,在此我就不对此给出解决的办法,欢迎大家积极探索吧。好的,这一切就绪后,再来一个效果图:

一个基本画板,有兴趣的朋友可以再对细节进行处理以及一些功能的扩展~
用canvas画布画一个画板的更多相关文章
- Canvas 如何画一个四分之一圆
转: Canvas 如何画一个四分之一圆 HTML: Document JS: var c = document.getElementById('ctx') var ctx = c.getContex ...
- 为了让她学画画——熬夜用canvas实现了一个画板
前言 大家好,我是Fly, canvas真是个强大的东西,每天沉迷这个无法自拔, 可以做游戏,可以对图片处理,后面会给大家分享一篇,canvas实现两张图片找不同的功能, 听着是不是挺有意思的, 有点 ...
- canvas画布——画八卦图
实例 创建一个圆形: var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d") ...
- canvas之画一个三角形
<canvas id="canvas" width="500" height="500" style="background ...
- [技术博客]海报图片生成——小程序canvas画布
目录 背景介绍 canvas简介 代码实现 难点讲解 圆角矩形裁剪失败之PS的妙用 编码不要过硬 对过长的文字进行截取 真机首次生成时字体不对 drawImage只能使用本地图片 背景介绍 目标:利用 ...
- canvas绘画基础(一):认识canvas画布
html5提供了一个<canvas>标签,结合javascript的canvas api接口可以用来绘制图形和动画.最近工作中涉及到画图的任务,下面来了解一下canvas的基础:canva ...
- 用canvas画一个的小画板(PC端移动端都能用)
前言 本篇的内容主要包括: canvas标签简介 画板的功能简介 画板的JS部分(包括:1.获取画布 2.使画板全屏幕显示且自适应 3.如何绘制直线 4.绘画时的三种状态(鼠标点击.移动.离开)5.画 ...
- 使用Canvas和JavaScript做一个画板
本文同步于个人博客:https://zhoushuo.me/blog/2018/03/11/drawing-borad/ 前些天学习了HTML5的<canvas>元素,今天就来实践一下,用 ...
- 使用H5 canvas画一个坦克
具体步骤如下: 1. 首先做出绘图区,作为坦克的战场 <canvas id="floor" width="800px" height=&quo ...
随机推荐
- Autofac Property Injection and Method Injection
While constructor parameter injection is the preferred method of passing values to a component being ...
- 常见报表的JS代码
1.合并单元格 这个表格在报表里面算是比较典型的 1.里面的表格的列标题现在是写死的,其实这些可以通过配置进行 2.至于如果表头要进行合并(这种需求比较少,也比较容易实现) 3.至于统计:最好在后台按 ...
- setAttribute第三个参数
object.setAttribute(sName, vValue [, iFlags]) sName参数应是Dom属性而非html中的属性.Dom中Html专有的接口属性应该以小写字母开头,如果属性 ...
- 在Ubuntu 16.04上使用bazel交叉编译tensorflow
鸽了这么久,正式开工 Author: carbon email: ecras_y@163.com 参考资料: https://github.com/tensorflow/tensorflow http ...
- 符合RESTful规范的API
统一使用的utils,serializers: class BaseResponse: def __init__(self): self.code = 1000 self.data = None se ...
- python 简单爬虫获取气象数据发送气象定时报-预报预警信息及时推送及阿里云短信群发接口
!/usr/bin/python #encoding=utf-8 #Author:Ruiy #//////////////////////////////////////////////////// ...
- 关于常见的协议BSD,APACHE,MIT,GPL的理解
其实BSD和APACHE和MIT协议类似,基本就是可以为所欲为,但是要尊重原来的作者. GPL协议是一个免费和开源的协议,只要用了GPL协议的类库源码等,也必须适应GPL协议. 意思就是把开源和免费进 ...
- Python实践练习:选择性拷贝
题目 项目要求:编写一个程序,遍历一个目录树,查找特定扩展名的文件(诸如.pdf 或.jpg),不论这些文件的位置在哪里, 将它们拷贝到一个新的文件夹中. 代码 import os import sh ...
- SpringBoot Session 管理及集群管理
1.配置session的超时时间 : 在application.prooperties中 server.session.timeout = 600 //以秒为单位,默认最少一分钟 2.配置 ...
- DrawGrid DrawFocusRect
http://docwiki.embarcadero.com/CodeExamples/XE7/en/GridLineWidth_%28C%2B%2B%29 void __fastcall TForm ...