我在背景图片上方放置了一个画布。当我按下“尝试”按钮时,图像出现在画布中,但它的大小与父对象的大小不同,或与画布的大小不同。我只看到图片的左上方。
父图像和画布的大小相同。
HTML
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="script.js"></script>
</head>
<body>
<div class="bg">
<img src="Assets/Images/background.png" alt="background">
</div>
<section class="content">
<p>Image to use:</p>
<img id="taxi" src="Assets/Images/PV.png" width="250" height="300">
<p>Canvas to fill:</p>
<canvas id="myCanvas" width="250" height="300"
style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>
<p><button onclick="myCanvas()">Try it</button></p>
</section>
</body>
</html>
JS
function myCanvas() {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var img = document.getElementById("taxi");
ctx.drawImage(img,10,10);
}
如何获取它以便画布中的图像与父图像大小相同? 另外,当我第二次按“ Try It”时,如何使图像从画布上消失?
答案 0 :(得分:1)
我遇到了同样的问题,不得不学习艰难的方法。响应式画布和相同纵横比的“画布”并不像人们希望的那么容易。
您需要做什么:
function myCanvas() {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var img = document.getElementById("taxi");
ctx.drawImage(img,10,10, 250, 300);
}
让我解释一下原因。
在您的HTML中,您已手动声明:
width="250" height="300"
因此投影在画布上的图像必须具有相同的尺寸。全部由ctx.drawImage(img,10,10,250,300)函数控制。
fn的第一个参数是引用的数据,可以是视频,图像等。
第二个参数是X轴偏移量,第三个参数是Y轴偏移量(如果不希望偏移,只需传递:ctx.drawImage(img,0,0,250,300);。
在这种情况下,第4个和第5个参数是作为第一个参数传递的参数的大小。
这是一个Codepen,尝试更改参数,看看会发生什么。
https://codepen.io/pen/?editors=1010
PS,您可以向该方法传递更多的参数,但是通常,这就是您所需要的。
只需添加,就可以增加较小的图像以适合Canvas,反之亦然,但是如果您使用HTML属性声明Canvas的大小,并在drawImage fn中使用较小的数字,则不会填充画布。 HTML似乎更具特异性。这可能是好事也可能是坏事,但重要的是要知道。