zoukankan      html  css  js  c++  java
  • html----canvas

    <canvas>标签用于绘制图像,但本身并无绘制能力,需使用脚本来完成实际的绘画任务。getContext()方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性。

    一般,var  c=document.getElementById("canvas");
               var ctx=c.getContext("2d");
               ctx.fillStyle="#FF0000";
        ctx.fillRect(20,20,150,150);

    颜色、样式、阴影

    属性        描述

    fillStyle       设置或返回用于充填绘画的颜色、渐变或模式         context.fillStyle=color|gradient|pattern;
    strokeStyle         设置或返回用于笔触的颜色、渐变或模式。       context.strokeStyle=color|gradient|pattern;
    shadowColor      设置或返回用于阴影的颜色。       context.shadowColor=color;
    shadowBlur      设置或返回用于阴影的模糊级别。    context.shadowBlur=number
    shadowOffsetX             设置或返回阴影与形状的水平距离    context.shadowOffsetX=number;
    shadowOffsetY     设置或返回阴影与形状的垂直距离。 context.shadowOffsetY=number;

    方法                                 描述

    createLinearGradient()     创建线性渐变(用在画布内容上)       context.createLinearGradient(x0,y0,x1,y1);
    createPattern()       在指定的方向上重复指定的元素。  context.createPattern(image,"repeat|repeat-x|repeat-y|no-repeat")
    createRadialGradient()   创建放射状/环形的渐变(用在画布内容上)。   context.createRadialGradient(x0,y0,r0,x1,y1,r1);
    addColorStop()     规定渐变对象中的颜色和停止位置。  gradient.addColorStop(stop,color);

    线条样式

      属性         描述

    lineCap        设置或返回线条的结束端点样式。     context.lineCap="butt|round|square";
    lineJoin        
    设置或返回两条线相交时,所创建的拐角类型。  context.lineJoin="bevel|round|miter";   (bevel-斜角,round-圆角,miter-默认尖角
    lineWidth        
    设置或返回当前的线条宽度。  context.lineWidth=number;
    miterLimit       
    设置或返回最大斜接长度。      context.miterLimit=number;

    矩形样式

    方法          描述

    rect()          创建矩形          context.rect(x,y,width,height);     (左上角x,左上角y,矩形宽,矩形高)                      
    fillRect()        绘制"被填充"的矩形。   context.fillRect(x,y,width,height);
    strokeRect()      绘制矩形(无填充)。    context.strokeRect(x,y,width,height);
    clearRect()        在给定的矩形内清除指定的像素       context.clearRect(x,y,width,height);

    路径样式

    方法           描述

     fill()              填充当前绘图/路径       context.fill()
    stroke()        绘制已定义的路径        context.stroke()
    beginPath()      起始一条路径,或重置当前路径      context.beginPath()
    moveTo()       把路径移动到画布中的指定点,不创建线条     context.moveTo(x,y)
    closePath()      创建从当前点回到起始点的路径。        context.closePath()
    lineTo()        添加一个新点,然后在画布中创建从该点到最后指定点的线条      context.lineTo(x,y);
    clip()         从原始画布剪切任意形状和尺寸的区域。         context.clip();
    quadraticCurveTo()    创建二次贝塞尔曲线。      context.quadraticCurveTo(cpx,cpy,x,y);
    bezierCurveTo()    创建三次贝塞尔曲线。     context.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);
    arc()         创建弧/曲线(用于创建圆形或部分圆)         context.arc(x,y,r,sAngle,eAngle,counterclockwise);
    arcTo()        创建两切线之间的弧/曲线          context.arcTo(x1,y1,x2,y2,r);
    isPointInPath()      如果指定的点位于当前路径中,则返回 true,否则返回 false           context.isPointInPath(x,y);



     绘制canvas涂鸦画板并下载:

    代码如下:

       

    <!DOCTYPE >
    <html >
    <head>
    <meta charset=utf-8" />
    
    <title>canvas绘图板</title>
    <style>
    canvas{
    	border:1px dashed black;}
    </style>
    <script type="text/javascript">
    var canvas;
    var context;
    window.onload=function(){   //onload 事件会在页面或图像加载完成后立即发生
    	canvas=document.getElementById("drawingCanvas");
    	context=canvas.getContext("2d");
    	context.fillStyle="rgb(255,255,255)";   //rgb(255,255,255)白色
    	context.fillRect(0,0,canvas.width,canvas.height);  
    	context.strokeStyle="rgb(0,0,0)";  //笔触颜色
    	context.lineWidth=5;
    	canvas.onmousedown=startDrawing;
    	canvas.onmouseup=stopDrawing;   //onmouseup-鼠标按键被松开时发生
    	canvas.onmouseout=stopDrawing;  //onmouseout 属性在鼠标指针移动到元素外时触发
    	canvas.onmousemove=draw;       //onmousemove 事件会在鼠标指针移到指定的对象时发生
    };
    
    
    function changeColor(color){
    	context.strokeStyle=color;	
    }
    
    var isDrawing=false;
    function startDrawing(e){
    	isDrawing=true;
    	context.beginPath();
    	context.moveTo(e.pageX-canvas.offsetLeft,e.pageY-canvas.offsetTop);
    	}
    function draw(e){
    	if(isDrawing==true){
    		var x=e.pageX-canvas.offsetLeft;
    		var y=e.pageY-canvas.offsetTop;
    		context.lineTo(x,y);
    		context.stroke();
    		}
    	}
    function stopDrawing(){
    	isDrawing=false;
    	}
    function clearCanvas(){
    	context.fillStyle="rgb(255,255,255)";
    	context.fillRect(0,0,canvas.width,canvas.height);
    	}
    function savecanvas(){
        var w=window.open(canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"),"smallwin","width=400,height=350");
        return w;
    }
    </script>
    </head>
    <body>
    	<div align="center">
    		COLOR<input type="color" id="colorSelect" onchange="changeColor(colorSelect.value);" value="rgb(255,255,255)"/>      
    		WIDTH<input type="range" id="widthSelect" onchange="context.lineWidth=widthSelect.value;" min="1" max="20" value="5"/>      
    		<button id="clearCanvas" onclick="clearCanvas();">CLEAR ALL</button>   
    		<a id="link"></a>
    		<button id="savecanvas" onclick="savecanvas();">SAVE</button>
    		<br/>
    		<canvas id="drawingCanvas" width="800" height="400"></canvas>
    	</div>
    </body>
    </html>
    

     实现效果如下:

     

     

  • 相关阅读:
    死磕 java同步系列之ReentrantLock源码解析(一)——公平锁、非公平锁
    死磕 java同步系列之AQS起篇
    死磕 java同步系列之自己动手写一个锁Lock
    死磕 java同步系列之synchronized解析
    死磕 java同步系列之volatile解析
    死磕 java同步系列之JMM(Java Memory Model)
    解决Linux下SSH超时自动断开
    Git常用命令
    JVM常用虚拟机命令汇总
    理解GC日志
  • 原文地址:https://www.cnblogs.com/suyun1219/p/11711872.html
Copyright © 2011-2022 走看看