Nie jest tak, że płótno nie ma indeksu Z, ponieważ płótno nie powoduje, że obiekty są rysowane w przeciwieństwie do strony HTML. Po prostu rysuje na matrycy pikseli.
Istnieją dwa typy modeli rysunek:
- nich obiektów (zwykle): obiekty wektorowe są przechowywane i zarządzane przez silnik. Zwykle można je usunąć lub zmienić. Mają z-index
- bitmapy: nie ma żadnych obiektów. Po prostu zmieniasz matrycę pikselową
Model Canvas to mapa bitowa. Aby obiekty były rysowane nad innymi, musisz narysować je po po. Oznacza to, że musisz zarządzać tym, co narysujesz.
Model canvas jest bardzo szybki, ale jeśli chcesz, aby system rysunkowy zarządzał Twoimi obiektami, może potrzebujesz zamiast tego SVG.
Jeśli chcesz użyć płótna, najlepiej zachować to, co rysujesz jako obiekty. Oto przykład Zrobiłem: Trzymam kwadratowy listę i każdą sekundę I losowo ich zindex i przerysować je:
var c = document.getElementById('c').getContext('2d');
function Square(x, y, s, color) {
this.x = x; this.y = y; this.s = s; this.color = color;
this.zindex=0;
}
Square.prototype.draw = function(c) {
c.fillStyle = this.color;
c.fillRect(this.x, this.y, this.s, this.s);
}
var squares = [
new Square(10, 10, 50, 'blue'), new Square(40, 10, 40, 'red'), new Square(30, 50, 30, 'green'),
new Square(60, 30, 40, '#111'), new Square(0, 30, 20, '#444'), new Square(70, 00, 40, '#999')
];
function draw() {
c.fillStyle = "white";
c.fillRect(0, 0, 1000, 500);
for (var i=0; i<squares.length; i++) squares[i].draw(c);
}
setInterval(function(){
// give all squares a random z-index
squares.forEach(function(v){v.zindex=Math.random()});
// sort the list accordingly to zindex
squares.sort(function(a,b){return a.zindex-b.zindex});
draw();
}, 1000);
Demonstration
Chodzi o to, że kwadrat tablica jest odpowiednio klasyfikowane do zindex . Można to łatwo rozszerzyć na inne typy obiektów.
Cóż, możesz użyć biblioteki takiej jak kineticJS (obsługuje między innymi indeks Z). Zajrzyj tutaj http://www.html5canvastutorials.com/kineticjs/html5-canvas-shape-layering-with-kineticjs/ – ppsreejith
Tak, używam kineticJS w niektórych przypadkach.Próbuję znaleźć, jak mogę to zrobić sam. – JalalJaberi