如何在jQuery中关注滚动条时禁用可拖动的div

时间:2010-07-21 15:07:23

标签: jquery html scrollbar draggable

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

$(".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 个答案:

答案 0 :(得分:10)

实际上你可以在draggable中使用“cancel”属性来防止滚动事件影响到可拖动元素。

例如:

如果您的HTML是这样的......

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

表示js:

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

当您在该特定区域中滚动时,外部可拖动元素将被临时禁用。

答案 1 :(得分:3)

这适用于我,我使用jquery ui 1.8.2。


      $(".drag").draggable({
                        start: function(e, ui) {
                        if ($(e.originalEvent.target).is(".scroll"))
                            e.preventDefault();
                        }
                    })

答案 2 :(得分:2)

此问题的解决方法(因为某些原因,最近没有人回答我的问题)是用jQuery滚动条(称为jScrollPane)替换默认浏览器滚动条。这样做可以让我使用插入的滚动条ID作为选择器来禁用可拖动......如此:

 $('.jScrollPaneDrag').live('mousedown mouseup', function(e){
     if(e.type=='mousedown'){
         $('.lsidebar').draggable({disable: true});
     }else{
         $('.lsidebar').draggable({"scroll":false});
     };
 });

答案 3 :(得分:1)

我想这可能会正常工作

$("div")
.mouseenter(function(){...bind drag;})
.mouseleave(function(){...unbind drag;});

答案 4 :(得分:0)

尝试在page_wrapper的css中添加overflow:hidden;

答案 5 :(得分:0)

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

  • 当前可拖动元素
  • 可拖动元素的所有孩子
  • 可拖动元素的所有可拖动的父母

检查此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);
    }); });