我编写了一个小脚本,根据“显示”属性观察点击和上/下百叶窗,并向blindUp 添加了一个队列到结束参数,以避免更严重的显示问题。这显然不是实现此目的的方法,因为如果在效果中间调用单击事件,则会出现显示错误。这是代码:
<script type="text/javascript">
$$('#leftnav_container #modules h2').each(function(El){
El.observe('click',function(){
container = this.next('div');
display = container.getStyle('display');
if(display == 'none'){
container.blindDown({duration: 0.3});
}else{
container.blindUp({duration: 0.3, queue: 'end'});
}
})
});
</script>
同样,问题是我依赖“显示”。正确的方法是什么?
最佳答案
这应该会简化它
$$('#leftnav_container #modules h2').invoke('observe','click',function(){
container = this.next('div');
Effect.toggle(container , 'blind', { duration: 0.3 });
});
首先,如果您仅对从 $$()
返回的数组中的所有元素运行一个方法那么你可以使用PrototypeJS方法invoke()
.
http://api.prototypejs.org/language/Enumerable/prototype/invoke/
然后Effect.toggle()
将检查元素是否可见并执行适当的向上/向下效果。
尝试一下,让我知道它是否适合您。
关于javascript - 脚本性的blindUp/blindDown问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20471510/