I am using WebGL to render an image and put it on a canvas. I am wondering is it possible to place an SVG element on top of that canvas?
I actually can move the vector image I draw on top of canvas manually. So I suppose there should be a way to do that.
Canvas draws 2D graphics, on the fly (with a JavaScript). SVG is XML based, which means that every element is available within the SVG DOM. You can attach JavaScript event handlers for an element. In SVG, each drawn shape is remembered as an object.
To draw SVG onto canvas, you need to use SVG image. Firstly, use the <foreignObject> element which contains the HTML. After that, you need to draw the SVG image into the canvas.
The<canvas> element is a container for graphics. SVG gives better performance with smaller number of objects or larger surface. Canvas gives better performance with smaller surface or larger number of objects. SVG is vector based and composed of shapes.
3. How to use inline SVG images. SVG images can be written directly into the HTML document using the <svg> </svg> tag.
Same as you place any two elements on top of each other? Give them both a parent with either position:relative;
or position:absolute;
. Set the second one (or both) to position:absolute; left: 0px; top:0px; z-index: 2;
<div style="position: relative;">
<canvas id="c" width="300" height="300"></canvas>
<img src="http://s.cdpn.io/3/kiwi.svg"
style="position: absolute;
left: 0px;
top:0px;
z-index: 2;
width: 300px;
" />
</div>
Example:
var canvas = document.getElementById("c");
var ctx = canvas.getContext("2d");
function rand(r) {
return Math.floor(Math.random() * r);
}
function draw() {
ctx.fillStyle ="rgb(" +
rand(256) + "," +
rand(256) + "," +
rand(256) + ")";
ctx.fillRect(
-150 + rand(canvas.width),
-150 + rand(canvas.height),
rand(300),
rand(300));
requestAnimationFrame(draw);
}
draw();
<div style="position: relative;">
<canvas id="c" width="300" height="300"></canvas>
<img src="http://s.cdpn.io/3/kiwi.svg"
style="position: absolute;
left: 0px;
top:0px;
z-index: 2;
width: 300px;
" />
</div>
This seems like it's already been answered but in the opposite way here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With