2011-10-27 32 views
1

我正在使用mootools 1.4.1,我试图获得一个“补间”屏幕宽度以在完成时触发另一个函数的div。然而,补间继续射击,我不相信它是射击我想要的功能。使用mootools的代码1.4.1导致无限循环

的代码如下:

$('photo-loading_amt').set('tween', {duration: '1000ms', 
            link: 'cancel', 
            transition: 'linear', 
            property: 'width', 
            onComplete: function() { 
                var photoContainers = $$('.photo-container') 

                if (photoNum != photoContainers.length) { 
                 nextPhoto(photoNum.toInt() + 1); 
                } 
                else { 
                 nextPhoto(1); 
                }  
               } 
          }); 

,你可能有,将不胜感激任何帮助。

@Dimitar克里斯托夫,这里是为nextPhoto函数的代码:

function nextPhoto(photoNum) { 
resetTimeline(); 

var photoContainers = new Array(); 

photoContainers = $$('.photo-container'); 

var photoFx = new Fx.Tween(photoContainers[photoNum.toInt() - 1], { 
           duration: 'normal', 
           transition: Fx.Transitions.Sine.easeOut, 
           property: 'opacity', 

           onComplete: function() { 
                  photoContainers[photoNum.toInt() - 1].setStyle('visibility', 'hidden'); 
                  photoContainers[photoNum.toInt() - 1].setStyle('opacity', 1); 

                  if (photoNum == photoContainers.length) { 
                   photoContainers[0].setStyle('z-index', photoContainers.length); 
                  } 
                 } 
          }); 

if (photoNum == photoContainers.length) { 
    photoContainers[0].setStyle('z-index', 0); 
} 

photoFx.tween(1, 0); 
//alert("photoNum = " + photoNum + "\n" + "photoContainers.length = " + photoContainers.length); 
if (photoNum == photoContainers.length) { 
    photoContainers[0].setStyle('visibility', 'visible');  
} 
else { 
    photoContainers[photoNum.toInt()].setStyle('visibility', 'visible'); 
    //loadingPhotos(photoNum.toInt() + 1); 
} 
// hard reset the loadingPhotos function  

} //函数结束nextPhoto

+1

这段代码确实没有显示任何递归,除非nextPhoto调用相同的代码,这会导致onComplete再次触发。请你再多展示一下。否则,你可以尝试使用onComplete的pseudo:once事件,例如。 'element.get(“tween”)。addEvent(“complete:once”,fn)' –

+0

@Dimitar Christoff,这里是nextPhoto的代码。它_does_调用加载图片,上面的代码嵌入的功能,但它现在被注释掉了,它仍然重复。 – forgivenphoenix

回答

0

因为我没有看到你的代码,一个明显的循环,我会怀疑

link: 'cancel' 

在您的第一个代码块中造成的影响。根据Moo文​​档,这将会:

'cancel' - 任何在效果运行时启动的调用将优先于当前运行的转换。新的转换将立即开始,取消当前正在运行的转换。

所以这可能会让你的孩子感到不安。不过,你可能故意添加了这个。我会尝试将它改为chainignore,无论是在第一个还是第二个补间安装中,以查看最佳组合。 如果这不能解决它,也许你可以发布一些更多的代码。例如,我没有看到resetTimeline函数的代码。也许你的代码卡在这里。