我正在使用带插件jquery.easydrag.js
的fancybox。这样做的原因是能够拖动花式框架。
似乎工作正常,但问题出现在fancybox有滚动条的时候。即例如,当单击提交而不输入任何字段时,屏幕上的valdidation会导致滚动条。这通常很好,但滚动条会导致可拖动功能的各种问题,因此当我尝试上下滚动滚动条时,它实际上会移动整个窗口。因此,似乎对于可以移动哪些内容以及如何处理滚动条感到困惑。
claimLink.fancybox({
'width': 500,
'height': 590,
'autoDimensions': false,
'onCleanup': function (e) {
var modelClaimFormId = $j(e).attr("href").replace("body", "");
var modalClaimForm = $j(modelClaimFormId);
if (!($j(modalClaimForm).valid())) {
$j(claimForm).remove();
$j(e).parents("tr").remove();
}
}
});
$j("#fancybox-wrap").easydrag(true);
编辑:
我设法为输入和textareas添加一些内容以忽略滚动,如下所示...只是想知道我能为滚动条做些什么。
$j("#fancybox-wrap").easydrag(true);
$j("#fancybox-wrap input,textarea").click(function(){
$j("#fancybox-wrap").dragOff();
});
$j("#fancybox-wrap input,textarea").mouseover(function () {
$j("#fancybox-wrap").dragOff();
});
$j("#fancybox-wrap input,textarea").blur(function () {
$j("#fancybox-wrap").dragOn();
});
$j("#fancybox-wrap input,textarea").mouseout(function () {
$j("#fancybox-wrap").dragOn();
});
This是JS for easydrag插件的链接
答案 0 :(得分:9)
我发布了first example关于如何在2009年为v1.2.1制作fancybox draggable。然后我发布了一些注意事项以使其适用于v1.3.1 as seen here,但是当引入fancybox v1.3.4时,easyDrag
插件的工作方式与以前的版本一样顺畅,并且开始出现错误。我没有时间找到解决方法...所以我放弃它。
解决方案很简单:easyDrag
插件提供了一种设置“处理程序”as explained here的方法,而不是保留和拖动整个#fancybox-wrap
容器,阻止访问滚动条(如果有),只需从特定的已定义元素拖动灯箱即可。这样的处理程序可以附加到#fancybox-wrap
选择器,并使用onComplete
回调API选项在EasyDrag插件中进行设置,如:
'onComplete': function(){
// append the handler on the top-left corner of fancybox
$("#fancybox-wrap").append("<button id='handler'>Drag me</button>");
// set the handler using the handler's element ID
$("#fancybox-wrap").setHandler('handler');
}
请注意,您可以使用任何元素作为处理程序,在我的示例中,我使用了html按钮,但如果愿意,您可以使用图像。重要的是将最小的重要css
属性分配给处理程序,以便可以将其附加到#fancybox-wrap
容器,而不会出现如下问题:
width: 80px; /* or whatever needed */
height: 24px;
position: absolute; /* important to position the handler into the fancybox wrap */
top: 0; /* top-left corner of the box but can be anywhere */
left: 0;
display: block;
z-index: 1120; /* important to be over the box */
其他属性可以是装饰性的。
看到它working here !!!
完成并提交表单后,响应将是一个带滚动条的新花式框,您可以单独使用easyDrag处理程序。
请随意分析代码并根据自己的需要进行自定义(并且不要忘记授予我赏金;)
更新:请注意,由于我们每次触发fancybox时都会将处理程序附加到#fancybox-wrap
容器,因此我们需要在使用{{1}关闭fancybox后将其删除} callback,否则如果我们再次打开fancybox并出现意外结果,我们将复制处理程序:
onClosed
我也更新了my DEMO。
最后注意:此解决方案适用于fancybox v1.3.4 。
我没有使用 v2.x 测试它,但我不明白为什么它不起作用。只需确保绑定'onClosed' : function() {
$("#fancybox-wrap #handler").remove();
}
并将处理程序附加到EasyDrag
选择器
.fancybox-wrap
您可以使用$(".fancybox-wrap").easydrag();
回调向其附加处理程序,并afterShow
将其删除。
答案 1 :(得分:2)
使用上面的解决方案为#fancybox-wrap选择器添加一个处理程序以及使用onComplete回调API的EasyDrag插件,我发现这与fancybox 1.3.4 title元素很好地配合创建一个带滚动功能的可拖动花式框。使用标题,关闭后无需删除它。
<script type="text/javascript" src="@Url.Content("~/fancybox/jquery.mousewheel-3.0.4.pack.js")"></script>
<script type="text/javascript" src="@Url.Content("~/fancybox/jquery.fancybox-1.3.4.pack.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.easydrag.handler.beta2.js")" type="text/javascript"></script>
<script>
//Fancybox
$(document).ready(function () {
$("#iframeVideoPop").fancybox({
'width': 890,
'height': 595,
'type': 'iframe',
'autoScale': 'false',
'hideOnContentClick': false,
'onComplete': function() {
//Style the title where and how you want it
$("#fancybox-title").css({'top':'-20px', 'bottom':'auto'});
//Set the fancybox-title as the handler
$("#fancybox-wrap").setHandler('fancybox-title');
}
});
$("#fancybox-wrap").easydrag();
}); //ready
<script>
答案 2 :(得分:0)
为了消除将Easydrag与Fancybox结合起来导致的滚动条问题,您需要删除滚动条。默认情况下,Fancybox CSS样式表将overflow:auto
规则应用于由Fancybox生成的元素,该元素包含Fancybox内显示的内容。
要覆盖它,请包含您自己的CSS规则,该规则将取代Fancybox应用于包装器的规则。将此样式块放在网页的<head>
部分中:
<style>
/* id of the element generated and used by Fancybox as a wrapper around
the generated content. */
#fancy_ajax {
/* Use the important identifier to ensure the overflow:auto is suppressed */
overflow:none !important;
}
</style>
这将消除滚动条并允许轻松拖动插件顺利运行。
答案 3 :(得分:0)
在测试这些解决方案后,我遇到了拖动iframe的问题。为了解决这个问题,我切换到了jQuery 1.9.1 UI插件进行拖动,并在拖动时创建了一个透明图像。拖动后删除图像以访问内容。适用于fancybox iframe,可以快速拖动iframe。请参阅下面的示例代码。
$("#iframePop").fancybox({
'width': 890,
'height': 430,
'type': 'iframe',
'autoScale': 'false',
'hideOnContentClick': false,
'onComplete': function() {
$("#fancybox-title").css({'top':'-2px', 'left':'15px', 'bottom':'auto', 'cursor':'move'});
$("#fancybox-wrap" ).draggable({ handle: "fancybox-title", iframeFix: true,
start: function(ev,ui){$("#fancybox-wrap").append("<img src='@Url.Content("~/Content/Images/transparent.png")' id='hidenImg' style='border: 1px solid black; width: 640px; height: 400px; top: 20px; position: absolute; z-index: 10000;' />")},
drag: function(ev,ui){},
stop: function(ev, ui){$("#fancybox-wrap #hidenDiv").remove()}
});
}
});