2010-01-06 35 views
2

说你有mootools的数组:如何在mootools中链接数组?

// get the elements and set them as slide 
var slideElements = $$('.mySlideElements'); 
slideElements.set('slide'); 

// and fire the event -> would slide all elements out at the same time 
slideElements.slide('out'); 

我怎么能放入链给他们看滑动一次一个?

到目前为止,我只是成功地链接,如果我知道我将要执行的操作的确切人数。谢谢你的帮助。

回答

1

我最终把一个大量的工作,这其中,链接比我想象的第一眼麻烦很多。我从来没有用它在相当这种方式之前:d

你绝对可以通过slideElements阵列循环。将元素事件链接到彼此是棘手的部分。我结束了,通过每个slideElement和链环在列表中的当前项目上一个项目的循环闭合功能:

<!-- Working example of chained sliding divs --> 
<div class="mySlideElements" style="background: red" id="slide1">Slide 1</div> 
<div class="mySlideElements" style="background: yellow">Slide 2</div> 
<div class="mySlideElements" style="background: green">Slide 3</div> 
<div class="mySlideElements" style="background: purple">Slide 4</div> 
<script type="text/javascript"> 
    var slideElements = $$('.mySlideElements'); 
    slideElements.set('slide'); 

    for(var i = 1; i < slideElements.length; i++) (function(c1,c2){ 
     c1.get('slide').chain(function(){c2.slide()}); 
    })(slideElements[i-1],slideElements[i]); 

</script> 

<input type="button" onclick="$('slide1').slide()" value="slide"/> 

调用get('slide')的回报这是每一个元素上设置的Fx.Slide对象,你然后可以链接到一个函数。我Mootools的福是没有强大到足以弄清楚如何直接IT连锁到下一个元素的slide属性(应该是一个函数,但它似乎没有工作),所以我结束了与你在chain()调用中看到的匿名函数几乎一样好。闭环function(c1,c2)有必要防止本地i循环变量在调用链接匿名函数时超出范围。

它设置为当第一个元素的slide功能被触发了连锁反应。如果您需要整个事情级联只要单击任何元素,你可能想设置每个元素的onClick触发事件,第一个元素的slide(),而不是自己。

无论如何,上面的代码是一个工作的例子。我希望结果是你正在寻找的。

+0

它已经很长时间了b不幸的是,我不得不在(悲伤)之后不久将所有代码切换到jQuery。不过,我接受了这条建议,现在就在家里尝试了一下。完美的作品!非常感谢你!希望它能帮助所有的动作者! ;) – Frankie 2010-04-21 23:51:16

0

在我看来,这是一个更好的/“mootoolsy”的做法。 FX实例提供了两个可以使用的东西:link:“chain”和onComplete:函数。所以是这样的:

var slideEls = function(els) { 
    if (!els.length) 
     return; 

    var lastEl = els.getLast();  
    lastEl.set("slide", { 
     duration: "long", 
     link: "chain", 
     onComplete: function() { 
      els.erase(lastEl); 
      slideEls(els); 
     } 
    }).slide("out"); 
}; 

slideEls($$('div.mySlideElements')); 

工作示例这里:http://mootools.net/shell/GmUpM/

这将与元素的无限数组的长度工作滑出

0

试试这个:

$$('.mySlideElements') 
    .set('slide', { 
     onComplete: function (el) 
     { 
      if (el = el.getParent().getNext ('.mySlideElements')) 
       el.slide ('out'); 
     } 
    }) 
    [0].slide ('out'); 

它只是要求.mySlideElements是直接的兄弟姐妹