2010-11-19 45 views
0

正在转换flash动画到的jquery#jquery的衰落多个div与不同的定时

我基本上的div它们是不同的颜色的一个负载,我想的div到淡入和淡出,每个div有一个不同基于fibonachi序列的时间,

我有问题分配一个淡入淡出功能的div,我希望淡出功能淡出div然后完成淡入淡出,并继续重复每个div的过程。

这里是我目前的代码,但它崩溃的Firefox大概与我有这么多setintervals任何人都可以指出我在正确的方向吗?

var myDiv ='#bannerHolder' 
    var fib_str = '1, 2, 3, 5, 8, 13, 21, 1, 2, 3, 5, 8, 13, 21, 1, 2, 3, 5, 8, 13, 21, 1, 2, 3, 5, 8, 13' 
    var widths_str = '33px, 31px, 35px, 9px, 16px, 50px, 33px, 24px, 40px, 20px, 63px, 30px, 10px, 29px, 11px, 12px, 51px, 31px, 35px, 11px, 14px, 50px, 30px, 25px, 38px, 20px, 35px' 
    var pos_str = '0px, 44px, 105px, 144px, 153px, 203px, 236px, 269px, 280px, 354px, 374px, 437px, 447px, 457px, 506px, 517px, 529px, 604px, 646px, 687px, 698px, 712px, 762px, 787px, 823px, 895px, 915px' 
    var color_str = '#D5E1D7, #18D4C9,#BF51C3,#1E82C9, #EDEDED, #E1C981, #C9A94F, #BDBCAA, #5DB522, #EB2F34, #823133, #004BD8, #A6A0A0, #DS9F36, #FFDB00, #69944F, #18D4C9, #BF51C3, #1E82C9, #6B949A, #FFDB00, #819E64, #BDBCAA, #54BA43, #EB2F34, #823133' 
    var width = widths_str.split(","); 
    var pos = pos_str.split(","); 
    var color = color_str.split(","); 
    var fib = fib_str.split(","); 
    console.log(width); 
    console.log(pos); 
    console.log(color); 
    var counter = width.length 
    var stopper = false; 
      for(i=0;i<counter;i++){ 
     var html = '<div id ="stripe'+i+'"/>' 
     $(myDiv).append(html) 
     $('#stripe'+i).css({ 'top': 0, 'left': pos[i],'position': 'absolute', 'float': 'left', 'background-color' : color[i]}) 
     $('#stripe'+i).attr({'height': 100, 'width': width[i], 'min-width' : width[i], 'min-height' : '100px' }) 
     $('#stripe'+i).width(width[i]) 
     $('#stripe'+i).height('100px') 
     var myfibtime = (fib[i] * 200); 
     setInterval(stripeFadeOut(i), myfibtime); 
       setInterval(stripeFadeIn(i), myfibtime); 
    }; 
    function stripeFadeOut(id){ 
     $('#stripe'+id).fadeOut('slow'); 
     var myfibtime = (fib[id] * 200); 
    } 
    function stripeFadeIn(id){ 
     $('#stripe'+id).fadeIn('slow'); 
     var myfibtime = (fib[id] * 200); 
    } 

}) 

如果我使用setInterval('stripeFadeIn(' + id + ')', myfibtime+';我得到stripeFadeIn是不确定的,如果我尝试使用。马马如果我提供了太多的递归

回答

1

正如您在循环中创建区间对象以及在setFadeIn函数中那样,这会导致按指数规律创建区间对象。最终通过浏览器崩溃结束。

相反,您可以在循环中做一件事,创建两个间隔,即一个用于淡出和一个用于淡入淡出。在“缓慢”的状态下,使用一些毫秒的选择。

然后,应该在每个myfibtime + animatingMilliseconds = fadeOutInterval上调用您的fadeOut。并且应该在每个fadeOutInterval + animatingMilliseconds上调用您的fadeIn。

我希望这会帮助你

我的建议完全是指你的旧代码。所以,做这样的

for(i=0;i<counter;i++){ 
     var html = '<div id ="stripe'+i+'"/>' 
     $(myDiv).append(html) 
     $('#stripe'+i).css({ 'top': 0, 'left': pos[i],'position': 'absolute', 'float': 'left', 'background-color' : color[i]}) 
     $('#stripe'+i).attr({'height': 100, 'width': width[i], 'min-width' : width[i], 'min-height' : '100px' }) 
     $('#stripe'+i).width(width[i]) 
     $('#stripe'+i).height('100px') 
     var myfibtime = (fib[i] * 200); 
     var animTime = 1500; 
     var fadeOutInterval = myfibtime + animTime; 
     var fadeInInterval = fadeOutInterval + animTime; 
     setInterval(stripeFadeOut(i), fadeOutInterval); 
     setInterval(stripeFadeIn(i), fadeInInterval); 
    }; 
    function stripeFadeOut(id){ 
     $('#stripe'+id).fadeOut(1500);    
    } 
    function stripeFadeIn(id){ 
     $('#stripe'+id).fadeIn(1500); 
    } 
+0

谢谢,但现在有点失落了,我已经改变了我的问题中的代码,以reflext ushehg .animate()用一个完整的参数,所以我不知道你是在谈论原始代码或更新后的代码的mathews suguestion ,一些示例代码将是真正有用的,我对此没有任何地方:( 我已更新我的问题,以删除mathew提出的代码,因为.animate方法会导致太多的递归 – 2010-11-19 18:29:38

2

我建议查看jQuery动画并设置一个回调来做相反的淡出。

他们的例子使用不透明度的动画,所以也许会给你想要的效果。

+0

您好感谢马修IVE编辑使用动画的代码,但我得到一个太多的递归误差看到我的改变的代码中的问题 – 2010-11-19 16:43:01

+0

一个问题我与你的代码中看到的是的setTimeout(stripeFadeIn(ID) ,myfibtime);立即调用stripFadeIn。你应该做setTimeout('stripeFadeIn('+ id +')',myfibtime); – Matthew 2010-11-19 16:48:06

+0

现在我得到stripeTimeOut没有定义 – 2010-11-19 17:02:13