Maison > interface Web > Tutoriel H5 > Super stratégie pour dessiner des rectangles à l'aide des conseils du didacticiel HTML5 Canvas API_html5

Super stratégie pour dessiner des rectangles à l'aide des conseils du didacticiel HTML5 Canvas API_html5

WBOY
Libérer: 2016-05-16 15:45:35
original
1935 Les gens l'ont consulté

Utilisez closePath() pour fermer la forme
Nous dessinons d'abord un rectangle en utilisant la méthode la plus courante.

Code JavaScriptCopier le contenu dans le presse-papiers
  1.   
  2. "fr">   
  3.   
  4.     "UTF-8">   
  5.        
  6.   
  7.   
  8.   
  9. "zh">   
  10.   
  11.     "UTF-8">   
  12.     绘制矩形   
  13.   
  14.   
  15. "toile-warp">   
  16.     "canvas" style="border : 1px solid #aaaaaa; affichage : bloc ; marge : 50px auto ;">   
  17.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
  18.        
  
  •   
  • <script>   </span></li> <li> <span>    window.onload = </span><span class="keyword">fonction</span><span>(){   </span> </li> <li class="alt"> <span>        </span><span class="keyword">var</span><span> canvas = document.getElementById(</span><span class="string">"canvas"</span><span>);   </span> </li> <li><span>        canvas.width = 800 ;   </span></li> <li class="alt"><span>        canvas.height = 600 ;   </span></li> <li> <span>        </span><span class="keyword">var</span><span> context = canvas.getContext(</span><span class="string">"2d"</span><span>);   </span> </li> <li class="alt"><span>  </span></li> <li><span>        context.beginPath();   </span></li> <li class="alt"><span>        context.moveTo(150,50);   </span></li> <li><span>        context.lineTo(650,50);   </span></li> <li class="alt"><span>        context.lineTo(650 550);   </span></li> <li><span>        context.lineTo(150 550);   </span></li> <li class="alt"> <span>        context.lineTo(150,50);     </span><span class="comment">//绘制最后一笔使图像闭合 </span><span>  </span> </li> <li><span>        context.lineWidth = 5;   </span></li> <li class="alt"> <span>        context.StrokeStyle = </span><span class="string">"noir"</span><span>;   </span> </li> <li><span>        context.Stroke();   </span></li> <li class="alt"><span>  </span></li> <li><span>    }   </span></li> <li class="alt"><span></script>   
  •   
  •   
  •   
  •   
  • Résultat de l'exécution :
    2016321105129852.jpg (850×500)

    À première vue, il n'y a rien de mal à cela, mais les chaussures pour enfants ayant une bonne vue ont découvert qu'il y avait un problème lorsque le dernier coup est fermé, ce qui entraîne un espace dans le coin supérieur gauche. Cette situation est causée par la définition de lineWidth. Si la valeur par défaut est 1 course, il n'y aura aucun problème. Mais plus les traits sont larges et les lignes plus larges, plus cet écart sera évident. Alors comment éviter cette situation ?
    Le titre l'a déjà gâché, utilisez ClothPath() pour fermer la forme.

    Code JavaScriptCopier le contenu dans le presse-papiers
    1. "zh">
    2. "UTF-8"
    3. > Dessinez un rectangle
    4. "toile-warp"
    5. >
    6. "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto ;">
    7. Votre navigateur ne prend pas en charge Canvas ? ! Changez-le vite ! !
  • <script> </li> <li> <span></span> window.onload = </li> <li class="alt">fonction<span></span>(){ </li> <li> <span></span> </li> <li class="alt">var<span></span> canvas = document.getElementById(<span class="keyword"></span>"canvas"<span></span> </li> <li>); <span></span> toile.width = 800 <span class="keyword"></span> <span></span> toile.hauteur = 600 <span class="string"></span> <span></span> </li> <li class="alt">var<span></span> context = canvas.getContext(</li> <li>"2d"<span></span> </li> <li class="alt">); <span></span> <span class="keyword"></span> <span></span> context.beginPath(); <span class="string"></span> <span></span>context.moveTo(150,50); </li> <li> <span></span> context.lineTo(650,50); </li> <li class="alt"> <span></span>context.lineTo(650,550); </li> <li> <span></span>context.lineTo(150,550); </li> <li class="alt"> <span></span> context.lineTo(150,50); </li> <li>//Vous n'avez pas besoin de dessiner le dernier trait <span></span> </li> <li class="alt"> <span></span> context.closePath(); </li> <li>//Utilisez closePath() pour fermer le graphique <span></span> <span class="comment"></span> <span></span> </li> <li class="alt"> <span></span> context.lineWidth = 5; <span class="comment"></span> <span></span> context.StrokeStyle = </li> <li>"noir"<span></span> </li> <li class="alt"> <span></span> contexte.AVC(); </li> <li> <span></span> <span class="string"></span> <span></span> } </li> <li class="alt"> <span></span></script>
  • Résultat de l'exécution :
    2016321105204703.jpg (850×500)

    Dans cet exemple, combiné avec l'explication de la leçon précédente, nous savons que lorsque nous dessinons un chemin, nous devons envelopper le chemin prévu avec startPath() et closePath(). Bien sûr, vous n'avez pas besoin de dessiner le dernier trait, utilisez simplement closePath() directement, et il le fermera automatiquement pour vous. (Donc si vous ne voulez pas dessiner une forme fermée, vous ne pouvez pas utiliser closePath())

    Colorez le rectangle
    Nous allons introduire ici une méthode fill() qui est tout aussi importante que Stroke(). Tout comme le trait original, avant de remplir, il faut d'abord utiliser l'attribut fillStyle pour sélectionner la couleur à remplir.
    Par exemple, si on veut colorer le rectangle au dessus en jaune, on peut l'écrire comme ceci.

    Code JavaScriptCopier le contenu dans le presse-papiers
    1.   
    2. "zh">   
    3.   
    4.     "UTF-8">   
    5.     绘制矩形   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  • <script>   </span></li> <li class="alt"> <span>    window.onload = </span><span class="keyword">fonction</span><span>(){   </span> </li> <li> <span>        </span><span class="keyword">var</span><span> canvas = document.getElementById(</span><span class="string">"canvas"</span><span>);   </span> </li> <li class="alt"><span>        canvas.width = 800 ;   </span></li> <li><span>        canvas.height = 600 ;   </span></li> <li class="alt"> <span>        </span><span class="keyword">var</span><span> context = canvas.getContext(</span><span class="string">"2d"</span><span>);   </span> </li> <li><span>  </span></li> <li class="alt"><span>        context.beginPath();   </span></li> <li><span>        context.moveTo(150,50);   </span></li> <li class="alt"><span>        context.lineTo(650,50);   </span></li> <li><span>        context.lineTo(650 550);   </span></li> <li class="alt"><span>        context.lineTo(150 550);   </span></li> <li> <span>        context.lineTo(150,50);     </span><span class="comment">//最后一笔可以不画 </span><span>  </span> </li> <li class="alt"> <span>        context.closePath();        </span><span class="comment">//使用closePath()闭合图形 </span><span>  </span> </li> <li><span>  </span></li> <li class="alt"> <span>        context.fillStyle = </span><span class="string">"jaune"</span><span>;   </span><span class="comment">//选择油漆桶的颜色 </span><span>  </span> </li> <li><span>        context.lineWidth = 5;   </span></li> <li class="alt"> <span>        context.StrokeStyle = </span><span class="string">"noir"</span><span>;   </span> </li> <li><span>  </span></li> <li class="alt"> <span>        context.fill();                 </span><span class="comment">//确定填充 </span><span>  </span> </li> <li><span>        context.Stroke();   </span></li> <li class="alt"><span>  </span></li> <li><span>    }   </span></li> <li class="alt"><span></script>   
  •   
  •   
  •   
  •   
  •   
  • Résultat de l'exécution :
    2016321105516457.jpg (850×500)

    Ce qu'il faut noter ici, c'est une bonne pratique de codage. Parce que, comme mentionné précédemment, Canvas est un dessin basé sur un état et le dessin n'est déterminé que lorsque Stroke() et Fill() sont appelés. Nous allons donc mettre ces deux lignes de code à la fin, et le reste du code de paramétrage d'état avant elles, pour séparer le paramétrage d'état du code qui détermine le tirage. Améliorer la lisibilité du code.


    Méthode de dessin encapsulé
    Vous devez avoir découvert que dessiner un rectangle implique en fait quatre traits comme celui-ci. Chaque fois que nous utilisons cette méthode stupide pour dessiner un rectangle, nous devons les dessiner. quatre coups. Combien de problèmes si nous devons dépenser 10 rectangles ? 100 ? 1 000 ? S'il est écrit ainsi, le code sera gonflé et la réutilisabilité sera très faible. Ici, nous pouvons utiliser JavaScript pour encapsuler ces méthodes. Nous savons qu'un rectangle peut être déterminé de manière unique par les coordonnées de son coin supérieur gauche ainsi que par sa longueur et sa largeur.
    Fonction JavaScript
    Nous introduisons ici les fonctions JavaScript. Si vous avez des connaissances de base, vous pouvez sauter cette section et passer directement aux sections suivantes.
    Les appels de déclaration de fonction des langages JavaScript et ActionScript sont les plus simples parmi les langages de programmation.
    Le rôle de la fonction
    Le rôle de la fonction est d'écrire du code une fois puis de réutiliser ce code à plusieurs reprises. Par exemple : nous voulons compléter la fonction de plusieurs ensembles de sommes.

    Code JavaScriptCopier le contenu dans le presse-papiers
    1. var somme
    2. somme = 3 2
    3. alerte (somme);
    4. somme=7 8 ;
    5. alerte (somme);
    6. .... //Répétez deux lignes de code  

    Si vous souhaitez implémenter la somme de 8 groupes de nombres, vous aurez besoin de 16 lignes de code. Plus vous en implémentez, plus vous aurez besoin de lignes de code. Par conséquent, nous pouvons placer le bloc de code qui exécute une fonction spécifique dans une fonction et appeler cette fonction directement, ce qui évite d'avoir à saisir à plusieurs reprises une grande quantité de code.
    Utilisez les fonctions pour compléter :

    Code JavaScriptCopier le contenu dans le presse-papiers
    1. fonction add2(a,b){
    2. somme = a b
    3. alerte(somme);
    4. } // Vous ne devez l'écrire qu'une seule fois
    5. ajouter2(3,2);
    6. ajouter2(7,8);
    7. .... //Appelez simplement la fonction  

    Définir une fonction
    Comment définir une fonction ? Jetez un œil au format ci-dessous :

    Code JavaScriptCopier le contenu dans le presse-papiers
    1. fonction Nom de la fonction ( )
    2. {
    3. Corps de fonction
    4. }

    function est le mot-clé qui définit une fonction, "function name" est le nom que vous donnez à la fonction et "function body" est remplacé par le code qui complète la fonction spécifique.
    Appel de fonction
    Une fois qu'une fonction est définie, elle ne peut pas être exécutée automatiquement. Vous devez l'appeler et écrire le nom de la fonction directement à la position requise. Il existe généralement deux manières :

    Cas 1 : Appelé dans la balise <script> </p> <div class="codeText"> <div class="codeHead"> <span class="lantxt">Code JavaScript</span><span style="CURSOR: pointer" class="copyCodeText" onclick="copyIdText('code_6911')">Copier le contenu dans le presse-papiers</span> </div> <div id="code_6911"> <ol class="dp-c"> <li class="alt"><span><span><script> </span></span></li> <li>fonction<span></span> tcon() <span class="keyword"></span> <span></span>{ </li> <li class="alt"> <span></span> alert(</li> <li>"Félicitations pour l'apprentissage de l'appel de fonction!"<span></span> <span class="string"></span>); <span></span>} </li> <li class="alt"> <span></span>tcon(); </li> <li>//Appelez la fonction et écrivez directement le nom de la fonction. <span></span> <span class="comment"></span> <span></span></script>

  • Deuxième cas : Appelé dans un fichier HTML, comme appeler une fonction définie après avoir cliqué sur un bouton.
    Cette situation sera utilisée plus tard.

    La fonction

    avec paramètres a le format suivant :




    Code JavaScript
    Copier le contenu dans le presse-papiers
      fonction
    1. Nom de la fonction (paramètre 1, paramètre 2) {
    2. Code fonction
    3. }
    Remarque : il peut y avoir plusieurs paramètres, augmentez ou diminuez le nombre de paramètres selon vos besoins. Les paramètres sont séparés par (virgule,).
    Selon ce format, la fonction permettant d'implémenter la somme de deux nombres quelconques doit s'écrire :



    Code JavaScript
    Copier le contenu dans le presse-papiers
      fonction
    1. add2(x,y) {
    2. somme = x y
    3. document.write(somme);
    4. }
    x et y sont les deux paramètres de la fonction. Lors de l'appel de la fonction, nous pouvons transmettre les deux ajouts réels à la fonction via ces deux paramètres.
    Par exemple, add2(3,4) trouvera la somme de 3 4, et add2(60,20) trouvera la somme de 60 et 20.
    Fonction de valeur de retour




    Code JavaScript
    Copier le contenu dans le presse-papiers
      fonction
    1. add2(x,y) {
    2. somme = x y
    3. return somme //Valeur de la fonction de retour, la valeur après le retour est appelée la valeur de retour. }
    Le retour ici est le même que dans d'autres langages, mais dans les langages faiblement typés tels que JS ou AS, le type de valeur de retour n'a pas besoin d'être écrit dans la déclaration de fonction.
    À ce stade, nous avons également systématiquement parlé des fonctions JavaScript. Revenons au sujet~

    On peut aussi encapsuler notre rectangle, le code est le suivant :



    Code JavaScript
    Copier le contenu dans le presse-papiers
    1.   
    2. "zh">   
    3.   
    4.     "UTF-8">   
    5.     封装绘制矩形方法   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  • <script>   </span></li> <li class="alt"> <span>    window.onload = </span><span class="keyword">fonction</span><span>(){   </span> </li> <li> <span>        </span><span class="keyword">var</span><span> canvas = document.getElementById(</span><span class="string">"canvas"</span><span>);   </span> </li> <li class="alt"><span>        canvas.width = 800 ;   </span></li> <li><span>        canvas.height = 600 ;   </span></li> <li class="alt"> <span>        </span><span class="keyword">var</span><span> context = canvas.getContext(</span><span class="string">"2d"</span><span>);   </span> </li> <li><span>  </span></li> <li class="alt"> <span>        drawRect(context, 150, 50, 50, 50, </span><span class="string">"rouge"</span><span>, 5, </span><span class="string">"bleu"</span><span>);   </span> </li> <li> <span>        drawRect(context, 250, 50, 50, 50, </span><span class="string">"vert"</span><span>, 5, </span><span class="string">"rouge"</span><span>);   </span> </li> <li class="alt"> <span>        drawRect(context, 350, 50, 50, 50, </span><span class="string">"jaune"</span><span>, 5, </span><span class="string">"noir"</span><span>);   </span> </li> <li><span>    }   </span></li> <li class="alt"><span>  </span></li> <li> <span>    </span><span class="keyword">fonction</span><span> drawRect(cxt, x, y, width, height, fillColor, borderWidth, borderColor){   </span> </li> <li class="alt"><span>        cxt.beginPath();   </span></li> <li><span>        cxt.moveTo(x, y);   </span></li> <li class="alt"><span>        cxt.lineTo(x   width, y);   </span></li> <li><span>        cxt.lineTo(x   largeur, y   hauteur);   </span></li> <li class="alt"><span>        cxt.lineTo(x, y   hauteur);   </span></li> <li><span>        cxt.lineTo(x, y);   </span></li> <li class="alt"><span>        cxt.closePath();   </span></li> <li><span>  </span></li> <li class="alt"><span>        cxt.lineWidth = borderWidth;   </span></li> <li><span>        cxt.StrokeStyle = borderColor;   </span></li> <li class="alt"><span>        cxt.fillStyle = fillColor;   </span></li> <li><span>  </span></li> <li class="alt"><span>        cxt.fill();   </span></li> <li><span>        cxt.Stroke();   </span></li> <li class="alt"><span>    }   </span></li> <li><span></script>   
  •   
  •   
  •   
  •   
  • 运行结果:
    2016321105735875.jpg (850×500)

    使用rect()方法绘制矩形
    犹豫绘制矩形是常用的方法,所以在Canvas API中已经帮我们封装Il s'agit d'un rect().方法接收4个参数x, y, largeur, hauteur,实际调用时也就是

    Code JavaScript复制内容到剪贴板
    1. context.rect(x,y,largeur,hauteur);

    Sur cette base, optimisons tout de suite la méthode d'encapsulation.

    Code JavaScriptCopier le contenu dans le presse-papiers
    1. fonction drawRect(cxt, x, y, width, height, fillColor, borderWidth, borderColor){
    2. cxt.beginPath();
    3. cxt.rect(x, y, largeur, hauteur
    4. //cxt.closePath(); Vous n'avez pas besoin de closePath()
    5. cxt.lineWidth = borderWidth;
    6. cxt.StrokeStyle = borderColor;
    7. cxt.fillStyle = fillColor
    8. cxt.fill();
    9. cxt.Stroke();
    10. }

    Appelez la méthode d'encapsulation et dessinez une image magique
    Créez une image magique~
    2016321105759647.jpg (500×375)

    D'accord, utilisons-le pour effectuer des interventions chirurgicales, pratiquer nos mains et bouger les muscles et les os comme nous venons de l'emballer.

    Code JavaScriptCopier le contenu dans le presse-papiers
    1.   
    2. "zh">   
    3.   
    4.     "UTF-8">   
    5.     绘制魔性图形   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  • <script>   </span></li> <li class="alt"> <span>    window.onload = </span><span class="keyword">fonction</span><span>(){   </span> </li> <li> <span>        </span><span class="keyword">var</span><span> canvas = document.getElementById(</span><span class="string">"canvas"</span><span>);   </span> </li> <li class="alt"><span>        canvas.width = 800 ;   </span></li> <li><span>        canvas.height = 600 ;   </span></li> <li class="alt"> <span>        </span><span class="keyword">var</span><span> context = canvas.getContext(</span><span class="string">"2d"</span><span>);   </span> </li> <li><span>  </span></li> <li class="alt"><span>        context.beginPath();   </span></li> <li><span>        context.rect(0, 0, 800, 600);   </span></li> <li class="alt"> <span>        context.fillStyle = </span><span class="string">"#AA9033"</span><span>;   </span> </li> <li><span>  </span></li> <li class="alt"><span>        context.fill();   </span></li> <li><span>  </span></li> <li class="alt"><span>        context.beginPath();   </span></li> <li> <span>        </span><span class="keyword">pour</span><span>(</span><span class="keyword">var</span><span> i=0; i<=20; i ){   </span> </li> <li class="alt"><span>            drawWhiteRect(context, 200   10 * i, 100   10 * i, 400 - 20 * i, 400 - 20 * i);   </span></li> <li><span>            drawBlackRect(context, 205   10 * i, 105   10 * i, 390 - 20 * i, 390 - 20 * i);   </span></li> <li class="alt"><span>        }   </span></li> <li><span>  </span></li> <li class="alt"><span>        context.beginPath();   </span></li> <li><span>        context.rect(395, 295, 5, 5);   </span></li> <li class="alt"> <span>        context.fillStyle = </span><span class="string">"noir"</span><span>;   </span> </li> <li><span>        context.lineWidth = 5;   </span></li> <li class="alt"><span>  </span></li> <li><span>        context.fill();   </span></li> <li class="alt"><span>        context.Stroke();   </span></li> <li><span>    }   </span></li> <li class="alt"><span>  </span></li> <li> <span>    </span><span class="keyword">fonction</span><span> drawBlackRect(cxt, x, y, width, height){   </span> </li> <li class="alt"><span>        cxt.beginPath();   </span></li> <li><span>        cxt.rect(x, y, largeur, hauteur);   </span></li> <li class="alt"><span>  </span></li> <li><span>        cxt.lineWidth = 5;   </span></li> <li class="alt"> <span>        cxt.StrokeStyle = </span><span class="string">"noir"</span><span>;   </span> </li> <li><span>  </span></li> <li class="alt"><span>        cxt.Stroke();   </span></li> <li><span>    }</span></li> <li class="alt"><span> </span></li> <li> <span> </span><span class="keyword">fonction</span><span> drawWhiteRect(cxt, x, y, width, height){ </span> </li> <li class="alt"><span> cxt.beginPath(); </span></li> <li><span> cxt.rect(x, y, largeur, hauteur </span></li> <li class="alt"><span> </span></li> <li><span> cxt.lineWidth = 5; </span></li> <li class="alt"> <span> cxt.StrokeStyle = </span><span class="string">"blanc"</span><span> </span> </li>; <li><span> </span></li> <li class="alt"><span> cxt.Stroke(); </span></li> <li><span> } </span></li> <li class="alt"><span></script>
  • Résultat de l'exécution :

    N'est-ce pas très magique ? N'est-ce pas très cool ? Je ne prendrai pas le temps d'expliquer ce code. Vous pouvez y réfléchir après le cours, ou vous pouvez essayer d'utiliser les connaissances que vous avez acquises pour dessiner une image sympa. Cette leçon a beaucoup de contenu. En fait, elle ne présente que quatre propriétés et méthodes : closePath(), fillStyle, fill(), rect() et une explication étendue des fonctions JavaScript.
    2016321105841741.jpg (850×500)

    Canvas obtient un effet de coin arrondi d'image

    Cette règle s'applique aux graphiques réguliers ou irréguliers dessinés par diverses toiles.

    La clé pour obtenir des coins arrondis dans Canvas est d'utiliser le "remplissage de texture".
    Il existe une méthode appelée createPattern dans Canvas, qui peut convertir des éléments d'image de tailles connues en objets de texture à remplir.

    Par exemple, si vous implémentez l'effet circulaire d'une image nommée test.jpg d'une taille de 100px * 100px, le code JS principal est le suivant :

    Code JavaScript

    Copier le contenu dans le presse-papiers
    // élément toile, élément image
    1. var
    2. canvas = document.querySelector("#canvas"), image = nouveau Image();
    3. var
    4. context = canvas.getContext("2d" );
    5. image.onload =
    6. fonction
    7. () {
    8. // Créer une texture d'image
    9.  
    10. var
    11. pattern = context.createPattern(image, "no-repeat"); 
    12. //Dessine un cercle
    13. context.arc(50, 50, 50, 0, 2 * Math.PI
    14. // Remplissez le cercle dessiné
    15. context.fillStyle = motif
    16. context.fill();
    17. };
    18. image.src = "test.jpg"
    19. ;

      Faites simplement en sorte que la valeur de l'attribut fillStyle du contexte Canvas soit égale à cet objet de texture.

      L'API de dessin de rectangle fournie avec Canvas n'a pas d'attributs de coins arrondis. Par conséquent, le rectangle arrondi de la démo utilise une méthode personnalisée. J'ai jeté un coup d'œil rapide et j'ai trouvé qu'il était un peu délicat d'obtenir différentes tailles de congé dans les directions verticale et horizontale. Pour les besoins de la démonstration, je n'ai pas fait de grands efforts, donc les congés dans la démo étaient symétriques.
      2016321105911393.png (319×314)

    Étiquettes associées:
    source:php.cn
    Article précédent:HTML5 implémente plusieurs fonctions de téléchargement d'images_compétences du didacticiel HTML5 Article suivant:Code d'effets spéciaux d'animation de compte à rebours de la barre de progression HTML5 CSS3 [recommandé] Compétences du didacticiel _html5
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Derniers articles par auteur
    Derniers numéros
    Rubriques connexes
    Plus>
    Recommandations populaires
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal