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

  

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

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

我们先看效果吧:

  在我小学的美术可是拿 了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. shallow clone

    shallow clone 浅克隆经常在一些大型仓库中很有用——不用花费大量时间去clone一个完整的仓库,仅仅checkout出来某个分支(如master)的最新N次递交: git clone -- ...

  2. pandas 选择列或者添加列生成新的DataFrame

    选择某些列 import pandas as pd # 从Excel中读取数据,生成DataFrame数据 # 导入Excel路径和sheet name df = pd.read_excel(exce ...

  3. P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)

    技巧:就是偶数位的回文数字一定不是质数---------证明:奇数位之和sum1==偶数位之和sum2的数字可以被11整除.(11除外,这是一个坑点) 最高位,最低位必须是 1, 3, 7, 9 暴力 ...

  4. 第23章 Spring MVC初体验

    23.1 鸟瞰Spring MVC 粗略的介绍了SpringMVC的主要组成部分,SpringMVC作为一个Web层的框架,最大的作用是把我从繁重的web.xml文件编写中解救出来,再也不要不停的添加 ...

  5. falcon常用参数解析

    CPU.xxx cpu.idle cpu.idle表示除硬盘IO等待时间以外其它等待时间,这个值越大,表示cpu越空闲,还可以执行更多的任务,反之亦然,此处我们falcon展示的是idle的波动情况, ...

  6. PAT A1095 Cars on Campus (30 分)——排序,时序,从头遍历会超时

    Zhejiang University has 8 campuses and a lot of gates. From each gate we can collect the in/out time ...

  7. Java多线程(三)—— synchronized关键字详解

    一.多线程的同步 1.为什么要引入同步机制 在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源.必须对这种潜在资源冲突进行预防. 解决方法:在线程使用一个资源时为其加锁即可. 访问资 ...

  8. 基于vs2015的rdlc报表运行环境部署

    先说明一下,rdlc报表是由visual studio来支持的,不是FM. 本次项目采用的是vs2015开发的,当中使用了ReportViewer报表. 两种方式可以支持开发rdlc报表环境: 1)在 ...

  9. HBase篇(3)-架构详解

    [每日五分钟搞定大数据]系列,HBase第三篇 聊完场景和数据模型我们来说下HBase的架构,在网上找了张比较清晰的图,我觉得这张图能说明很多问题,那这一篇我们就重点来解析下这张图 角色与职责 先介绍 ...

  10. Git 使用vi或vim命令打开、关闭、保存文件

    1 vi & vim 有两种工作模式: (1)命令模式:接受.执行 vi & vim 操作命令的模式,打开文件后的默认模式: (2)编辑模式:对打开的文件内容进行 增.删.改 操作模式 ...