jQuery - 带缩放的可拖动div

enl*_*loz 10 css jquery jquery-ui zoom jquery-ui-draggable

这是我的代码:

http://jsfiddle.net/652nk/

HTML

<div id="canvas">
    <div id="dragme"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

#canvas {
    width:500px;
    height:250px;
    border:1px solid #444;
    zoom:0.7;
}
#dragme {
    width:100px;
    height:50px;
    background:#f30;
}
Run Code Online (Sandbox Code Playgroud)

JS

$(function(){
    $('#dragme').draggable({containment:'parent'})
})
Run Code Online (Sandbox Code Playgroud)

使用css zoom属性时遇到了一个重大问题.目标可拖动div的位置与光标位置不协调.

有没有干净简单的解决方案?我应该能够动态更改缩放.

tuz*_*uze 21

您无需设置缩放属性.我刚刚将差异添加到由于zoom属性而发生的draggable的位置.希望能帮助到你.

小提琴

http://jsfiddle.net/TqUeS/

JS

var zoom = $('#canvas').css('zoom');
var canvasHeight = $('#canvas').height();
var canvasWidth = $('#canvas').width();

$('#dragme').draggable({
    drag: function(evt,ui)
    {
        // zoom fix
        ui.position.top = Math.round(ui.position.top / zoom);
        ui.position.left = Math.round(ui.position.left / zoom);

        // don't let draggable get outside the canvas
        if (ui.position.left < 0) 
            ui.position.left = 0;
        if (ui.position.left + $(this).width() > canvasWidth)
            ui.position.left = canvasWidth - $(this).width();  
        if (ui.position.top < 0)
            ui.position.top = 0;
        if (ui.position.top + $(this).height() > canvasHeight)
            ui.position.top = canvasHeight - $(this).height();  

    }                 
});
Run Code Online (Sandbox Code Playgroud)


Yus*_*rag 9

上面的解决方案对我来说没有用.所以我找到了自己的.如果其他人也有同样的问题,我想分享它.

var zoom = $('#canvas').css('zoom');    
$('#dragme').draggable({
    drag: function(evt,ui)
    {
         var factor = (1 / zoom) - 1

         ui.position.top += Math.round((ui.position.top - ui.originalPosition.top) * factor)
         ui.position.left += Math.round((ui.position.left - ui.originalPosition.left) * factor)   
    }                 
});
Run Code Online (Sandbox Code Playgroud)