当前位置: 首页 > 知识库问答 >
问题:

Jquery可拖动问题

韩景辉
2023-03-14

基本上,我想要的是,当拖动时,如果我走出容器区域并在那里释放鼠标单击,可拖动的元素只会粘附到我离开容器区域的边界上。当我将光标移回时,元素会粘回到光标上。当您只是移动光标(而不是拖动)而元素仍在被拖动时,它看起来并不好看。

这是一把小提琴。只要在输出区域外拖动并释放光标,您就会得到我所说的内容。

我在想两种方法

>

  • 在拖动时限制鼠标移动到容器网区域(我搜索了一下,没有找到怎么做。也许这是不可能的?(

    如果光标离开容器区域,则将可拖动对象恢复到其位置。(仍然找不到这样做的方法)

    有什么方法或更聪明的想法来实现这一点吗???

    相关代码(用于堆栈溢出)

  • 共有2个答案

    毕魁
    2023-03-14

    好的,我找到了解决办法。在IE8和Chrome中工作。

    为可拖动元素添加了此代码。

    drag: function(){
         $('body').mouseleave(function(){
              $('body').mouseup();
         });
    }
    

    工作小提琴

    编辑:多亏Rembunator指出了缺陷,我决定使用。one()以获得更好的性能,并将代码从拖动位置移到开始位置

    start: function(){
         $('body').one("mouseleave", function(){
              $('body').mouseup();
         });
    }
    

    编辑2:

    终于找到了解决办法。

    下面是代码:

    var flag=true;
    start: function( event, ui ){
        if(flag){
             flag = false;
             $('body').one("mouseleave", function(){
                 $('body').mouseup();
                  flag = true; //event occured, rebind
              });
         }
         else{
             flag = false;
         }
    }
    

    感谢雷姆布纳托的帮助

    黄骏喆
    2023-03-14

    我想是因为它在iframe里。这就像在浏览器外面拖动一样。mouseup事件不会在页面中注册。

    看起来chrome不允许这样做,但火狐允许。

    试试这个:小提琴

    $('body').mouseleave(function()
        {
        $(document).trigger("mouseup");
        });
    

    这是您的解决方案,无需每次设置事件。

    overkill版本(这将允许用户暂时(1秒)离开iframe并返回,而不会丢失拖动):

    $('body').prop('mouseuptimer',null)
        .mouseleave(function()
            {
            var objTimer = setTimeout(function() 
                {
                $(document).trigger("mouseup")
                }, 1000);
            $(document).prop('mouseuptimer', objTimer);
            })
        .mouseenter(function()
            {
            var objTimer = $(document).prop('mouseuptimer');
            if (objTimer) clearTimeout(objTimer);
            });
    $(function() 
        {
        $( "#sortable" ).sortable({revert: true });
        $( "#draggable" ).draggable({
            connectToSortable: "#sortable",
            helper: "clone",
            revert: "invalid" });
        $( "ul, li" ).disableSelection();
        });
    

    编辑:

    要回答您的第一个问题:

    您可以通过在选项中添加“包含”来包含可拖动的,即:

    $( "#draggable" ).draggable({
        connectToSortable: "#sortable",
        helper: "clone",
        revert: "invalid",
        containment: "document" });
    

    但这只能包含拖动到边界框的元素(在本例中为“document”,但也可以是“parent”或“#somediv”)。鼠标光标仍然能够移动到iframe之外的任何位置,并从那里发送事件,超出iframe文档的范围。

     类似资料:
    • 我试图将jQuery可拖动、可拖放和可排序相结合;然而,我一直有问题。有人能帮帮我吗? A、 B、C、D、E瓷砖可在上部可放下和可分拣之间移动 此外,我正试图在必要时在任何位置停用和重新激活所有这些。 这是我的,但它很有缺陷,也不漂亮: JS 超文本标记语言

    • 问题内容: 作为实验,我创建了一些div并使用CSS3对其进行了旋转。 然后,我随机设置它们的样式,并使其通过jQuery可拖动。 拖动有效,但我注意到仅在webkit浏览器中拖动div时突然跳了一下,而在Firefox中一切正常。 如果我删除 职位:绝对 风格,那么“跳跃”就更糟了。我以为webkit和gecko之间的转换起源可能有所不同,但是默认情况下它们都位于元素的中心。 我已经搜索过了,但

    • jQueryUI提供了draggable()方法,可以使任何DOM元素可拖动。 一旦元素可拖动,您可以通过用鼠标单击它并将其拖动到视口内的任何位置来移动该元素。 语法 (Syntax) draggable()方法可以使用两种形式 - $(selector,context).draggable(options)方法 $(selector,context).draggable(“action”,[pa

    • 我有一个非常奇怪的问题,当我把一个项目从计划外的游戏桶拖到一个网格中时,你可以看到可拖动的项目被切断,大约80%的时间都是在这个区域上拖动的。 当计划外游戏中的项目溢出时,滚动条会出现这种情况。否则,拖动时不会切断。在网格中的游戏之间也可以找到拖放工作。 这只发生在Chrome中。Firefox和Edge运行良好。我真的不知道要显示什么JS或CSS,因为它可以是任何东西。 另外,当我像下面的屏幕一

    • 本文向大家介绍jquery实现仿JqueryUi可拖动的DIV实例,包括了jquery实现仿JqueryUi可拖动的DIV实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jquery实现仿JqueryUi可拖动的DIV。分享给大家供大家参考。具体如下: 这是用Jquery写的代码,仿JQUERYUI的Draggable或者是Dialog,希望大家喜欢,写的一个小东西。参考了下网上的其他

    • 问题内容: 我希望能够单击鼠标并将其保持在div内并移动其背景。在Google上搜索了很多内容,却没有找到我想要的。 问题答案: 好吧,让它起作用。我想我可以解决所有问题了: 最终的jQuery有界限 原始答案 HTML CSS jQuery