我想用另一个预加载器替换默认的 Fancybox1.3.4 图像预加载器 (fancy_loading.png)。

Fancybox 预加载器不仅用 css 编码,而且用 javascript 本身编码。
看来,javascript中至少有两个地方:

        _animate_loading = function() {
        if (!loading.is(':visible')){
            clearInterval(loadingTimer);
            return;
        }

        $('div', loading).css('top', (loadingFrame * -40) + 'px');

        loadingFrame = (loadingFrame + 1) % 12;
    };


    $.fancybox.showActivity = function() {
    clearInterval(loadingTimer);

    loading.show();
    loadingTimer = setInterval(_animate_loading, 66);
};

$.fancybox.hideActivity = function() {
    loading.hide();
};

因此自定义预加载器也需要修改 javascript。
如何更改fancybox-1.3.4 javascript 以设置自定义预加载器图像?

最佳答案

CSS 声明在这里:

#fancybox-loading div {
  position: absolute;
  top: 0;
  left: 0;
  width: 40px;
  height: 480px;
  background-image: url('fancybox.png');
}

他们正在为背景图像使用 Sprite 并更改背景位置以对其进行动画处理。如果您要使用 loading.gif 图像,则不需要为其设置动画。

您需要更改 background-image 路径、 heightwidth 以满足您的新图像。您可能想要注释掉他们的动画 JS 代码,以免发生冲突。
loading div 在这里声明:
$('body').append(
  tmp = $('<div id="fancybox-tmp"></div>'),
  loading = $('<div id="fancybox-loading"><div></div></div>'),
  overlay = $('<div id="fancybox-overlay"></div>'),
  wrap = $('<div id="fancybox-wrap"></div>')
);

您可以搭载 loading 变量,也可以简单地更改 #fancybox-loading 上的样式。然后,您需要删除对 loadingTimerloadingFrame 的任何引用。注释掉整个函数:
/*_animate_loading = function() {
  if (!loading.is(':visible')){
  clearInterval(loadingTimer);
    return;
  }

  $('div', loading).css('top', (loadingFrame * -40) + 'px');

    loadingFrame = (loadingFrame + 1) % 12;
};*/

修改如下函数:
$.fancybox.showActivity = function() {
  //clearInterval(loadingTimer);

  loading.show();
  //loadingTimer = setInterval(_animate_loading, 66);
};

那应该这样做。您不希望 loading 上有任何 setInterval,因为您不会对其进行动画处理,但您确实希望它有条件地隐藏/显示。

关于javascript - 如何更改 Fancybox 预加载器图像?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9367943/

10-13 01:07