用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);
    });
}

  在此,我对橡皮的处理可能不够理想,因为如果下载的是透明的,那么会看见橡皮的痕迹,在此我就不对此给出解决的办法,欢迎大家积极探索吧。好的,这一切就绪后,再来一个效果图:

一个基本画板,有兴趣的朋友可以再对细节进行处理以及一些功能的扩展~

时间: 2024-10-05 22:16:47

用canvas画布画一个画板的相关文章

canvas之画一个三角形

1 <canvas id="canvas" width="500" height="500" style="background-color: yellow;"></canvas> 1 var canvas=document.getElementById("canvas"); 2 var cxt=canvas.getContext("2d"); 3 cxt.beg

利用canvas画布画出一个钟表

context是一个封装了很多绘图功能的对象.不支持低版本的IE. <canvas width="500" height="500" id="clock" ></canvas> 思路是获取到时分秒渲染到页面 1 var now =new Date(); 2 var second =now.getSeconds(); 3 var minute =now.getMinutes(); 4 var hour1 =now.getHo

Python3 Tkinter基础 Python3 Tkinter基础 Canvas create_rectangle 画一个矩形

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ ex1: code: from tkinter import * root=Tk() w = Canvas( root, width=200, height=200, background="white" ) w.pack() yellowLine = w.cre

Python3 Tkinter基础 Canvas create_rectangle 画一个矩形

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: from tkinter import * root=Tk() w = Canvas( root, width=200, height=200, background="white" ) w.pack() w.create_rectangle( 50,

利用canvas画一个动态时钟

目标:利用canvas画布画一个动态时钟,根据目前的时间可以实时更新的,可以在过程中添加一些效果,比如让时钟外围的一圈颜色渐变,时钟上的数字颜色改变,时钟的指针颜色改变... 设置一个定时器 先放上一张效果图,参考一下 先建一个画布,写好样式 <style type="text/css"> *{ margin: 0; padding: 0; } div{ //设置div的text-align为center,margin-top text-align: center; mar

canvas绘画基础(一):认识canvas画布

html5提供了一个<canvas>标签,结合javascript的canvas api接口可以用来绘制图形和动画.最近工作中涉及到画图的任务,下面来了解一下canvas的基础:canvas画布. 1 <style type="text/css"> 2 body {padding: 40px 0 0 40px;} 3 #canvas1,#canvas2 {background: #ff0000; opacity: 0.1; margin: auto;} 4 &l

玩转html5(四)----使用canvas画一个时钟(可以动的哦!)

先给个效果图,我画的比较丑,大家可以自己美化一下, 直接上代码: <!DOCTYPE html> <meta charset="utf-8"> <html> <body> <canvas width="500" height="500" id="clock" > 您的浏览器不支持canvas </canvas> <script> //获取画布

canvas 画一个小时钟

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <canvas id="mycanvas" height="1000" width="1000"></ca

10分钟,利用canvas画一个小的loading界面(顺便讨论下绘制效率问题)

首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" style="border: 1px solid #808080;display: block;margin: 100px auto;>你的游览器不支持canvas</canvas> 这里主要要说的就是宽高,不要在style里面定义,不然会被拉伸.(对于这点,建议大家看下W3c文档,不是很