fancybox - 在 iframe 中调整图像大小

fancybox - resizing image inside the iframe

我使用的是fancybox 2.1.5版本 我想要做的是在 fancybox iframe 中显示大约宽度 900 和高度 500 的大图像。当然现在图像呈现巨大并且不适合该 iframe。 我很难捕捉到正确的 class 或导航到图像以调整其大小的方法。我尝试的是使用 beforeShow 函数并执行此操作:

                 $(".fancybox").fancybox({
                    type: 'iframe',
                    href: source,
                    title: title,
                    width: 900,
                    height: 500,
                    closeBtn: false,
                    nextSpeed: 0, //important
                    prevSpeed: 0, //important
                    beforeShow: function() {
                        alert('its working!');
                        $(".fancybox-iframe img").css("width","900px");
                        $(".fancybox-iframe img").css("height","auto");
                        $(".fancybox-iframe img").addClass("imageResize");
                    }
                });

但是,$(".fancybox-iframe img")$(".fancybox-inner img") 都不是触发 img 的正确方法。 如何使用 beforeShow 函数在 fancybox iframe 中正确调整图像大小。 谢谢!

我想通了

                    beforeShow: function () {
                        var newWidth = 900; // set new image display width
                        $('.fancybox-iframe').contents().find('img').css({
                            width  : newWidth,
                            height : "auto"
                        }); // apply new size to img
                    }

对于使用 fancybox 3 的我来说,我遇到了 fancybox iframe 未加载的问题,所以这有帮助:

此代码每 100 毫秒轮询一次 img 标记的 iframe,最多持续 2 秒,以查看是否已加载图像。如果有,则将图像的属性设置为最大高度。

如果未找到 iframe,则应立即清除间隔。

var fancyboxOptions = {
    onComplete: function( instance, slide ) {
        var timeCompleted = new Date();
        function afterLoading () {
            clearInterval(pollLoaded);
            $('iframe',slide.$content[0]).contents().find('img').attr('height','100%');
        }
        var pollLoaded = setInterval(function(){
            var iframe = document.getElementById($('iframe',slide.$content[0]).attr('id'));
            var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
            if (iframeDoc) {
                if (( iframeDoc.readyState  === 'complete' )
                    && ($('iframe',slide.$content[0]).contents().find('img').length > 0)) {
                    afterLoading();
                }
                // try for 2 seconds then stop.
                if (new Date() - timeCompleted > 2000) {
                    clearInterval(pollLoaded);
                }
            }
            else {
                clearInterval(pollLoaded);
            }
        },100);
    }

};