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 相关文章推荐
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
Three.js源码阅读笔记(Object3D类)
Dec 27 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
Aug 21 Javascript
javascript实现根据汉字获取简拼
Sep 25 Javascript
Json按某个键的值进行排序
Dec 22 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
Dec 23 Javascript
js实现功能比较全面的全选和多选
Mar 02 Javascript
jquery点赞功能实现代码 点个赞吧!
May 29 jQuery
vue2.0+vue-dplayer实现hls播放的示例
Mar 02 Javascript
基于VUE实现的九宫格抽奖功能
Sep 30 Javascript
构建大型 Vue.js 项目的10条建议(小结)
Nov 14 Javascript
antd 表格列宽自适应方法以及错误处理操作
Oct 27 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
python简单实现旋转图片的方法
2015/05/30 Python
python中管道用法入门实例
2015/06/04 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
物流专业求职计划书
2014/01/10 职场文书
绿化先进工作者事迹材料
2014/01/30 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
房屋出售协议书
2014/04/10 职场文书
大学生党性分析材料
2014/12/19 职场文书
专项资金申请报告
2015/05/15 职场文书
2015年党总支工作总结
2015/05/25 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
Python制作动态字符画的源码
2021/08/04 Python