То, что вы просите, чтобы все выполнялось после вашего load()
, только когда он что-то загружает ...
load()
является асинхронным, и вы можете увидеть полную подпись метода на веб-сайте jQuery , где говорится, что вы можете добавить function
, который будет срабатывать при завершении загрузки.
из вашего примера просто поместите все после вашего load()
внутри этого метода ...
конечный результат должен выглядеть следующим образом:
var clickedAnchors = [];
$(document).ready(function() {
$('#nav li a').click(function() {
var toLoad = $(this).attr('href')+' #content';
var oldHeight = $('#content').css("height");
var viewportHeight = $(window).height();
$('#content').animate({
top: "-" + oldHeight
}, 'slow', function() {
$('#content').hide();
$('#content').load(toLoad, function() {
$('#content').animate({
top: viewportHeight + "px"
});
$('#content').show();
$('#content').animate({
top: "0px"
}, 'slow');
}); // close load
}); // close animate
return false;
}); // close selector
}); // close document.ready
Помните, что одна из лучших функций jQuery - это каскадирование, поэтому ваш код может выглядеть так:
var clickedAnchors = [];
$(document).ready(function() {
$('#nav li a').click(function() {
var currentId = $(this).attr('id');
if($.inArray(currentId, clickedAnchors) < 0) {
// this anchor was not yet clicked
var toLoad = $(this).attr('href')+' #content',
oldHeight = $('#content').css("height"),
viewportHeight = $(window).height();
$('#content').animate({ top: "-" + oldHeight }, 'slow', function() {
// after animated is completed
$('#content')
.hide()
.load(toLoad, function() {
$(this).animate( { top: viewportHeight + "px" }, function() {
// after animation has completed
$(this)
.show()
.animate({ top: "0px" }, 'slow');
});
});
});
// remove this anchor from being clicked again,
// so let's add it's id into the array
clickedAnchors.push(currentId);
}
return false;
});
});