我有一个带有侧滚动条的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;
}
答案 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);
}); });