注意部分:


canvas的height和width不能再css中设定,应该在html中设定,否则会影响页面的分辨率。

效果图:


图1:

代码


css:

#canvas{
cursor: crosshair;
}
button{
width: 80px;
}
.yellowBtn{
background-color: yellow;
}
.redBtn{
background-color: red;
}
.blueBtn{
background-color: blue;
}
.greenBtn{
background-color: green;
}
.whiteBtn{
background-color: white;
}
.blackBtn{
background-color:black;
}

页面:

    <canvas id="canvas" width="900" height="400">浏览器不支持html5</canvas>
<br>
<button id="yellow" class="yellowBtn" onclick="lineColor='yellow';">YELLOW</button>
<button id="red" class="redBtn" onclick="lineColor='red';">RED</button>
<button id="blue" class="blueBtn" onclick="lineColor='blue';">BLUE</button>
<button id="green" class="greenBtn" onclick="lineColor='green';">GREEN</button>
<button id="white" class="whiteBtn" onclick="lineColor='white';">WHITE</button>
<button id="black" class="blackBtn" onclick="lineColor='black';">BLACK</button>
<br>
<button class="lineWeight4" class="whiteBtn" onclick="lineWeight=2;">2px</button>
<button class="lineWeight4" class="whiteBtn" onclick="lineWeight=4;">4px</button>
<button class="lineWeight8" class="whiteBtn" onclick="lineWeight=8;">8px</button>
<button class="lineWeight12" class="whiteBtn" onclick="lineWeight=12;">12px</button>

js:

   <script type="text/javascript">
var canvas = document.getElementById("canvas"); //判断是否支持canvas
if(!canvas || !canvas.getContext){
return false;
} //获得context对象,目前只支持2d
var ctx = canvas.getContext("2d"); //画出画板背景,此处为矩形
ctx.fillStyle = "black";
ctx.fillRect(0, 0, 900, 400); //初始化鼠标是否按下和坐标点位置, true为按下
var mouseState = false,
oldX = -10,
oldY = -10,
lineColor = "white",
lineWeight = 2; //canvas添加鼠标事件, 鼠标移动、鼠标按下和鼠标弹起
if(window.addEventListener){
canvas.addEventListener("mousemove", draw, true);
canvas.addEventListener("mousedown", down, false);
canvas.addEventListener("mouseup", up, false); }else{
canvas.attachEvent("onmousemove", draw);
canvas.attachEvent("onmousedown", down);
canvas.attachEvent("onmouseup", up);
} //鼠标按下,拖动画图
function draw(event){
if(mouseState === true){
var newX = event.clientX - 10;
var newY = event.clientY - 10; ctx.beginPath();
ctx.moveTo(oldX, oldY);
ctx.lineTo(newX, newY); ctx.strokeStyle = lineColor;
ctx.lineWidth = lineWeight;
ctx.lineCap = "round";
ctx.stroke(); oldX = newX;
oldY = newY;
} } function down(event){
mouseState = true;
oldX = event.clientX - 10;
oldY = event.clientY - 10;
} function up(){
mouseState = false;
} </script>

增加导出功能:


使用 canvas.toDataURL("image/png");保存图片,eg:

    function exportImage(event){
var imgSrc = canvas.toDataURL("image/png");
document.getElementById("image").src = imgsrc;
}

canvas——画板的更多相关文章

  1. QML学习笔记(二)-纯qml画图实现canvas画板-鼠标画图

    作者: 狐狸家的鱼 Github: 八至 版权声明:如需转载请获取授权和联系作者 用纯qml实现canvas画板功能,用鼠标进行画图,可以画直线,画圆,画矩形,画弧线. 由于canvas画图会有延迟和 ...

  2. 简易的canvas画板

    没事仿照windows画板工具用canvas实现了一个简易版的画板. html: <!doctype html> <html> <head> <meta ch ...

  3. canvas 画板

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. html5 canvas画板

    点击查看演示地址 <!DOCTYPE HTML> <html> <title>HTML5-CanvasDrawDemo</title> <meta ...

  5. html5 canvas 画板

    <!doctype html> <head> <meta http-equiv="Content-Type" content="text/h ...

  6. JS canvas 画板 撤销

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. Canvas画板

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA6QAAAGgCAIAAAAy0z21AAAgAElEQVR4nO3dfYwkZ30n8JqZfcNex8

  8. canvas画板基础应用的学习

    canvas是html5中的绘图容器,我们可以通过javascript的控制来进行图形的绘制,绘制对象可以是路径.盒.圆.字符等,同时,你也可以通过js给画布添加图像,下面来介绍canvas的各种基本 ...

  9. canvas实践小实例一 —— 画板工具

    前面讲了一部分的canvasAPI的基础知识,光看API的介绍确实是很无趣乏味,需要一点可以激发内心的激情的东西来激励自己来学习,于是就了伴随canvasAPI学习的小实例,这样通过API的知识,结合 ...

随机推荐

  1. 日文“表” php 会报错

    php遇到很奇怪的问题,文字“表”会报错,并且是属于编译错误的问题. 单纯的输出: echo " 表 "; 会直接报错. 可是只要在中间加点东西,就可以解决这个问题,就算是空格都可 ...

  2. PHP 内存的分布问题

    php运行,内存分为5个区域, 1.基本数据类型--->栈区 2.符合数据类型-->堆区 对象实例在堆区,对象名字在栈区(指向此对象实例的变量)

  3. c语言训练题:关于张三李四王五说谎的问题(此处用javascript实现)

    (第一篇博文) 今天在一个交流群里见他们无聊,然后找到之前收藏的一些c语言题目放出去想让他们做,结果反倒是自己不会做,于是花了很多时间去想. 原题:张三说李四在说谎,李四说王五在说谎,王五说张三和李四 ...

  4. Android Studio 2.2 HTTP proxy setting 提示异常

    操作系统 :MacOS 10.11.6 IDE :Android Studio 2.2 Java Version :1.8 异常现象描述: 在给Android Studio 2.2设置代理时,出现警告 ...

  5. font awesome icon

    http://fontawesome.io/icons/ http://www.bootstrapicons.com/

  6. proxy.ini文件调用

    self.CONFIG_FILENAME = os.path.splitext(os.path.abspath(__file__))[0]+'.ini' 改为: self.CONFIG_FILENAM ...

  7. latch: cache buffers chains故障处理总结

    一大早就接到开发商的电话,说数据库的CPU使用率为100%,应用相应迟缓.急匆匆的赶到现场发现进行了基本的检查后发现是latch: cache buffers chains 作祟,处理过程还算顺利,当 ...

  8. SVM推导

    标准最大margin问题 假设data是linear seperable的 优化目标 希望 margin(w),i.e, 最小的点到直线的距离 最大 即是要得到最右的线,它对噪声的鲁棒性最好 得到的分 ...

  9. 设计模式之 Observer Pattern 观察者模式

    1.Subject通过一个容器保存零到多个Observer. 2.Subject通过Add,Delete方法调整Observer. 3.Subject的notifyObservers方法实际是逐个调用 ...

  10. red bottom shoes featured

    最近做了一个红底高根鞋的电商网站 Cheap Red Bottom Shoes Christian Louboutin Loafers Bestsellers Christian Louboutin ...