Puis-je mettre un bouton HTML dans le canevas?

Je veux faire les boutons pour le jeu que je fais comme de vrais boutons HTML, mais ils doivent être à l'intérieur de la toile.

Comment pourrais-je faire cela?

30
demandé sur Peter Mortensen 2011-01-25 22:08:31

7 réponses

Étant donné que l'élément canvas a un modèle de contenutransparent , il peut contenir des élémentsfallback qui sont affichés dans le cas où l'élément canvas n'est pas pris en charge. Ils seront Pas affichés si le canevas est pris en charge.

Vous pouvez positionner les éléments HTML par rapport au parent du canevas pour que les boutons "planent" sur le canevas. Un élément de menu pourrait être un élément sémantique approprié pour rendre une liste de contrôles, selon le contexte:

HTML:
<div id="container">
  <canvas id="viewport">
  </canvas>
  <menu id="controls">
  </menu>
</div>
CSS:
#container
{
  height: 400px;
  position: relative;
  width: 400px;
}
#viewport
{
  height: 100%;
  width: 100%;
}
#controls
{
  bottom: 0;
  left: 0;
  position: absolute;
  width: 100%;
}
40
répondu zzzzBov 2014-01-16 22:06:02

Vous pouvez placer le bouton sur le dessus du canvas en donnant à la toile un {[2] } qui est inférieur au z-index du bouton:

<canvas style="z-index:1"></canvas>
<input type="button" style="z-index:2; position:absolute; top:x; left:y" value="test"/>

x et y sont des nombres.

8
répondu Alex 2014-01-10 06:05:47

HTML à l'intérieur du canevas n'est pas possible, mais peut-être que vous pourriez positionner vos éléments absolument de sorte qu'ils "flottent" sur le canevas, mais pas à l'intérieur.

4
répondu sidyll 2011-01-25 19:16:12

Je ne crois pas que vous puissiez 'mettre' du contenu HTML dans une balise canvas. Tout ce que vous y mettez sera réellement affiché si le navigateur ne prend pas en charge <canvas>.

Vous pouvez cependant placer vos boutons absolument au-dessus d'une toile ou rendre des zones dans votre toile qui "ressemblent" à des boutons et gérer les événements vous-même (beaucoup de travail).

4
répondu Paul Spencer 2014-06-01 03:00:58

Une façon d'ajouter un bouton dynamiquement en haut de la toile suit les deux points suivants: 1. Faire zIndex du bouton plus élevé que Toile 2. Positionnez le bouton à l'aide d'un positionnement absolu avec la valeur supérieure et gauche souhaitée

Jsfiddle: https://jsfiddle.net/n2EYw/398/

HTML:

<canvas id="canvas" width="200" height="200">           
 </canvas>

CSS:

canvas {
    border: 1px dotted black;
    background: navy;
}

JavaScript:

var $testButton = $('<input/>').attr({
    type: 'button',
    name: 'btn1',
    value: 'TestButton',
    id: 'testButton',
    style: 'position:absolute; top:50px;left:100px; zindex:2'
});
$('body').append($testButton);
$(document).on("click", "#testButton", function() {
    alert('button clicked');
});
2
répondu Razan Paul 2016-04-06 01:43:03

HTML à l'intérieur de canvas n'est pas possible.
Mais si vous voulez vraiment utiliser des boutons, pourquoi ne pas essayer de positionner les boutons sur le dessus de la toile?

0
répondu gion_13 2011-01-25 21:21:48

Vous pouvez placer un bouton dans le canevas (png, jpg, svg et texte), en utilisant la bibliothèque Canvate. http://www.sakuracode.com/canvate

Voici un échantillon d'un bouton de dragging à l'intérieur du canevas.

container.startDrag();

Https://codepen.io/EiseiKashi/pen/BxNbmj

0
répondu Eese 2018-05-14 11:23:20