I have asked a question before: How can I control z-index of canvas objects? and we reached to a solution that may not be a good one for complicated situations.
I found that canvas doesn’t have a z-index system, but a simple ordered drawing one. Now there is a new question: how can I simulate z-index system to make this problem fixed in complicated situations?
The good answer can solve a big problem.
It’s not that canvas doesn’t have a z-index, it’s that canvas doesn’t keep objects drawn contrary to the HTML page. It just draws on the pixel matrix.
There are basically two types of drawing models :
The Canvas model is a bitmap one. To have objects drawn over other ones, you must draw them after. This means you must manage what you draw.
The canvas model is very fast, but if you want a drawing system managing your objects, maybe you need SVG instead.
If you want to use a canvas, then the best is to keep what you draw as objects.
Here’s an example I just made : I keep a square list and every second I randomize their zindex and redraw them :
Demonstration
The idea is that the square array is sorted accordingly to zindex. This could be easily extended to other types of objects.