Cropper.js をレスポンシブデザインのページで使用しようとして、Cropper.js のコンテナ(画像を移動したりできる領域)が思ったように動作してくれなくてはまりました。具体的には、ウィンドウ幅を増減させるとコンテナが元画像のアスペクト比を維持せずに伸縮してしまう症状です。ウィンドウ幅が増えても元画像のアスペクト比を維持したままコンテナが伸縮してくれるような動作を想定していました。
調べてみると、以下のページにレスポンシブで Cropper.js を使うサンプルがありました。
https://fengyuanchen.github.io/cropper.js/examples/responsive-container.html
このページのソースコードは以下のような感じでした。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Cropper.js</title>
<link rel="stylesheet" href="../css/cropper.css">
<style>
.container {
margin: 20px auto;
max-width: 640px;
}
img {
width: 100%;
}
</style>
</head>
<body>
<div class="container">
<h1>Cropper with responsive container</h1>
<p>
<button type="button" id="replace">Replace Image</button>
</p>
<div>
<img id="image" src="../images/picture.jpg" alt="Picture">
</div>
</div>
<script src="../js/cropper.js"></script>
<script>
window.addEventListener('DOMContentLoaded', function () {
var image = document.querySelector('#image');
var cropper = new Cropper(image, {
movable: false,
zoomable: false,
rotatable: false,
scalable: false
});
document.getElementById('replace').onclick = function () {
cropper.replace('../images/picture-2.jpg');
};
});
</script>
</body>
</html>
このサンプルと同様に img の style に width: 100%; を指定したら、ウィンドウ幅に従ってアスペクト比を維持しながら拡縮してくれるようになりました。実際に以下のページのツールで利用しました。