前提・実現したいこと
読み込んだ画像をinput type="range"で拡大・縮小の操作を中央表示で行いたいです。
現状、左上始点での拡大・縮小まではできたのですが、drawImageの部分を400,250などにしても
始点が中央になるだけで拡大自体は右下に向かって拡大されてしまいます。
どういった記載をすれば対応可能か知恵をいただけると助かります。
該当のソースコード
HTML
1<div style="width:250px; float:left; margin-right:15px;"> 2<div class="slider"> 3 <p>拡大・縮小</p> 4 <input id="renz-slider" type="range"> 5</div> 6</div> 7<div style="width:800px; float:left; background-color:#aaa;" id="image"></div>
javascript
1const canvas = document.createElement('canvas'); 2const ctx = canvas.getContext('2d'); 3document.getElementById('image').appendChild(canvas); 4 5const img = new Image(); 6img.src = 'https://1.bp.blogspot.com/-s7wD--x4LBo/WUJZO318J0I/AAAAAAABE1k/cLyYpUhHxzou8EfHWbcd02LpnTfHU006gCLcBGAs/s1600/logo_sml.png'; 7img.onload = () => { 8 // Canvasサイズを指定。 9 canvas.height = 450; 10 canvas.width = 800; 11 // Canvasに上に入れたURLの画像を描画する。canvasサイズ-画像サイズ/2で中央に表示を指定。 12 ctx.drawImage(img, (canvas.width - img.width) / 2, (canvas.height - img.height) / 2); 13}; 14img.onerror = () => { console.log('画像の読み込み失敗'); }; 15 16 17// 拡大・縮小の作動をする部分。 18const slider = document.getElementById('renz-slider'); 19// 通常サイズ、倍率の最小・最大値、スライダーの段階 20slider.value = 1; 21slider.min = 0.5; 22slider.max = 3; 23slider.step = 'any'; 24// スライダーが動いたら拡大・縮小して再描画する 25slider.addEventListener('input', e => { 26 console.log('レンズ焦点距離のスライダーが読み込まれました!'); 27 // 一旦クリア 28 ctx.clearRect(0, 0, canvas.width, canvas.height); 29 // 倍率変更 30 const scale = e.target.value; 31 ctx.scale(scale, scale); 32 // 再描画 33 ctx.drawImage(img, 0, 0, canvas.width, canvas.height); 34 ctx.scale(1 / scale, 1 / scale); 35});
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/10/21 23:42