html5+javascript制作简易画板附图

所属分类: 网络编程 / JavaScript 阅读数: 1198
收藏 0 赞 0 分享
见图:

 

代码如下:
复制代码 代码如下:

<!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>
更多精彩内容其他人还在看

BootStrap数据表格实例代码

本文通过实例代码给大家分享了BootStrap数据表格的相关知识,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

基于vue的短信验证码倒计时demo

这篇文章主要介绍了基于vue的短信验证码倒计时demo,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解React Native开源时间日期选择器组件(react-native-datetime)

本篇文章主要介绍了详解React Native开源时间日期选择器组件(react-native-datetime),具有一定的参考价值,有兴趣的可以了解一下
收藏 0 赞 0 分享

JS库particles.js创建超炫背景粒子插件(附源码下载)

particles.js用于创建粒子的轻量级 JavaScript 库。使用方法非常简单,代码也很容易实现,下面通过本文给大家分享JS库particles.js创建超炫背景粒子插件附源码下载,需要的朋友参考下吧
收藏 0 赞 0 分享

JS库之Waypoints的用法详解

waypoints的功能非常强大,一款用于捕获各种滚动事件的插件,下面跟随脚本之家小编一起学习JS库之Waypoints的用法吧
收藏 0 赞 0 分享

强大的JavaScript响应式图表Chartist.js的使用

本篇文章主要介绍了强大的JavaScript响应式图表Chartist.js的使用,具有一定的参考价值,有兴趣的可以了解一下
收藏 0 赞 0 分享

详解wow.js中各种特效对应的类名

本篇文章主要介绍了wow.js中各种特效对应的类名 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

JS库之Highlight.js的用法详解

highlight.js是一款轻量级的Web代码语法高亮库。下面通过实例代码给大家分享JS库之Highlight.js的用法详解,感兴趣的朋友跟随脚本之家小编一起学习吧
收藏 0 赞 0 分享

详解动画插件wow.js的使用方法

本篇文章主要介绍了动画插件wow.js的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

JS库 Highlightjs 添加代码行号的实现代码

Highlightjs是一款优秀的代码高亮Js组件,可以很方便地对各种语言编写的代码添加语法高亮样式。本文重点给大家介绍Highlightjs 添加代码行号的实现代码,需要的朋友参考下吧
收藏 0 赞 0 分享
查看更多