。。。。。。。。。。。。。

  

我该说点什么呢,开头居然不知道想说点什么!好吧不知道说什么,我们就来说说这个手写板吧,虽然这个手写板现在没什么用,但是。。。。。,好像的确没什么用啊!

只是存粹哪里练手的的,呵 。呵 。(大写的尴尬)。我到底在说什么啊!!!好吧不说了,都快跑题了。

我们先看效果吧:

  在我小学的美术可是拿 了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简易手写板的更多相关文章

  1. H5——简易马祖

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. Html5 Page Creator,简易h5页面场景制作

  3. h5页面调用摄像头(简易版)

    <input type="button" value="OpenVideo" id="btnOpenVideo" /> < ...

  4. h5图片上传简易版(FileReader+FormData+ajax)

    一.选择图片(input的file类型) <input type="file" id="inputImg"> 1. input的file类型会渲染为 ...

  5. 一个简易h5涉及的ps技巧

    事实证明,很长时间不做,是会忘掉的呀,的呀,呀,啊~ 1.合并图层 CTRL+E合并多个图层 2.切片 3.导出 文件-------导出------存储为web所用格式-------->> ...

  6. 用微信小程序做H5游戏尝试

    微信小程序发布后,公司虽然没有拿到第一批内测资格,但作为微信亲密合作伙伴,一定要第一时间去尝试啦.现在微信小程序刚发布还在测试阶段,可以说是1.0版本,所以框架和结构内容都还不多,相关的文档跟微信AP ...

  7. 用PHP+H5+Boostrap做简单的音乐播放器(进阶版)

    前言:之前做了一个音乐播放器(纯前端),意外的受欢迎,然后有人建议我把后台一起做了,正好也想学习后台,所以学了两天php(不要吐槽我的速度,慢工出细活嘛~)然后在之前的基础上也又完善了一些功能,所以这 ...

  8. h5的瀑布流

    <!doctype html><html><head><meta charset="utf-8"><title>超简易瀑 ...

  9. 简易RPC框架-学习使用

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

随机推荐

  1. bootstrap+Ajax+SSM(maven搭建)实现增删改查

    https://www.jianshu.com/p/d76316b48e3e 源码: https://github.com/Ching-Lee/crud 功能点: 分页 数据校验 ajax Rest风 ...

  2. 004_Python高级特性(1):Iterators、Generators和itertools(参考)

    对数学家来说,Python这门语言有着很多吸引他们的地方.举几个例子:对于tuple.lists以及sets等容器的支持,使用与传统数学类 似的符号标记方式,还有列表推导式这样与数学中集合推导式和集的 ...

  3. (二 -3-1) 天猫精灵接入Home Assistant-自动发现Mqtt设备--灯系列 实战

    #本片教程介绍了具体如何实现天猫精灵控制一个灯. 前提: HASS平台 你已经搭建一个可以在公网IP访问到的HASS平台--- 我用的是租了阿里云服务器,买了个域名,ubuntu1604系统 你已经搭 ...

  4. <计算机网络>运输层

    端口号:通常在一台主机上运行多个网络应用程序,IP地址标识一台主机,而端口号标识特定的进程.端口是一个16bits的数,其大小在0-65535之间.0-1023之间的端口号叫做周知端口号 套接字:从网 ...

  5. 工具篇-Json处理

    1. @JsonProperty和@SerializedName注解 使用场景 将一个json格式的字符串转换成某个java对象,或者将一个java对象转换成json格式的字符串时,如果json字符串 ...

  6. Luogu P1967 货车运输

    qwq 这题是知道了正解做法才写的.. 求每两点间最小权值最大的路径,本来我以为要每个点都跑一遍dij(?),后来意识到生成树好像是用来找这个的( ´▽`) 然后我问dtxdalao对不对,他说“我记 ...

  7. linux驱动编写之poll机制

    一.概念 1.poll情景描述 以按键驱动为例进行说明,用阻塞的方式打开按键驱动文件/dev/buttons,应用程序使用read()函数来读取按键的键值.这样做的效果是:如果有按键按下了,调用该re ...

  8. Rommel - C# 浅谈 接口(Interface)的作用

    鉴于网上太多太多的对C# 接口的误解,想来想去还是自己做一个完美的接口 篇章 继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基 ...

  9. git pull 解决 refusing to merge unrelated histories 错误

    解决办法: 1.cmd进入项目的根目录. 2.执行下面的命令:git pull origin master --allow-unrelated-histories.可以提交成功. 3.再次push.

  10. FineUIMvc随笔(7)扩展通知对话框(显示多个不重叠)

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 这篇文章我们将改造 FineUIMvc 默认的通知对话框,使得同时显示多个也不会重叠.并提前出一个公共的JS文件,供大家使用. ...