。。。。。。。。。。。。。
我该说点什么呢,开头居然不知道想说点什么!好吧不知道说什么,我们就来说说这个手写板吧,虽然这个手写板现在没什么用,但是。。。。。,好像的确没什么用啊!
只是存粹哪里练手的的,呵 。呵 。(大写的尴尬)。我到底在说什么啊!!!好吧不说了,都快跑题了。
我们先看效果吧:
在我小学的美术可是拿 了98分的,你说我画的好不好,厉不厉害,害不害怕。谔谔,好吧长大以后这个画画的天分就下降了这么点点哈。。。
废话不多说,整体功能,可以改变颜色,线条有粗有细(怎么感觉哪里不对),可以清除。然后 然后没有然后了。。
css 就不多说了吧(其实就是难得弄)。。
然后是html
<canvas id="canvas"></canvas> <div id="controller"> <div id="dclear"><a href="javascript:;" id="btnclear">清除</a></div> <div id="dcolors"> <div class="dcolor dblack" data-color="black"></div> <div class="dcolor dred" data-color="red"></div> <div class="dcolor dgreen" data-color="green"></div> <div class="dcolor dblue" data-color="blue"></div> <div class="dcolor ffe0" data-color="#88ffe0"></div> <div class="dcolor ff4e" data-color="#60ff4e"></div> <div class="dcolor ee6e" data-color="#b1ee6e"></div> <div class="dcolor a8ee" data-color="#eba8ee"></div> <div class="dcolor c8ff" data-color="#4fc8ff"></div> <div class="dcolor cb66" data-color="#eecb66"></div> <div class="dcolor d84ee" data-color="#9c84ee"></div> </div> <div id="xians"> <div class="dxian" data-color="1">线1</div> <div class="dxian" data-color="2">线2</div> <div class="dxian" data-color="3">线3</div> <div class="dxian" data-color="4">线4</div> <div class="dxian" data-color="6">线6</div> <div class="dxian" data-color="8">线8</div> <div class="dxian" data-color="10">线10</div> <div class="dxian" data-color="12">线12</div> <div class="dxian" data-color="16">最大</div> </div> </div>
最后核心js来了,大家注意了。
var isMouseDown = false;
var LastLoc = { x: 0, y: 0 };
var scolor= "black";
onload = function () {//页面加载完毕后执行 canvasWidth = 500; canvasHight = 500; canvas = document.getElementById("canvas");//演员 context = canvas.getContext("2d");//相当于是演员去表演的舞台 drawGrid(); canvas.onmousedown = function (e) {//鼠标按下 e.preventDefault();//取消事件的默认动作 isMouseDown = true; LastLoc = windowToCanvas(e.clientX, e.clientY); canva(e); }; canvas.onmouseup = function (e) {//鼠标按起 e.preventDefault(); isMouseDown = false; }; canvas.onmouseout = function (e) {//出了画布 e.preventDefault(); isMouseDown = false; }; canvas.onmousemove = function (e) {//鼠标移动 e.preventDefault(); canva(e); }; $("#btnclear").click(function () { context.clearRect(0, 0, canvasWidth, canvasHight); drawGrid(); }); $(".dcolor").click(function () { $(this).addClass("sel").siblings().removeClass("sel"); scolor = $(this).attr("data-color"); }); $(".dxian").click(function () { $(this).addClass("sel").siblings().removeClass("sel"); border = $(this).attr("data-color"); }); }; function windowToCanvas(x, y)//x,y为距离屏幕的距离 { var bbox = canvas.getBoundingClientRect();//canvas距离屏幕的距离 return { x: Math.round(x - bbox.left), y: Math.round(y - bbox.top) };//获取距离canvas的距离 } function canva(e){ if (isMouseDown) { var curloc = windowToCanvas(e.clientX, e.clientY);//获取到移动到的那个点的坐标 context.beginPath(); context.moveTo(LastLoc.x, LastLoc.y); context.lineTo(curloc.x, curloc.y); context.strokeStyle = scolor; context.lineWidth = border; context.lineCap = "round";//帽子 context.lineJoin = "round"; context.stroke(); LastLoc = curloc; } } function drawGrid() { canvas.width = canvasWidth;//画板宽 canvas.height = canvasHight;//画板高 context.strokeStyle = "#000";//画板颜色 context.beginPath();//方法在一个画布中开始子路径的一个新的集合。 context.moveTo(3, 3); //方法可把窗口的左上角移动到一个指定的坐标。 context.lineTo(canvasWidth - 3, 3); context.lineTo(canvasWidth - 3, canvasHight - 3); context.lineTo(3, canvasWidth - 3); context.closePath(); context.lineWidth = 6;//用宽度为 6 像素的线条来绘制矩形: context.stroke();//结束 //context.beginPath(); //context.moveTo(0, 0); //context.lineTo(canvasWidth, canvasHight); //context.moveTo(canvasWidth, 0); //context.lineTo(0, canvasHight); //context.moveTo(canvasWidth / 2, 0); //context.lineTo(canvasWidth / 2, canvasHight); // //context.moveTo(0, canvasHight / 2); //context.lineTo(canvasWidth, canvasHight / 2); //context.lineWidth = 1; //context.stroke(); }
实在不想写字了。。。。。
源码网盘地址