简易画板 <script> <br><br>var c;//获取到的2d画板 <BR>var painting = false;//判断是否正在绘画,即鼠标左键是否长按下去 <BR>var canvas;//画板 <BR>$(function(){ <br><br>$(".eraseSeries").hide();//初始状态单选按钮组隐藏 <br><br>canvas=document.getElementById("myCanvas"); <BR>c=canvas.getContext("2d"); <BR>c.lineCap="round";//设置笔迹边角,否则笔迹会出现断层 <BR>c.strokeStyle="black";//笔迹的颜色 <BR>c.lineWidth=5;//笔迹的粗细 <BR>$("#color").change(function(){//笔迹颜色发生改变时 <BR>if(eraseFlag==true)//处在擦皮状态 <BR>{ <BR>$("#erase").trigger("click");//自动触发橡皮的点击事件,以返回到画笔状态 <BR>} <BR>c.strokeStyle=$(this).val();//设置画笔状态 <BR>c.lineWidth=$(this).val(); <br><br>}); <br><br>$("#fontSize").change(function(){//画笔粗细发生改变 <BR>if(eraseFlag==true)//同上 <BR>{ <BR>$("#erase").trigger("click"); <BR>} <BR>c.lineWidth=$(this).val(); <BR>c.strokeStyle=$("#color").val(); <BR>//eraseFlag=false; <BR>}); <br><br>$(".eraseSeries").click(function(){//橡皮大小发生改变 <BR>var size=$('input[name="eraseSize"]:checked').val();//获取到橡皮单选按钮组的选中值 <BR>sizeE=size;//将该值传到全局变量上,sizeE需要用来控制橡皮样式的位置 <BR>c.lineWidth=size; <BR>$("#eraseImg").css({"width" :size+"px","height":size+"px"});//橡皮样式大小发生改变 <BR>}); <br><br>$("#erase").toggle(function(){//橡皮按钮的点击翻转事件 <BR>c.save();//保持上次设置的状态 <BR>eraseFlag=true; <BR>c.strokeStyle="white"; <br><br>$("#erase").text("画笔");//改变按钮上的文字 <BR>$(".eraseSeries").show('fast');//橡皮单选组出现 <BR>// $("#eraseImg").show(); <BR>sizeE=5; <br><br><BR>},function(){ <BR>eraseFlag=false; <BR>$("#erase").text("橡皮"); <BR>$(".eraseSeries").hide('fast'); <BR>c.restore();//恢复上次画笔的状态(包括颜色,粗细等) <BR>}); <br><br><BR>//setInterval(paint,2); <br><br>}); <br><br>var p_x;//上次鼠标位置 <BR>var p_y; <BR>var p_x_now;//当前瞬间鼠标位置 <BR>var p_y_now; <BR>var eraseFlag=false; <BR>var sizeE;//橡皮大小 <br><br>$(document).mousedown(function(e){//鼠标按下触发事件 <br><br><BR>// alert(sizeE); <BR>p_x= e.clientX;//获取位置,并置为上次鼠标位置 <BR>p_y= e.clientY; <BR>painting = true;//画笔启动标志 <br><br>}); <BR>$(document).mousemove(function(e){//鼠标移动触发事件 <BR>if(eraseFlag==true&& e.clientY>30)//橡皮处在激活状态,并且鼠标Y的位置大于30,也即鼠标在画板内 <BR>{ <br><br>//橡皮图像跟随鼠标而动 <BR>$("#eraseImg").animate({left: e.clientX-sizeE+"px",top: e.clientY-sizeE+"px"},0).show('fast'); <BR>} <BR>else <BR>{ <BR>$("#eraseImg").hide('fast'); <BR>} <BR>if(painting==true)//处于画笔激活状态 <BR>{ <BR>//alert(1); <BR>p_x_now= e.clientX;//当前瞬间的鼠标位置 <BR>p_y_now= e.clientY; <BR>c.beginPath();//开始路径 <BR>//曲线是由一段段非常小的直线构成,计算机运算速度很快,这是一种以直线迭代画曲线的方式 <BR>c.moveTo(p_x-5-canvas.offsetLeft,p_y-5-canvas.offsetTop);//移动到起始点 <BR>c.lineTo(p_x_now-5-canvas.offsetLeft,p_y_now-5-canvas.offsetTop);//从起始点画直线到终点 <br><br>c.stroke(); <BR>c.closePath();//封闭路径,这个很重要,如果路径不封闭, <BR>// 那么只要canvas颜色发生改变,所有的之前画过的颜色都发生改变 <BR>p_x = p_x_now;//一次迭代后讲当前的瞬间坐标值赋给上次鼠标坐标值 <BR>p_y = p_y_now; <BR>} <br><br>}); <br><br>$(document).mouseup(function(e){//鼠标松开触发事件 <br><br>painting=false;//冻结画笔 <BR>}); <br><br></script>