0

我正在尝试有条件地加载 Fancybox js 和 css 代码,并仅在元素存在并且我在特定页面中时才在元素上执行它。到目前为止,我一直在尝试以下代码:

yepnope({
test : jQuery('body').hasClass('edizioni'),
yep  : ['/assets/css/jquery.fancybox.css','/assets/js/libs/jquery.fancybox.pack.js','/assets/js/libs/jquery.mousewheel-3.0.6.pack.js',
        jQuery("#gallery a").fancybox()]
});

我得到一个Uncaught TypeError: Object [object Object] has no method 'fancybox'

我猜 jquery 运行正常,资源 jquery.fancybox.pack.js 被正确加载。我的实施有什么问题?

4

1 回答 1

1

您需要使用 yepnope 的回调功能。您现在拥有它的方式,它尝试jQuery("#gallery a").fancybox()在请求fancybox.pack.js. 它不会按顺序加载文件。每次加载资源时都会触发回调,您需要验证 URL。

这应该有效,或者至少让你开始:

yepnope({
    test : jQuery('body').hasClass('edizioni'),
    yep  : ['/assets/css/jquery.fancybox.css','/assets/js/libs/jquery.fancybox.pack.js','/assets/js/libs/jquery.mousewheel-3.0.6.pack.js'],
    callback: function (url, result, key) {
        if(url === "/assets/js/libs/jquery.fancybox.pack.js"){
            // Fancybox has loaded, it's safe to call it now
            jQuery("#gallery a").fancybox();
        }
    }
});
于 2013-02-06T15:25:32.100 回答