【发布时间】:2011-08-02 12:56:11
【问题描述】:
我正在尝试自学 Jquery 效果以使我的网站更加生动。我创建了一个如下所示的练习页面:
<article><a class="front-fire" href="1"></a></article>
<article><a class="front-fire" href="2"></a></article>
<article><a class="front-fire" href="3"></a></article>
<div class="presentation-wrapper">
<div class="load"></div>
<div class="presentation"></div>
</div>
<div class="kill></div>
<article><a class="front-fire" href="4"></a></article>
<article><a class="front-fire" href="5"></a></article>
<article><a class="front-fire" href="6"></a></article>
<div class="presentation-wrapper">
<div class="load"></div>
<div class="presentation"></div>
</div>
<div class="kill></div>
它的目标是,如果我点击一个链接,它会展开最近的presentation-wrapper 淡化加载 gif,加载内容,淡出 gif,然后显示内容。单击另一个链接后,它会隐藏任何打开的presentation-wrappers,然后重新显示打开顺序。我想我已经掌握了如何将动画串在一起的方法,但我不知道如何在 divs 类中循环并隐藏可见的那些。
这是我在外部文件中的 javascript。 #primary 附加用于我的调试目的:
$(document).ready(function() {
$('a').click(function(e) {
e.preventDefault();
$('#primary').append("pressed");
var toLoad = $(this).attr('href')+' #post-body';
var wrap = $(this).parents().filter('article').nextUntil('.kill', '.presentation-wrapper');
var load = $(wrap).children('.load');
var pres = $(wrap).children('.presentation');
var allwraps = $(".presentation-wrapper");
$(".presentation-wrapper").each(function() {
if ($(this).is(':visible')) {
$('#primary').append("6");
$('.presentation').fadeOut(3000, function() {
$('#primary').append("7");
$('.presentation-wrapper').slideUp(3000);
});
}
});
switcher();
function switcher() {
$(wrap).slideDown(3000, loadLoader);
$('#primary').append("1");
function loadLoader() {
$(load).fadeIn(3000, loadContent);
$('#primary').append("2");
}
function loadContent() {
$(pres).load(toLoad, hideLoader);
$('#primary').append("3");
}
function hideLoader() {
$(load).fadeOut(3000, showNewContent);
$('#primary').append("4");
}
function showNewContent() {
$(pres).fadeIn(3000);
$('#primary').append("5");
}
};
});
});
我知道这是一个很大的问题,也许这不是问的地方,但我一直在用头撞墙,试图找出问题所在。它在第一次点击时起作用,但.each() 似乎把整个事情搞砸了!
::Addition:也许这个细节会有所帮助。出于某种原因, .each() 中的“7”函数会在任何时候任何 div 可见时不断触发。就像是一个警察,在它被召唤后否定任何发生的事情!::
【问题讨论】:
-
您的所有
<article>元素开始 都以</article>结束标记只是一个错字吗? -
顺便说一句,但如果您要选择一组,只需选择一次并缓存它。例如,您加载了
allwraps,但随后忽略它并重新选择 .presentation-wrapper 两次。 -
错字!哎呀。我简化了 html,这样你就不必看到我所有其他 html 练习的东西了。
-
var allwraps = $(".presentation-wrapper"); $(allwraps).each(function() {
标签: javascript jquery jquery-animate each