jqueryui draggable移动图像与处理程序

时间:2013-02-15 03:27:39

标签: javascript jquery jquery-ui jquery-ui-draggable

如何使用处理程序获得可拖动的图像?我已经读过处理程序应该在draggable中,但我不能在图像中有另一个元素。

我在这里有一个小提琴,可以更好地展示:

http://jsfiddle.net/index/bfpWv/10/

问题是我应该如何在#viewport内拖动并仍移动#image

修改

我认为这个问题有点模糊:

因为现在(在小提琴上)当你先点击#image并拖动时,它会拖动#image。但是当你先点击#viewport时,它却没有。这就是我想要发生的事情,当你先点击#viewport然后拖动时,它仍会拖动#image

3 个答案:

答案 0 :(得分:3)

似乎jquery draggable需要处理程序放在draggable中。只需几行代码即可编写自己的可拖动文件。请参阅我的演示here

HTML:

<div id="container">
    <img id="image" src="http://thechive.files.wordpress.com/2011/03/hot-sexy-redheads-12.jpg" />
    <div id="viewport"></div>
</div>

JS:

$(document).ready(function(){
    var isDragging, 
        top = 0, left = 0,
        curX, curY;

    $("#image").mousedown(function (e) {
        e.preventDefault();
    });

    $("#container").mousedown(function (e) {
        isDragging = true;

        curX = e.pageX;
        curY = e.pageY;

        left = Number($("#image").css("margin-left").
                      toString().replace("px", ""));
        top = Number($("#image").css("margin-top").
                     toString().replace("px", ""));
    });

    $(document).mouseup(function () {
        if (isDragging){
            // reset
            isDragging = false;
            top = 0;
            left = 0;
        }
    });

    $("#container").mousemove(function(e){
        if (!isDragging) {
            return;
        }

        left += e.pageX - curX;
        top += e.pageY - curY;

        // set the position
        $("#image").css("margin-left", left + "px").
            css("margin-top", top + "px");

        curX = e.pageX;
        curY = e.pageY;  
    });
});

答案 1 :(得分:0)

更新了您的fiddle。请阅读此处的文档: http://api.jqueryui.com/draggable/#option-containment

您必须在.draggable方法中使用包含选项,并且还需要将图像放在#viewport内,以便最初将其放在#viewport内。您也可以将其保持在#viewport之外,一旦将其拖到#viewport内,它就不会让您再次将其拖到外面。

答案 2 :(得分:0)

考虑你的描述 我应该如何在#viewport内拖动并仍移动#image   - 使用简单的z-index css样式做到了。希望这次有所帮助。 Fiddle