缩放,拖动和旋转时的图像定位

格伦·罗布森

我正在编写一些代码来处理图像。我有90%的工作正常,但是遇到了一个虫子,我不得不拔掉头发!所以我有两个滑块。左滑块将旋转,右滑块将缩放(缩放)。您也可以拖动图像以定位它。

是一个特定的序列,将导致在缩放图像时跳转。顺序是:

旋转,缩放,旋转,缩放,拖动,缩放。

在最终比例下,您将能够看到图像跳出位置。这是,但我越来越。

我在下面添加了一些代码,完整的代码可以在jsfiddle中进行测试

拖:

// Drag Handler
$('#posUsrImgWrap').draggable({
    drag:function(event, ui){
        var il = ui.position.left;
        var it = ui.position.top;
        var iw = $(this).width();
        var ih = $(this).height();
        $('#posUserImg').css({'top':it+'px','left':il+'px'});
        dragged = true;
        zc = 0;
    },
    stop:function(){
        ixz = $('#posUserImg').position().left;
        iyz = $('#posUserImg').position().top;
        if(rotated){
            if(!zoomed){
                rx=orx*zv;
                ry=ory*zv;
            }
            ixz=ixz+rx;
            iyz=iyz+ry;
        }
        rxz=ixz;
        ryz=iyz;
        zoomed=false;
        rd=true;
    }
});

旋转:

$( "#slider-vertical" ).show().slider({
    orientation: "vertical",
    min: -180,
    max: 180,
    value: sv,
    slide: function( event, ui ) {
        var rv = ui.value; // Rotate Value

        $('#posUserImg, #posUsrImgWrap').rotate(rv);
        $('#rVal').val(rv);
    },
    stop:function(){
        rx=((rxz - $('#posUserImg').position().left));
        ry=((ryz - $('#posUserImg').position().top));
        orx=rx;
        ory=ry;
        rzv=zv;
        rotated=true;
    }
});

规模:

$( "#slider-vertical-zoom" ).show().slider({
        orientation: "vertical",
        min: -90,
        max: 150,
        step: 5,
        value: szv,
        start:function(){
            czv = (1+ $(this).slider("value")/100);
        },
        slide: function( event, ui ) {
            zv = (1+ ui.value/100); // Zoom Value
            var nx = 0;
            var ny = 0;

            var ozv =  (1+ parseInt($('#zVal').val())/100);

            nzo = calculateAspectRatioFit(iwz, ihz, iwz*(ozv), ihz*(ozv));

            if (dragged && zc == 0){
                var wt = Math.abs(iwz - nzo.width);
                var ht = Math.abs(ihz - nzo.height);
                if (czv < 1){
                    ixz = ixz-(wt/2);
                    iyz = iyz-(ht/2);
                } else {
                    ixz = ixz+(wt/2);
                    iyz = iyz+(ht/2);
                }
            }

            nzo = calculateAspectRatioFit(iwz, ihz, iwz*(zv), ihz*(zv));

            $('#posUserImg, #posUsrImgWrap').width(nzo.width).height(nzo.height);
            var wd = Math.abs(iwz - nzo.width);
            var hd = Math.abs(ihz - nzo.height);

            if (zv < 1){
                nx = (ixz+(wd/2));
                ny = (iyz+(hd/2));
                $('#posUserImg, #posUsrImgWrap').css({'left':nx+'px','top':ny+'px'});
            } else {
                nx = (ixz-(wd/2));
                ny = (iyz-(hd/2));
                $('#posUserImg, #posUsrImgWrap').css({'left':nx+'px','top':ny+'px'});
            }

            $('#wPos').val(nzo.width);
            $('#hPos').val(nzo.height);
            $('#xPos').val(($('#posUserImg').position().left+(orx*zv)));
            $('#yPos').val(($('#posUserImg').position().top+(ory*zv)));
            $('#zVal').val(ui.value);
            zc++;
            iz=1;
        },
        stop: function(){
            zx = 0;
            zoomed=true;
            rx=orx*zv;
            ry=ory*zv;
            rxz=ixz+rx;
            ryz=iyz+ry;
        }
    });

我认为问题出在旋转或刻度末端功能。我觉得这可能与缩放比例有关,但是我尝试了很多不同的组合来使它正常运行。

格伦·罗布森

经过数小时的测试和调试,我了解了如何执行此操作。事实证明,它非常简单。问题在于可拖动的UI事件向旋转事件返回了不同的上,下值。不能完全确定如何或为什么,但是似乎可以与可拖动停止功能中的修改代码一起使用。您可以在此处查看固定版本

var il,it;
// Drag Handler
$('#posUsrImgWrap').draggable({
    drag:function(event, ui){
        il = ui.position.left;
        it = ui.position.top;
        var iw = $(this).width();
        var ih = $(this).height();
        $('#posUserImg').css({'top':it+'px','left':il+'px'});
        dragged = true;
        zc = 0;
    },
    stop:function(){
        ixz=il;
        iyz=it;
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

图像拖动时的旋转值

来自分类Dev

拖动,缩放或旋转ImageView

来自分类Dev

如何缩放,旋转和裁剪图像

来自分类Dev

如何缩放,旋转和裁剪图像

来自分类Dev

缩放和旋转边框内的图像

来自分类Dev

如何使用 Greensock 缩放和旋转图像?

来自分类Dev

试图找到一个简单/优雅的js / jquery解决方案来控制用户图像的定位,旋转和缩放

来自分类Dev

如何通过拖动图像的边缘来移动和缩放图像?

来自分类Dev

如何设置背景图像进行缩放和拖动?

来自分类Dev

Scipy旋转和缩放图像而无需更改其尺寸

来自分类Dev

图像的缩放和旋转取决于EXIF数据吗?

来自分类Dev

在Android中旋转,平移和缩放动态创建的图像视图

来自分类Dev

Scipy旋转和缩放图像而无需更改其尺寸

来自分类Dev

缩放时定位(.5)

来自分类Dev

通过旋转/缩放/平移在Google地图上定位图像

来自分类Dev

通过旋转/缩放/平移在Google地图上定位图像

来自分类Dev

旋转和缩放ImageBrush

来自分类Dev

ImageJ API:如何在图像窗口中显示具有缩放和拖动以滚动功能的图像?

来自分类Dev

图像在拖动/缩放时不会停留在边框/画布内

来自分类Dev

在纯js中移动(拖动/平移)和缩放对象(图像或div)

来自分类Dev

使用缩放并拖动矩形来裁剪图像

来自分类Dev

精灵自动定位和缩放

来自分类Dev

在上载到数据库之前如何拖动和重新定位图像?

来自分类Dev

OpenGL旋转和缩放问题

来自分类Dev

悬停时旋转或旋转图像

来自分类Dev

缩放/缩放后如何在Canvas中拖动图像/对象?

来自分类Dev

当背景缩放时,如何将文本视图定位在基于图像的背景之上?

来自分类Dev

缩放和裁剪图像

来自分类Dev

Snap.svg缩放时拖动

Related 相关文章

热门标签

归档