In short: no. Canvas is just pixels. You need SVG (or VML on IE) - or something else like Raphaël that takes care of this for you (it uses VML on IE and SVG on everything else).
Now the longer answer: you can do this with a canvas, but then you have to keep track of all your objects and shape yourself and count on which object was clicked, etc., which is probably not what you want . UPDATE: Now there are libraries that can do this for you, for example EaselJS , KineticJS , Paper.js , Fabric.js and some others (see canvas-canvas comparison for more).
Using Raphaël, on the other hand, you write code like this:
var circle = r.circle(50, 50, 40); circle.attr({fill: "red"}); circle.mouseover(function (event) { this.attr({fill: "red"}); });
which is most likely what you want. This is very natural if you are used to working with HTML DOM and events. In addition, it is much more portable - it even works in IE6.
source share