正在将flash动画转换为jquery#
我基本上有一堆不同颜色的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是未定义的,如果我尝试使用.animate作为mathew的建议我得到太多的递归
答案 0 :(得分:2)
我建议您查看jQuery动画http://api.jquery.com/animate/并设置回调以执行相反的淡入淡出。
他们的例子使用不透明度来制作动画,所以也许这会给你带来理想的效果。
答案 1 :(得分:1)
当您在循环中以及setFadeIn函数中创建间隔对象时,会导致以指数方式创建间隔对象。最终会崩溃浏览器。
相反,你可以在循环中做一件事,创建两个间隔,一个用于fadeOut,一个用于fadeIn。在'慢'的情况下,使用你选择的几毫秒。
然后应该在每个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);
}