Reputation: 3
I'm making a webpage with a canvas with an image inside, but the image never shows, and I don't find the problem in the code.
var lienzo = document.getElementById("canvas1");
var papel = lienzo.getContext("2d");
var oveja = new Image();
oveja.src ="oveja.jpg"
oveja.addEventListener("load", dibujar());
function dibujar() {
papel.drawImage(oveja, 0, 0);
}
body {
font-family: sans-serif;
background-color: rgb(240, 240, 150);
}
canvas {
background-color: red;
position: relative;
top: 100px;
left: 100px;
}
<!DOCTYPE html>
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<h1>
Mi reto en Canvas
</h1>
<canvas id="canvas1" height="700px" width="700px"></canvas>
<script src="script.js"></script>
</body>
</html>
This is the expected result: 1
But it only draws the red square without the image, it doesn't show any error in the console.
What is wrong in the code?
Upvotes: 0
Views: 105
Reputation: 96
You just need to change dibujar()
to dibujar
. This way you're passing the function itself not the function's return value as an argument.
var lienzo = document.getElementById("canvas1");
var papel = lienzo.getContext("2d");
var oveja = new Image();
oveja.src = "https://i.sstatic.net/5y9mz.png" // Here I changed the image so that the demo works
oveja.addEventListener("load", dibujar);
function dibujar() {
papel.drawImage(oveja, 0, 0);
}
body {
font-family: sans-serif;
background-color: rgb(240, 240, 150);
}
canvas {
background-color: red;
position: relative;
top: 100px;
left: 100px;
}
<!DOCTYPE html>
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<h1>
Mi reto en Canvas
</h1>
<canvas id="canvas1" height="700px" width="700px"></canvas>
<script src="script.js"></script>
</body>
</html>
Upvotes: 1