html5+javascript制作简易画板附图


Posted in Javascript onApril 25, 2014

见图:

html5+javascript制作简易画板附图 

代码如下:

<!DOCTYPE html> 
<html> 
<meta http-equiv="content-type" Content="text/html;charset=utf-8"> 
<head> <title>简易画板</title> 
<style> 
#eraseImg{ /*橡皮样式*//**/ 
border:solid; 
color:gray; 
border-radius: 118px; 
width: 5px; 
height: 5px; 
position: absolute; 
display: none; 
} 
.eraseSeries{ /*橡皮大小单选按钮组的排列,此div不单独占一行*/ 
display: inline-block; 
} 
</style> 
<script src="jquery-1.7.1.js"></script> 
<script> 
var c;//获取到的2d画板 
var painting = false;//判断是否正在绘画,即鼠标左键是否长按下去 
var canvas;//画板 
$(function(){ 
$(".eraseSeries").hide();//初始状态单选按钮组隐藏 
canvas=document.getElementById("myCanvas"); 
c=canvas.getContext("2d"); 
c.lineCap="round";//设置笔迹边角,否则笔迹会出现断层 
c.strokeStyle="black";//笔迹的颜色 
c.lineWidth=5;//笔迹的粗细 
$("#color").change(function(){//笔迹颜色发生改变时 
if(eraseFlag==true)//处在擦皮状态 
{ 
$("#erase").trigger("click");//自动触发橡皮的点击事件,以返回到画笔状态 
} 
c.strokeStyle=$(this).val();//设置画笔状态 
c.lineWidth=$(this).val(); 
}); 
$("#fontSize").change(function(){//画笔粗细发生改变 
if(eraseFlag==true)//同上 
{ 
$("#erase").trigger("click"); 
} 
c.lineWidth=$(this).val(); 
c.strokeStyle=$("#color").val(); 
//eraseFlag=false; 
}); 
$(".eraseSeries").click(function(){//橡皮大小发生改变 
var size=$('input[name="eraseSize"]:checked').val();//获取到橡皮单选按钮组的选中值 
sizeE=size;//将该值传到全局变量上,sizeE需要用来控制橡皮样式的位置 
c.lineWidth=size; 
$("#eraseImg").css({"width" :size+"px","height":size+"px"});//橡皮样式大小发生改变 
}); 
$("#erase").toggle(function(){//橡皮按钮的点击翻转事件 
c.save();//保持上次设置的状态 
eraseFlag=true; 
c.strokeStyle="white"; 
$("#erase").text("画笔");//改变按钮上的文字 
$(".eraseSeries").show('fast');//橡皮单选组出现 
// $("#eraseImg").show(); 
sizeE=5; 

},function(){ 
eraseFlag=false; 
$("#erase").text("橡皮"); 
$(".eraseSeries").hide('fast'); 
c.restore();//恢复上次画笔的状态(包括颜色,粗细等) 
}); 

//setInterval(paint,2); 
}); 
var p_x;//上次鼠标位置 
var p_y; 
var p_x_now;//当前瞬间鼠标位置 
var p_y_now; 
var eraseFlag=false; 
var sizeE;//橡皮大小 
$(document).mousedown(function(e){//鼠标按下触发事件 

// alert(sizeE); 
p_x= e.clientX;//获取位置,并置为上次鼠标位置 
p_y= e.clientY; 
painting = true;//画笔启动标志 
}); 
$(document).mousemove(function(e){//鼠标移动触发事件 
if(eraseFlag==true&& e.clientY>30)//橡皮处在激活状态,并且鼠标Y的位置大于30,也即鼠标在画板内 
{ 
//橡皮图像跟随鼠标而动 
$("#eraseImg").animate({left: e.clientX-sizeE+"px",top: e.clientY-sizeE+"px"},0).show('fast'); 
} 
else 
{ 
$("#eraseImg").hide('fast'); 
} 
if(painting==true)//处于画笔激活状态 
{ 
//alert(1); 
p_x_now= e.clientX;//当前瞬间的鼠标位置 
p_y_now= e.clientY; 
c.beginPath();//开始路径 
//曲线是由一段段非常小的直线构成,计算机运算速度很快,这是一种以直线迭代画曲线的方式 
c.moveTo(p_x-5-canvas.offsetLeft,p_y-5-canvas.offsetTop);//移动到起始点 
c.lineTo(p_x_now-5-canvas.offsetLeft,p_y_now-5-canvas.offsetTop);//从起始点画直线到终点 
c.stroke(); 
c.closePath();//封闭路径,这个很重要,如果路径不封闭, 
// 那么只要canvas颜色发生改变,所有的之前画过的颜色都发生改变 
p_x = p_x_now;//一次迭代后讲当前的瞬间坐标值赋给上次鼠标坐标值 
p_y = p_y_now; 
} 
}); 
$(document).mouseup(function(e){//鼠标松开触发事件 
painting=false;//冻结画笔 
}); 
</script> 
</head> 
<body> 
<div > 
<select id="color" > <!--画笔颜色--> 
<option class="opt" value="red">红色</option> 
<option class="opt" value="yellow">黄色</option> 
<option class="opt" value="blue">蓝色</option> 
<option class="opt" value="black" selected>黑色</option> 
<option class="opt" value="green">绿色</option> 
</select> 
<select id="fontSize"> <!--画笔大小--> 
<option value=5 selected>5</option> 
<option value=10>10</option> 
<option value=15>15</option> 
<option value=20>20</option> 
<option value=30>30</option> 
</select> 
<button id="erase">擦皮</button> <!--橡皮按钮--> 
<div class="eraseSeries"> <!--橡皮大小--> 
<input type="radio" name="eraseSize" value="5" checked/>5 
<input type="radio" name="eraseSize" value="10"/>10 
<input type="radio" name="eraseSize" value="15"/> 15 
<input type="radio" name="eraseSize" value="20"/> 20 
<input type="radio" name="eraseSize" value="30"/>30 
</div> 
</div> 
<!--<button id="btn">btn</button>--> 
<canvas id="myCanvas" width="1420" height="780" style="border: solid"></canvas> <!--整个画布--> 
<div id="eraseImg"> <!--橡皮形状--> 
</div> 
</body> 
</html>
Javascript 相关文章推荐
javascript实现修改微信分享的标题内容等
Dec 11 Javascript
jquery实现点击页面计算点击次数
Jan 23 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
Jan 26 Javascript
浅谈关于JavaScript API设计的一些建议和准则
Jun 24 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
Jul 14 Javascript
只需五句话搞定JavaScript作用域(经典)
Jul 26 Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 Javascript
如何理解Vue的作用域插槽的实现原理
Aug 19 Javascript
js构建二叉树进行数值数组的去重与优化详解
Mar 26 Javascript
vue项目中使用bpmn-自定义platter的示例代码
May 11 Javascript
ant design charts 获取后端接口数据展示
May 25 Javascript
从原生JavaScript到React深入理解
Jul 23 Javascript
js实现字符串的16进制编码不加密
Apr 25 #Javascript
利用js制作html table分页示例(js实现分页)
Apr 25 #Javascript
jquery操作select大全
Apr 25 #Javascript
jquery自定义下拉列表示例
Apr 25 #Javascript
jquery常用特效方法使用示例
Apr 25 #Javascript
javascript实现存储hmtl字符串示例
Apr 25 #Javascript
javascript作用域和闭包使用详解
Apr 25 #Javascript
You might like
聊天室php&amp;mysql(五)
2006/10/09 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
php提交post数组参数实例分析
2015/12/17 PHP
Laravel实现表单提交
2017/05/07 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
python使用Tkinter显示网络图片的方法
2015/04/24 Python
用Python进行TCP网络编程的教程
2015/04/29 Python
python使用tkinter实现简单计算器
2018/01/30 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
python实现学员管理系统
2019/02/26 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
Python pandas库中的isnull()详解
2019/12/26 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
中学生自我鉴定
2014/02/04 职场文书
《问银河》教学反思
2014/02/19 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
Redis全局ID生成器的实现
2022/06/05 Redis