h5简易手写板
。。。。。。。。。。。。。
我该说点什么呢,开头居然不知道想说点什么!好吧不知道说什么,我们就来说说这个手写板吧,虽然这个手写板现在没什么用,但是。。。。。,好像的确没什么用啊!
只是存粹哪里练手的的,呵 。呵 。(大写的尴尬)。我到底在说什么啊!!!好吧不说了,都快跑题了。
我们先看效果吧:

在我小学的美术可是拿 了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();
        }
实在不想写字了。。。。。
源码网盘地址

h5简易手写板的更多相关文章
- H5——简易马祖
		<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ... 
- Html5 Page Creator,简易h5页面场景制作
- h5页面调用摄像头(简易版)
		<input type="button" value="OpenVideo" id="btnOpenVideo" /> < ... 
- h5图片上传简易版(FileReader+FormData+ajax)
		一.选择图片(input的file类型) <input type="file" id="inputImg"> 1. input的file类型会渲染为 ... 
- 一个简易h5涉及的ps技巧
		事实证明,很长时间不做,是会忘掉的呀,的呀,呀,啊~ 1.合并图层 CTRL+E合并多个图层 2.切片 3.导出 文件-------导出------存储为web所用格式-------->> ... 
- 用微信小程序做H5游戏尝试
		微信小程序发布后,公司虽然没有拿到第一批内测资格,但作为微信亲密合作伙伴,一定要第一时间去尝试啦.现在微信小程序刚发布还在测试阶段,可以说是1.0版本,所以框架和结构内容都还不多,相关的文档跟微信AP ... 
- 用PHP+H5+Boostrap做简单的音乐播放器(进阶版)
		前言:之前做了一个音乐播放器(纯前端),意外的受欢迎,然后有人建议我把后台一起做了,正好也想学习后台,所以学了两天php(不要吐槽我的速度,慢工出细活嘛~)然后在之前的基础上也又完善了一些功能,所以这 ... 
- h5的瀑布流
		<!doctype html><html><head><meta charset="utf-8"><title>超简易瀑 ... 
- 简易RPC框架-学习使用
		*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ... 
随机推荐
- js如何判断对象是否为空
			1.将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var b = (JSON.stringify(data) == "{ ... 
- [找工作] 2019秋招|从春招到秋招,Java岗经验总结(收获AT)
			转自(有更多) https://blog.csdn.net/zj15527620802/article/month/2018/10 前言 找工作是一件辛酸而又难忘的历程.经历过焦虑.等待.希望,我们最 ... 
- UART\RS232与RS485的关系
			https://blog.csdn.net/lhl161123/article/details/53510593 串口通讯是电子工程师面对的最基本的一个通讯方式,RS-232是其中最简单的一种.然而, ... 
- ESP8266 HTTP 项目(2)HTTP网页修改WIFI连接,上电自动连接上次的WIFI。
			网页 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf ... 
- Flask中无法在其他函数中查询Sqlachemy的解决办法
			报错信息部分截取: File "D:\python 3.5\lib\site-packages\flask_sqlalchemy\__init__.py", line 912, i ... 
- FineUI经典项目展示(2)基础管理系统(附在线演示)
			本系列<FineUI经典项目展示>文章将会集中展示一批使用FineUI(开源版).专业版.MVC版的经典项目. 如果你希望自己的FineUI项目出现在这个舞台,请到官网论坛提交申请: ht ... 
- Python 学习 第十三篇:数据的读写-文件、DataFrame、json
			Python的文件是一个重要的对象,使用open()函数来打开文件,创建文件对象,进行文件的读写操作.当数据用于交换信息时,通常需要把数据保存为有格式的文本数据,可以保存为有特定的行分隔符和列分隔符的 ... 
- 开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0
			前言 去年我在业余时间,自己整了一套dapper的lambda表达式的封装,原本是作为了一个个人的娱乐项目,当时也只支持了Sql Server数据库.随之开源后,有不少朋友也对此做了试用,也对我这个项 ... 
- Python股票分析系列——获得标普500的所有公司股票数据.p6
			该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第6部分. 在之前的Python教程中,我们介绍了如何获取我们感兴趣的公司名单(在我们的案例中是 ... 
- Python股票分析系列——基础股票数据操作(一).p3
			该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ... 
