【问题标题】:.delegate in combination with fancybox.delegate 与 fancybox 结合
【发布时间】:2011-06-15 14:02:16
【问题描述】:

我对fancybox 有疑问,我想将其应用于div 中的图像,它使用.replaceWith 动态更改其内容。代码如下所示:

$(document).load('fancybox', function() {
        $('.various4').fancybox({
                'width'             : 800,
                'height'            : 750,
                'autoScale'         : false,
                'transitionIn'      : 'none',
                'transitionOut'     : 'none',
                'type'              : 'iframe'
            });
    });

这适用于以下 HTML:

<a class="various4" href="http://xy//index.html"><img height="400" width="600" src="bg.jpg"  class="hoverbild" /></a>

由于我在 jquery 中使用悬停功能,并且正在更改 div 的内容,因此我使用以下代码在更改 div 的内容后提供悬停效果:

$(document).delegate('.hoverbild', 'hover', function(){
    $(".hoverbild").hover(function() {
        $(this).attr("src","bg-hover.jpg");
            }, function() {
        $(this).attr("src","bg.jpg");
    });
});

这没有问题。但是现在,如果想告诉 fancybox-part 委托,它根本不起作用。没有错误警告,只是被忽略了。

    $(document).delegate('.various4', 'fancybox', function(){
        $('.various4').fancybox({
                    'width'             : 800,
                    'height'            : 750,
                    'autoScale'         : false,
                    'transitionIn'      : 'none',
                    'transitionOut'     : 'none',
                    'type'              : 'iframe'
                });
        });   

我错过了什么?我尝试改用 .live,但这并没有什么不同。

提前感谢您的帮助。

【问题讨论】:

    标签: jquery delegates fancybox


    【解决方案1】:

    $('selector').fancybox() 绑定打开盒子作为点击处理程序,如果你想手动打开fancybox,请使用$.fancybox()

    $(document).delegate('.various4', 'click', function() {
        $.fancybox({href: $(this).attr('href')});
        return false;
    });
    

    如果您想打开图像使用,这将适用于内联 iframe:

    $(document).delegate('.various4', 'click', function() {
        $.fancybox($(this).attr('href'), {type:'image'});
    return false;
    });
    

    【讨论】:

      【解决方案2】:

      delegate() 函数的第二个参数和live() 函数的第一个参数指定将函数绑定到哪种类型的事件。 'fancybox' 不是事件,这就是它被忽略的原因。

      您可以执行以下操作,

      $('.various4').live('hover', function() {
        $(this).fancybox();
      });
      

      这应该可行,因为在用户点击图片之前,他们必须将鼠标悬停在图片上,然后在该图片上调用fancybox()

      或者,您可以创建自己的事件并在运行 replaceWith() 后创建的每个图像上调用它。

      replaceWith() 之后,只需执行类似的操作,

      $('.various4').trigger('apply_fancybox');
      

      然后有,

      $('.various4').live('apply_fancybox', function() {
        $(this).fancybox();
      });
      

      您可能需要为任何不是使用replaceWith() 动态创建的初始图像触发此事件。

      还有另一种方法,最简单的方法,为什么不在调用replaceWith() 之后使用$('.various4').fancybox()

      【讨论】:

      • 我明白了!我认为 fancybox 被解释为一个事件。我将研究不同的解决方案,的确,最后一个似乎是最合理的。非常感谢!
      猜你喜欢
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多