2011-01-25 14 views

risposta

39

Dato che il canvas element ha un transparent content model, esso può contenere fallback elementi che vengono visualizzati nel caso in cui l'elemento canvas è supportato. Verranno visualizzati non se la tela è supportata.

È possibile posizionare gli elementi HTML relativi al genitore dell'area di disegno per far sì che i pulsanti "passino" sopra l'area di disegno. Un menu element potrebbe essere un elemento opportunamente semantica per rendere un elenco di controlli, a seconda del contesto:

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%; 
} 
+0

L'uso di 'menu' non è necessario. È possibile visualizzare quasi tutti gli elementi HTML sulla tela in questo modo. –

+3

@ peci1, ho scelto '

' per questo caso perché era semantico, non perché fa qualcosa di speciale per quanto riguarda ''. – zzzzBov

4

HTML all'interno della tela non è possibile, ma forse è possibile posizionare gli elementi in modo assoluto in modo che siano "mobili" sulla tela, ma non al suo interno.

+2

E 'ora, vedere la mia risposta qui http: // StackOverflow.COM/A/12464988/575501. – cburgmer

4

Non credo che si possa "inserire" contenuto HTML all'interno di un tag canvas. Qualsiasi cosa venga inserita, verrà visualizzata se il browser non supporta<canvas>.

È possibile, tuttavia, posizionare i pulsanti su un'area di disegno o un'area di rendering nella tela che "assomigliano" ai pulsanti e gestiscono autonomamente gli eventi (molto lavoro).

+3

Vuoi dire qualunque cosa tu abbia messo dentro canvas _element_ (not tag);) – kangax

+0

kangax è corretto, devo essere più chiaro! –

0

HTML all'interno della tela non è possibile.
Ma se vuoi davvero usare i pulsanti, perché non provi a posizionare i pulsanti sulla parte superiore della tela?

8

Si può mettere il pulsante sulla parte superiore del canvas dando la tela un z-index, che è inferiore alla z-index del pulsante:

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

dove x e y sono numeri.

+1

Ho scoperto che questo ha funzionato in chrome, ma per Firefox ho dovuto dare alla tela uno z-index negativo. – skorulis

2

Un modo per aggiungere dinamicamente pulsante sulla parte superiore della tela segue i due punti successivi: 1. Facendo zIndex del pulsante superiore tela 2. Posizionare il pulsante con posizionamento assoluto con piano desiderato e il valore

sinistra

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'); 
}); 
Problemi correlati