同一页面上的两个 iframe fancybox

Posted

技术标签:

【中文标题】同一页面上的两个 iframe fancybox【英文标题】:Two iframe fancybox on same page 【发布时间】:2012-09-18 01:44:35 【问题描述】:

fancybox 脚本有一个问题。我正在使用fancybox 2.1(最新)。例如,我希望两个 iframe 链接在同一页面上工作,但每个模式框具有不同的设置和自定义。例如

<li><a class="fancybox fancybox.iframe" href="give-me-meal.html">first</a></li>
<li><a class="fancybox fancybox.iframe" href="give-me-meal.html">second </a></li>

我用

覆盖默认自定义
<script type="text/javascript">
jQuery.extend(jQuery.fancybox.defaults, 
            href : 'iframe.html',
            type : 'iframe',
        padding : 0,
        margin  : 20,

        width     : 800,
        height    : 0,
        minWidth  : 100,
        minHeight : 400,
        maxWidth  : 9999,
        maxHeight : 9999,

        autoSize   : true,
        autoHeight : true,
        autoWidth  : false,

);
</script>

但是两个弹出窗口是相同的。我想与众不同,比如第二个模态框的宽度为 1000 像素,高度更高等。我怎样才能做到这一点>

谢谢!

【问题讨论】:

【参考方案1】:

您可以为每个链接使用 HTML5 data-* 属性并为每个 iframe 传递不同的大小,例如将 html 设置为:

<li><a class="fancybox fancybox.iframe" href="give-me-meal.html" data- data->first</a></li>
<li><a class="fancybox fancybox.iframe" href="give-me-meal.html" data- data->second </a></li>

然后在您的脚本中,获取data-widthdata-height 的值并使用beforeShow 回调传递大小

<script type="text/javascript">
$(document).ready(function()
 $(".fancybox").fancybox(
        padding : 0,
        margin  : 20,
        minWidth  : 100,
        minHeight : 400,
        maxWidth  : 9999,
        maxHeight : 9999,
        autoSize   : true,
        autoHeight : true,
        autoWidth  : false,
        beforeShow : function()
          this.width = $(this.element).data("width");
          this.height= $(this.element).data("height");
        

 ); // fancybox
); // ready
</script>

注意,我没有指定 API 选项 type: "iframe",因为链接已经有 class fancybox.iframe

【讨论】:

如果你使用$(this),它需要在一个回调函数中,这样每个匹配的元素都会不同。您应该使用.each() 循环。 @Barmar:我没有使用$(this),是吗? ...并且此解决方案(不是$(this))使用单个脚本处理多个链接可以正常工作;) @Barmar : 更多检查***.com/a/10776520/1055987 或***.com/a/9529889/1055987(没有.each() 循环) 我看错了你写的东西,我没有看到它在 beforeShow 回调中。【参考方案2】:

使用大多数 jQuery 插件执行此操作的常规方法是在调用它时指定选项,并为元素指定不同的 ID。

HTML:

<li><a class="fancybox fancybox.iframe" id="box1" href="give-me-meal.html">first</a></li>
<li><a class="fancybox fancybox.iframe" id="box2" href="give-me-meal.html">second </a></li>

JS:

$("#box1").fancybox();
$("#box2").fancybox(
    height: 1000
);

【讨论】:

如果你有 100 个链接怎么办?你打算设置100个fancybox脚本吗? ...谢谢,但不谢谢;) @JFK 在这种情况下,您的答案会更好。尽管输入 100 个data-width 属性并没有那么容易。有这么多,我希望它们是统一的,而不是单独的大小。

以上是关于同一页面上的两个 iframe fancybox的主要内容,如果未能解决你的问题,请参考以下文章

同一页面的两个Iframe获取数据

在 Streamlit 上的 iframe 上使用 selenium 时打开了两个浏览器页面

您可以从同一站点定位 iFrame 中的元素吗?

允许子 iframe 从不同域调用其父窗口上的函数

隐藏 iframe 上的水平滚动条?

同一页面上的联系表单错误消息