Я работаю над сайтом, на котором пользователь может загрузить изображение, а затем применить к нему различные эффекты (маски, текссты и т.д.). Так вызывается элемент canvas в HTML:
<div>
<div onload="draw();">
<canvas id="canvas" data-girar="0">
<div style="display:none;">
<img onload="draw()" id="imgDisp" src="">
<img id="maskDisp" src="">
</div>
</canvas>
</div>
<div id="text_content"></div>
</div>
Эти два изображения расположены друг на друге, а также div_text_content. Я хочу реализовать простую функцию панорамирования/масштабирования, чтобы все они двигались вместе. Есть ли способ сделать это? Заранее спасибо. Кроме того, здесь находится draw(); функция:
function draw() {
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var newImg = document.getElementById('imgDisp');
var newMsk = document.getElementById('maskDisp');
var viewpanel = document.getElementById('view_panel');
var textcontent = document.getElementById('text_content');
document.getElementById("text_content").innerHTML = "";
canvas.width = 700;
canvas.height = 700;
if (newImg.height > 750 && newImg.width > 750){
viewpanel.width = newImg.width/2;
viewpanel.height = newImg.height/2;
textcontent.style.height = "700px";
textcontent.style.width = "700px";
// Draw image
ctx.drawImage(document.getElementById('imgDisp'),0,0,newImg.width/1.3,newImg.height/1.74);
// Draw frame
ctx.drawImage(document.getElementById('maskDisp'),0,0,newMsk.width/1.3,newMsk.height/1.74);
text_size('1')
}
else if (newImg.height < 500 && newImg.width < 500){{}
viewpanel.width = newImg.width;
viewpanel.height = newImg.height;
canvas.height = 240;
canvas.width = 240;
textcontent.style.height = "240px";
textcontent.style.width = "240px";
// Draw image
ctx.drawImage(document.getElementById('imgDisp'),0,0,newImg.width*2,newImg.height*2);
// Draw frame
ctx.drawImage(document.getElementById('maskDisp'),0,0,newMsk.width*2,newMsk.height*2);
text_size('2')
}
}
Здесь скопируйте/вставьте часть приложения для рисования, которое я сделал. Пользователь устанавливает уровень масштабирования (входной идентификатор "масштабирования") и используется для всех вычислений. Независимо от того, какой процент масштабирования вы хотите отменить (1/n), и поскольку мой помечен как%, я использую 100/n. Мои возможности приложения панорамирования поступают из внешнего div, который overflow: auto
. Также я не помещаю никаких элементов внутри холстов; на холсте есть фоновое изображение, а рисунки - наложения, которые можно сохранить как отдельные png-изображения. Я не уверен, какой эффект будет иметь место в вашей ситуации.
$('canvas').mousemove(function(e) {
// x and y are globals, x inits to null, mousedown sets x, mouseup returns x to null
if (x==null) return;
x = (100/$('#zoom').val())*(e.pageX - $(this).offset().left);
y = (100/$('#zoom').val())*(e.pageY - $(this).offset().top);
});