【问题标题】:jQuery - making sure content is loaded before it's faded in?jQuery - 确保内容在淡入之前加载?
【发布时间】:2010-05-01 23:34:50
【问题描述】:

Nick Craver 在这个线程中的这段代码真的帮了我很多 jQuery - Can someone help stitching jQuery code with .ajaxComplete()?

而且它正在工作。但我注意到,在我单击链接之后和实际加载内容之前,会有一点延迟。加载的内容也不是很密集,所以我认为这与脚本中发生的事情的顺序有关。

原始代码如下所示:

$('.dynload').live('click',
 function(){

 var toLoad = $(this).attr('href')+' #content';
 $('#content').fadeOut('fast',loadContent);
 $('#ajaxloader').fadeIn('normal'); 

 function loadContent() {
     $('#content').load(toLoad,'',showNewContent())
 }
 function showNewContent() {
    $('#content').fadeIn('fast',hideLoader());
    //Cufon.replace('h1, h2, h3, h4, .menuwrapper', { fontFamily: 
'advent'}); 
 }
 function hideLoader() {
     $('#ajaxloader').fadeOut('normal');
 }

 return false;

 });

新代码如下所示:

$(function() {
  $('.dynload').live('click', function(){
    $('#ajaxloader').fadeIn('fast');
    $('#ajaxloaderfridge').fadeIn('fast');
    var href = this.href + ' #content';

    $('#content').fadeOut('fast',function() {
      $(this).load(href,'', function(data) {
        createMenus();
        $('#ajaxloader').fadeOut('fast');
        $('#ajaxloaderfridge').fadeOut('fast');
        $('#content').fadeIn('fast');
        Cufon.replace('h1, h2, h3, h4, .menuwrapper', { fontFamily: 'advent'});
      });
    }); 
    return false;
  });
});
$(createMenus);

function createMenus() {
  $('#kontrollpanel .slidepanels').kwicks({
     min : 42,
     spacing : 3,
     isVertical : true,
     sticky : true,
     event : 'click'
  });                    
}

在原始代码中,#content 淡出,然后启动函数“loadContent”。 这基本上也是新脚本中发生的事情,不是吗? 当我使用旧代码时,内容只是淡出淡入,非常快速流畅,并且在内容到达之前没有小的暂停延迟。

【问题讨论】:

  • 能否麻烦您简要说明一下您想要发生的事情?
  • /img/Footer.png/img/sprite_tints1.png/img/testGB.jpg 得到 404,这会导致浏览器延迟,您可以修复或删除这些图像吗?
  • 我尼克 :) 感谢您让我清楚这些问题 :) 我现在已经修复了它们(这是我的图片预加载器:p)但是,它看起来不像不过和我的问题有关系。然而,我确实注意到了 mattbasta 的回复。编辑:这不是一个真正的大问题,只是有点烦人:)
  • @GlenCrawford - 以前,内容淡出和淡出的整个动画似乎快了很多。基本上就是这样。而且它看起来有点奇怪,但我会尝试自己调整一些东西:)

标签: javascript jquery html


【解决方案1】:

为了更快的加载,将您的点击处理程序更改为:

$('.dynload').die('click').live('click', function(){
  $('#ajaxloader, #ajaxloaderfridge').fadeIn('fast');
  var href = this.href + ' #content';
  $('#content').fadeOut('fast').load(href, function(data) {
    createMenus();
    $('#ajaxloader, #ajaxloaderfridge').fadeOut('fast');
    $(this).stop().fadeTo('fast', 1);
    Cufon.replace('h1, h2, h3, h4, .menuwrapper', { fontFamily: 'advent'});
  }); 
  return false;
});

这会立即触发内容的加载,而不是等待淡入淡出完成。这意味着您的内容加载速度快了 200 毫秒,如果它在淡出完成之前加载,没问题,它会停止淡入并开始淡入。

【讨论】:

  • 哈哈,现在和以前一模一样,但现在 Cufon 和幻灯片菜单也能正常工作了! :D
【解决方案2】:

更新:

$('#content').fadeOut('fast',function() {
      $(this).load(href,'', function(data) {
        createMenus();
        $('#ajaxloader,#ajaxloaderfridge').hide();
       // $('#ajaxloaderfridge').fadeOut('fast');
        $('#content').fadeIn('fast');
        Cufon.replace('h1, h2, h3, h4, .menuwrapper', { fontFamily: 'advent'});
      });
   });

或者试试这个:

$('#content').fadeOut('fast',function() {
  $(this).load(href, '', function(data) {
        createMenus();
        $('#ajaxloader,#ajaxloaderfridge').hide();
        Cufon.replace('h1, h2, h3, h4, .menuwrapper', {
            fontFamily: 'advent'
        });
    });
}).fadeIn('fast');

【讨论】:

  • 这实际上并没有改变。我知道你的代码在做什么,但我认为这不是问题的根源。
  • 你到底在这里做什么?我真的看不出有什么真正的区别。我看到你在那里做了一个 .hide() 。但这不是一个真正的问题。这只是一个单独的 div 中的加载器动画。这是应该隐藏然后淡入的#content。这是在做什么吗? FadeOut 应该换成 hide?​​span>
【解决方案3】:

你的原始代码的问题是这样的:

$('#content').load(toLoad,'',showNewContent())

实际上,您当时正在打电话给showNewContent。您想将其作为回调传递。它应该看起来像:

$('#content').load(toLoad,'',showNewContent)

同理:

$('#content').fadeIn('fast',hideLoader());

应该是:

$('#content').fadeIn('fast',hideLoader);

【讨论】:

  • 啊,好吧,所以我尝试回到第一个原始代码并从这些行的后面删除 ()。并且发生了同样的问题(小的暂停延迟)。所以,我只能忍受它吗?这就是它的工作原理?我想我可以尝试不同的动画。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多