【问题标题】:Dynamically set fancybox 3 iframe size动态设置 fancybox 3 iframe 大小
【发布时间】:2017-05-17 07:14:28
【问题描述】:

在处理fancybox中动态调整iframe的大小时,我偶然发现在阅读@987654321后在[data-fancybox]上设置data-widthdata-height很有帮助@。

示例 HTML 元素:

<a data-fancybox data-width="<?= $banner_width; ?>" data-height="<?= $banner_height; ?>"  data-src="example.com" href="javascript:;">example.com</a>

和js:

$("[data-fancybox]").fancybox({
    afterLoad: function ( instance, slide ) {
        $('body').find('.fancybox-content').css({"width": slide.opts.width + "px", "height": slide.opts.height + "px"});
    }
});

我想不通的是,fancybox 文档中没有对 HTML 元素的 data-widthdata-height 用法的解释(如果我错了,请纠正我)。

注意:上面这两个代码 sn-ps 对我有用,但它们必须一起工作,如果其中一个被取消,它将无法工作。

谁能帮我解释一下?

【问题讨论】:

    标签: fancybox fancybox-3


    【解决方案1】:

    基于fancybox 3 documentation,它们确实提供了一种通过创建data-options 属性来设置我们自己的自定义选项的方法。这是文档中的示例:

    <a data-fancybox 
       data-options='{"caption" : "My caption", "src : "iframe.html"}' href="javascript:;">
       Open external page using iframe
    </a>
    

    您可以从onComplete 等回调函数中通过console.info( slide.opts ) 看到这些选项的值(slide 是回调函数中的一个参数)。

    不出意外,这两个sn-ps是一样的:

    <a data-fancybox data-width="<?= $banner_width; ?>" data-height="<?= $banner_height; ?>"  data-src="example.com" href="javascript:;">example.com</a>
    
    <a data-fancybox data-options='{"width" : "<?= $banner_width; ?>", "height" : data-height="<?= $banner_height; ?>", "src" : "example.com" }' href="javascript:;">example.com</a>
    

    所以,在我的 javascript 中,我使用 slide.opts.widthdata-widthslide.opts.height 获取值以从 data-height 获取高度,这就是我的宽度和高度值从后端传递到前端的方式。

    由于这两个值是在afterLoad回调中处理的,所以每个iframe都会以不同的宽度和高度初始化。

    【讨论】:

      【解决方案2】:

      属性 - data-widthdata-height - 用于告诉脚本图像的实际尺寸。然后脚本可以计算位置并开始缩放缩略图,而实际图像仍在加载。

      查看文档 - http://fancyapps.com/fancybox/3/docs/#images

      这些属性不会在其他任何地方使用。

      您可以使用{ iframe : { css : { width: '', height : '' } } } 设置 iframe 元素的宽度/高度,但没有更改 iframe 内容的选项。

      【讨论】:

      • 嗨 Janis,感谢您的回复,但我使用的是 iframe 而不是图像。我想我找到了答案,我稍后会发布我的答案。
      • 我只是试图解释它们不适用于 iframe,它们仅用于图像。
      • 是的,我刚看到,这是我的错,对不起。我以为 enter 会转到下一行,但它实际上提交了我的答案 :( { iframe : { css : { width: '', height : '' } } } 确实改变了 iframe 大小,但它只会改变 once 当 fancybox 对象已创建,这意味着它使我页面上的每个 iframe 都固定大小,这不是我想要的。如您所见,data-widthdata-height 在我的案例中是从 PHP 代码生成的,所以我希望每个 iframe 都有一个不同的大小:)
      猜你喜欢
      • 2012-12-28
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多