Heim > Web-Frontend > H5-Tutorial > Hauptteil

Beispiel-Tutorial für eine HTML5-Canvas-Zeichnung

PHPz
Freigeben: 2017-04-23 10:20:39
Original
1607 Leute haben es durchsucht

In diesem Artikel wird ausführlich erläutert, wie PHP-chinesische Internetnutzer das Zeichnen mit HTML5 Canvas als Referenz und zum Lernen verwenden können.

Bitte beachten Sie zunächst Folgendes: Das Element <canvas> ist Wird von einigen alten Browsern nicht verwendet, wird aber von Firefox 1.5+, Opera 9+, neueren Versionen von Safari, Chrome und Internet Explorer 9 unterstützt.

Es ist ein 2D erforderlich Kontext vor dem Zeichnen rendern< ;canvas>Element

var canvas = document.getElementById('canvas');var ctx = canvas.getContext('2d');
Nach dem Login kopieren

<span style="font-family: verdana, Arial, Helvetica, sans-serif;">Canvas zeichnet Bilder basierend auf dem Status . <code><span style="font-family: verdana, Arial, Helvetica, sans-serif;">Canvas是基于状态绘制图像的。</span>

Grundlegende Verwendung:
1 Verwenden Sie die folgenden zwei Methoden, um einen Pfad zu definieren

context.moveTo(x,y); //起点context.lineTo(x,y); //连线到终点
Nach dem Login kopieren

2. Wenn Sie mehrere Pfade separat verarbeiten möchten, müssen Sie am Anfang und Ende der Pfaddefinition die folgenden zwei Methoden hinzufügen, um sie zu trennen

context.beginPath();
context.closePath();
Nach dem Login kopieren

3 Stil

context.lineWidth    //定义线条宽度context.strokeStyle    //定义线条颜色context.fillStyle    //填充颜色context.stroke();    //绘制线条context.fill();        //绘制填充的颜色块
Nach dem Login kopieren

4. Bogen zeichnen


context.arc(
    centerx, centery, radius,    //圆心坐标(x,y)以及半径r
    startingAngle, endingAngle,    //开始的弧度值,和结束的弧度值
    anticlockwise = false        //可选参数,(false顺时针绘制)还是(true逆时针绘制))
Nach dem Login kopieren

5. Zeichnen Sie ein Rechteck


context.rect(x, y, width, height); //设置矩形状态context.fill();
context.stroke();//或者context.fillRect(x, y, width, height); //绘制填充的矩形context.strokeRect(x, y, width, height); //绘制边框的矩形
Nach dem Login kopieren

6 FillStyle und StrokeStyle


#FFF
#333rgb(255,128,0)
rgba(100,100,100,0.8)
hsl(20,62%,28%)
hsla(40,83%,33%,0.6)
red
Nach dem Login kopieren

7. LineCap: lineCap
wird verwendet, um das festzulegen Form beider Enden der Linie. Es gibt die folgenden drei Werte:


butt(default)    //默认缺省round    //圆头square    //方头context.lineCap = "round";
Nach dem Login kopieren

8. Die Form des Schnittpunkts von Linien und Linien: lineJoin
Drei Attributwerte:


miter(default)    //尖角bevel    //斜接round    //圆角context.lineJoin = "round";//当尖角很尖锐时,会出现lineJoin为bevel//此时跟另外一个属性有关:miterLimit,默认值是10//当在lineJoin为miter情况下,miterLimit大于10时,lineJoin会自动变成bevel
Nach dem Login kopieren

9. Bildtransformation und Statusspeicherung
Bildtransformation:


位移:translate(x,y);
旋转:rotate(deg);
缩放:scale(sx,sy);//保存当前图形状态:context.save();//恢复图形的所有状态:context.restore();//使用:context.save();
context.translate(x,y);
context.restore();
Nach dem Login kopieren

10. Transformationsmatrix


a    c    e
b    d    f0    0    1a水平缩放(1)
b水平倾斜(0)
c垂直倾斜(0)
d垂直缩放(1)
e水平位移(0)
f垂直位移(0)
即:默认时,该变换矩阵为单位阵//设置变换矩阵transform(a,b,c,d,e,f);//重置变换矩阵setTransform(a,b,c,d,e,f);
Nach dem Login kopieren

11. Linearer Farbverlauf


var grd = context.createLinearGradient(xstart,ystart,xend,yend);//开始坐标到结束坐标grd.addColorStop(stop,color);//stop为浮点数,开始坐标点到结束坐标点直线上,某个位置(0.0~1.0之间)//例:var skyStyle = context.createLinearGradient(0,0,800,800);
skyStyle.addColorStop(0.0, 'black');
skyStyle.addColorStop(1.0, 'blue');

context.fillStyle = skyStyle;
Nach dem Login kopieren

12. Radialer Farbverlauf


var grd = context.createRadialGradient(x0,y0,r0,x1,y1,r1);//开始圆心坐标到结束圆心坐标,以及半径grd.addColorStop(stop,color);//stop为浮点数,开始坐标点到结束坐标点直线上,某个位置(0.0~1.0之间)
Nach dem Login kopieren

13. Bildfüllung


createPattern(img,repeat-style) //img为图片对象,repeat-style填充格式//其中repeat-style: no-repeat/repeat-x/repeat-y/repeat//例:var backgroundImage = new Image();
backgroundImage.src = "bg.jpg";
backgroundImage.onload = function(){var pattern = context.createPattern(backgroundImage,"repeat");
context.fillStyle = pattern;
context.fillRect(0,0,800,800);
}
Nach dem Login kopieren

14.Leinwandfüllung


createPattern(canvas,repeat-style) //canvas对象,repeat-style填充格式
Nach dem Login kopieren

Beispiel:


    window.onload=function(){        var canvas=document.getElementById("canvas");
        canvas.width=800;
        canvas.height=800;        var context=canvas.getContext("2d");        var backCanvas=createBackgroundCanvas();        var pattern=context.createPattern(backCanvas,"repeat");
        context.fillStyle=pattern;
        context.fillRect(0,0,800,800);
   }    function createBackgroundCanvas(){        var backCanvas=document.createElement("canvas");
        backCanvas.width=100;
        backCanvas.height=100;        var backContext=backCanvas.getContext("2d");
        backContext.beginPath();
        backContext.moveTo(15,15);
        backContext.lineTo(50,50);
        backContext.lineWidth=10;
        backContext.strokeStyle="green";
        backContext.stroke();        return backCanvas;
    }
Nach dem Login kopieren

15


createPattern(video,repeat-style) //video视频对象
Nach dem Login kopieren

16. Eine weitere Bogenzeichnungsmethode


Beispiel:
context.arcTo(
    x1,y1,x2,y2,    //x1,y1,x2,y2两个坐标与起始点x0,y0组成一个角
    radius    //半径)
Nach dem Login kopieren


context.moveTo(x0,y0);
context.arcTo(x1,y1,x2,y2,R);//起始点为(x0,y0),该弧线与01线以及12线相切
Nach dem Login kopieren

17. Bezier-Kurve

Quadratische Bezier-Kurve
Bezier-Kubik

context.moveTo(x0, y0);    //起始点context.quadraticCurveTo(
    x1, y1,    //控制点坐标
    x2, y2    //终点坐标)
Nach dem Login kopieren

18. Textwiedergabe
context.moveTo(x0, y0);    //起始点context.bezierCurveTo(
    x1, y1, //控制点坐标
    x2, y2, //控制点坐标
    x3, y3  //终点坐标)
Nach dem Login kopieren

Horizontale Textausrichtung:

context.font = "font-style font-variant font-weight font-size font-family";    //css字体样式,默认值:"20px sans-serif"context.fillText(String, x, y, [maxlen]);    //String字符串,和坐标位置,第四个为可选参数,这行文字的最长宽度context.strokeText(String, x, y, [maxlen]);    

font-style: normal    (Default)
            italics   (斜体字)
            oblique   (倾斜字体)

font-variant: normal  (Default)
              small-caps    (小写英文字母变成小的大写字母)

font-weight: normal   (Default)
             lighter
             bold
             bolder             100,200,300,400(normal)             500,600,700(bold)             800,900font-size:  20px (Default)
            2em            150%font-family: 设置多种字体备选,支持@font-face
Nach dem Login kopieren


Vertikale Ausrichtung des Textes:

context.textAlign = left
                    right
                    center
Nach dem Login kopieren


Metriken des Textes:
context.textBaseline =  top
                        middle
                        bottom
                        alphabetic (Default)
                        ideographic
                        hanging
Nach dem Login kopieren


19. Schatten
context.measureText(String).width //获取渲染的字符串的宽度
Nach dem Login kopieren

20. Globale Methode:
context.shadowColor    //阴影颜色context.shadowOffsetX    //阴影的位移值context.shadowOffsetY
context.shadowBlur    //阴影模糊度
Nach dem Login kopieren

21 .Clip-Bereich
context.globalAlpha = 1 (Default)    //全局透明度,默认不透明context.globalCompositeOperation = "source-over" (Default) //绘制的图像在重叠的时候的效果,默认是(source-over)后面绘制的图像覆盖前面绘制的图像"source-atop"    //后面绘制的图像覆盖前面绘制的图像,但后面的图像只显示重叠部分"source-in"    //后面绘制的图像覆盖前面绘制的图像,但只显示重叠部分"source-out"    //只显示后绘制的图像,而且重叠部分被切掉"destination-over"    //前面绘制的图像覆盖后面绘制的图像"destination-atop"    //前面绘制的图像覆盖后面绘制的图像,但前绘制的图像只显示重叠部分"destination-in"    //前面绘制的图像覆盖后面绘制的图像,但只显示重叠部分"destination-out"    //只显示前绘制的图像,而且重叠部分被切掉"lighter"    //重叠部分颜色叠加融合"copy"    //只显示后绘制图像"xor"    //异或,重叠部分被挖空
Nach dem Login kopieren

Methode zum Festlegen des aktuell erstellten Pfads als aktuellen Beschneidungspfad

fillRule
void ctx.clip();void ctx.clip(fillRule);void ctx.clip(path, fillRule);
Nach dem Login kopieren

Dieser Algorithmus bestimmt, ob ein Punkt vorhanden ist Innerhalb des Pfades oder außerhalb des Pfades.

Pfad

Der zu schneidende Path2D-Pfad.

Beispiel:

22. Nicht-Null-Wickelprinzip
ctx.arc(100, 100, 75, 0, Math.PI*2, false);
ctx.clip();
ctx.fillRect(0, 0, 100,100);
Nach dem Login kopieren

Pfadrichtung Anwendung: Hohler Papierschnitteffekt
23. Canvas-Interaktion

24. Erweitern Sie den Kontext von Canvas
context.clearRect(x,y,width,height) //清空指定的区域context.isPointInPath(x,y) //点击检测函数,该点是否在当前规划路径内,当检测点包含在当前或指定的路径内,返回 true;否则返回 false//以下两个是获取鼠标点击在canvas坐标var x = event.clientX - canvas.getBoundingClientRect().left;var y = event.clientY - canvas.getBoundingClientRect().top;
Nach dem Login kopieren

Erweitern Sie die drawStar-Methode auf den Kontext:

25. Canvas-Kompatibilität
CanvasRenderingContext2D.prototype.drawStar = function(){}
Nach dem Login kopieren

Erkennung

Kompatibilitätsprobleme zwischen Canvas und IE6, 7 und 8 Browsern
<canvas id="canvas">当前浏览器不支持Canvas,请更换浏览器再试</canvas>
Nach dem Login kopieren

Einführung in die explorecanvas-Bibliothek :

26. Canvas-Grafikbibliothek: canvasplus || RGraph

https://code.google.com/p/explorecanvas/<!--[if IE]><script type="text/javascript" src="../excanvas.js"></script><![endif]-->
Nach dem Login kopieren

code.google.com/p/canvasplus artisanjs.com

roopons.com.au/wp-content/plugins/viral-optins/js/rgraph

27. Dokumentation der Canvas-API-Schnittstelle:

developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D

Das obige ist der detaillierte Inhalt vonBeispiel-Tutorial für eine HTML5-Canvas-Zeichnung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!