在本地下载并保存背景图像,使用imgcache.js在Ionic / Angularjs中脱机使用它

时间:2015-10-23 05:53:40

标签: javascript angularjs caching ionic-framework offline-mode

我正在使用imgcache.js和一个自定义指令来下载图像并在本地保存以便离线使用它。

库: https://github.com/chrisben/imgcache.js https://github.com/sunsus/ngImgCache/

案例是我需要将背景图像应用于内容(通常我们将背景图像应用于.scroll-content类)并且在css中我们不能使用指令或服务来保存该文件在本地。

我知道imgcache.js库有一个名为ImgCache.cacheBackground()的函数,但我不知道如何使用它并将本地文件应用于.scroll-content。

请帮忙吗?任何一个例子?

1 个答案:

答案 0 :(得分:1)

我找到了一种使用https://github.com/chrisben/imgcache.js

实现缓存的方法

我已将图片应用于.scroll-content:

.scroll-content{
    background-image: url(http://test.com/background.jpg);
}

并创建了一个指令:

.directive('cacheBackground', function($timeout) {
return {
restrict: 'A',
link: function(scope, el, attrs) {      
    // timeout to give time to init imgCache
    $timeout(function() {
        ImgCache.isBackgroundCached(el, function(path, success) {
            if (success) {
                ImgCache.useCachedBackground(el);
            } else { 
                ImgCache.cacheBackground(el, function() {
                    ImgCache.useCachedBackground(el);
                });
            }
        });
    }, 200);
}
};
})

修改了imgCache.js中的DomHelpers.getBackgroundImage,即使我们有jQueryLite,也要使用getComputedStyle:

DomHelpers.getBackgroundImage = function (element) {

if (ImgCache.jQuery) {
    return element.attr('data-old-background') ? "url(" + element.attr('data-old-background') + ")" : element.css('background-image');
} else if (ImgCache.jQueryLite) {

    var style = window.getComputedStyle(element[0], null);
    if (!style) {
        return;
    }
    return element[0].getAttribute("data-old-background") ? "url(" + element[0].getAttribute("data-old-background") + ")" : style.backgroundImage;

} else {
    var style = window.getComputedStyle(element, null);
    if (!style) {
        return;
    }
    return element.getAttribute("data-old-background") ? "url(" + element.getAttribute("data-old-background") + ")" : style.backgroundImage;
}
};

然后我在我的观点中将指令应用于离子内容:

现在背景图像也在脱机工作。

谢谢!