【发布时间】:2021-03-10 08:10:15
【问题描述】:
我想做什么
- 在画布图像上设置
background-size:cover-like 效果 - 在调整窗口大小(响应式)时重新绘制画布图像
我尝试了什么
我尝试了以下两种方法。两者都不起作用。
问题
- 图片的纵横比不固定。
- 我不确定,但图像似乎没有在调整窗口大小时重新渲染。
我的代码
function draw() {
// Get <canvas>
const canvas = document.querySelector('#canvas');
// Canvas
const ctx = canvas.getContext('2d');
const cw = canvas.width;
const ch = canvas.height;
// Image
const img = new Image();
img.src = 'https://source.unsplash.com/WLUHO9A_xik/1600x900';
img.onload = function() {
const iw = img.width;
const ih = img.height;
// 'background-size:cover'-like effect
const aspectHeight = ih * (cw / iw);
const heightOffset = ((aspectHeight - ch) / 2) * -1;
ctx.drawImage(img, 0, heightOffset, cw, aspectHeight);
};
}
window.addEventListener('load', draw);
window.addEventListener('resize', draw);
canvas {
display: block;
/* canvas width depends on parent/window width */
width: 90%;
height: 300px;
margin: 0 auto;
border: 1px solid #ddd;
}
<canvas id="canvas"></canvas>
【问题讨论】:
标签: javascript image canvas