jQuery Rollovers没有预加载

时间:2009-07-09 11:39:20

标签: jquery rollover

$('.ro').hover(
    function(){
        t = $(this);
        t.attr('src',t.attr('src').replace(/([^.]*)\.(.*)/, "$1_o.$2"));
    },
    function(){ 
        t = $(this);
        t.attr('src',t.attr('src').replace('_o',''));
    }
 );

我使用此代码,以便(对于例如)类'ro'的test.gif在翻转时将更改为test_o.gif,问题是当图像不在缓存中时,翻转和滚降存在延迟

基本上,如果我清除缓存并访问测试页面,每次翻转和滚动图像时,每次都会加载文件,因此您可以在那里坐几个小时,每次都会加载翻转图像。但是,当我刷新页面并且图像现在位于缓存中时,它立即工作,这是我需要实现的。

我尝试过使用此

http://flesler.blogspot.com/2008/01/jquerypreload.html

使用此

预加载图像的插件
$.preload('.ro');

代码,但似乎没有效果。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

只需在doc ready上创建一个虚拟图像,不需要插件。

$(function(){
   $('<img />').attr('src',url);
});

答案 1 :(得分:0)

将您与Preloading images with jQuery上的那个相结合,然后您会得到一个简短的脚本,它会预先加载图像,然后将它们悬停在指定选择器的任何位置。 例如

    //preload images
    $('.ro').each(function(){
        $('<img/>').appendTo('body')
            .css({ display: "none" })
            .attr('src',$(this).attr('src').replace(/([^.]*)\.(.*)/, "$1_on.$2"));
    });
    //hover them
    $('.ro').hover(
        function(){
            t = $(this);
            t.attr('src',t.attr('src').replace(/([^.]*)\.(.*)/, "$1_on.$2"));
        },
        function(){ 
            t = $(this);
            t.attr('src',t.attr('src').replace('_on',''));
        }
     );

这种方法是将它们附加到body标签,以处理IE丢弃未添加到DOM的图像的问题(如与此相关的其他帖子中所述),但是您可以将它们粘贴到任何有意义的地方你。

我喜欢这篇文章中的方法,因为你不必提前声明一个图像数组,只需采用翻转的命名约定和一个类名,你就可以进行排序。