代码之家  ›  专栏  ›  技术社区  ›  sadmicrowave

当jQuery中的滚动条被关注时,如何禁用draggable div

  •  4
  • sadmicrowave  · 技术社区  · 14 年前

    我有一个jQuery可拖动的容器div,它带有一个侧滚动条,当我上下滚动时,它不应该是可拖动的。infotext是包含文本的内部div,包含在#infobody中,设置为overflow:auto. 我需要一种方法来否定div上的draggable函数,当滚动条被选中时。这是我的密码:

    $(".lsidebar").draggable({"scroll":false});
    
     .lsidebar #infobody{
    cursor:default;
    position:absolute;
    width:100%;
    overflow:auto;
    margin:23px 0 0 0;
    z-index:14;
    }
    
       #infobody .infotext{
    cursor:default;
    position:relative;
    width:100%;
    z-index:14;
    color:#969696;
    }
    
    6 回复  |  直到 14 年前
        1
  •  10
  •   Nightspirit    13 年前

    例如:

    <div class="draggable">
        <div class="scrollable"></div>
    </div> 
    

    对于js:

    $('.draggable').draggable({
       cancel: '.scrollable'
    });
    

        2
  •  3
  •   mike    14 年前

    这对我很有用,我使用jqueryui1.8.2。

    
          $(".drag").draggable({
                            start: function(e, ui) {
                            if ($(e.originalEvent.target).is(".scroll"))
                                e.preventDefault();
                            }
                        })
    
        3
  •  2
  •   sadmicrowave    14 年前

     $('.jScrollPaneDrag').live('mousedown mouseup', function(e){
         if(e.type=='mousedown'){
             $('.lsidebar').draggable({disable: true});
         }else{
             $('.lsidebar').draggable({"scroll":false});
         };
     });
    
        4
  •  1
  •   Gabriele Petrioli    14 年前

    我想这也许行得通

    $("div")
    .mouseenter(function(){...bind drag;})
    .mouseleave(function(){...unbind drag;});
    
        5
  •  0
  •   isxaker    10 年前

    overflow:hidden; 在页面包装器的css中。

        6
  •  0
  •   Stacked Emily M    9 年前

    您可以绑定到当前元素及其所有子元素和父元素上的滚动事件,如下所示,滚动时将禁用拖动:

    • 可拖动元素的所有子元素
    • 可拖动元素的所有可拖动父级

    看看这个 JSFIDDLE .

    $(function () {
        $(".draggable").draggable({
            start: function () {
                // cancel draggin while scrolling
                if ($(this).data("scrolled")) {
                    $(this).data("scrolled", false).trigger("mouseup");
                    return false;
                }
            }
        }).find("*").andSelf().scroll(function () {
            // Bind to the scroll event on current element, and all its children.
    
            // Prevent all draggable parents from dragging while they are scrolling
            $(this).parents(".ui-draggable").data("scrolled", true);
        }); });