jqueryui可拖动带有处理程序的移动图像

jqueryui draggable move image with handler

本文关键字:程序 移动 图像 处理 拖动 jqueryui      更新时间:2023-09-26

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

我在这里有一个更好的演示小提琴:

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

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

编辑

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

因为现在(在小提琴上)当你第一次点击#image并拖动时,它会拖动#image。但当你首先点击#viewport时,它不会。这就是我想要的,当你首先点击#viewport并拖动时,它仍然会拖动#image

jquery draggable似乎需要将处理程序放入draggable中。只需几行代码,您就可以编写自己的可拖动程序。在这里查看我的演示

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;  
    });
});

更新了你的小提琴。请阅读此处的文档:http://api.jqueryui.com/draggable/#option-安全壳

您必须在.draggable方法中使用containment选项,并且还需要将图像放入#viewport中,以便使其最初位于#viewport中。你也可以把它放在#viewport外面,一旦你把它拖到#viewport里面,它就不会让你再把它拖出去了。

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