Как «анимировать» переход между страницами с помощью jquery .load()

#javascript #jquery #ajax

#javascript #jquery #ajax

Вопрос:

У меня есть этот ajax-сайт, через который загружаются страницы load() , но как мне добавить переход? Простое затухание fadeIn уже было бы неплохо.

Это код, который я использую для его загрузки (плюс индикатор загрузки).

Я хочу, чтобы текущая страница (просто контейнер) исчезала, а новая появлялась с исчезновением

 $(document).ready(function() {
    $('a').click(function(event) {
        $("#container").append('<div id="loading">Loading...</div>');
        event.preventDefault();
        var url = $(this).attr('href');
        $('div#container').load(url, function() { $("#loading").fadeOut() });
    });
});
  

Ответ №1:

Вам нужно что-то более мелкозернистое, чем .load() , чтобы вы могли сделать это fadeOut() перед вставкой нового содержимого:

 $(function()
{
    var $container = $('#container');

    $('a').click(function()
    {
        $container.html('<div id="loading">Loading...</div>');

        var url = $(this).attr('href');

        $.get(url, function (data)
        {
            $("#loading").fadeOut(function()
            {
                // without this the DOM will contain multiple elements
                // with the same ID, which is bad.
                $(this).remove();

                $container.hide().html(data).fadeIn();
            });
        });

        return false;
    });
});
  

(Очень простая) демонстрация:http://jsfiddle.net/mattball/Cgqbx

Ответ №2:

Если вы пытаетесь вводить и удалять содержимое, может быть полезно анимировать атрибут opacity, а не полностью скрывать элемент, чтобы сохранить высоту контейнера.

 $(document).ready(function() {
    $('a').click(function(event) {
        $("#container").animate({'opacity': 0}, 200);
        event.preventDefault();
        var url = $(this).attr('href');
        $('div#container').load(url, function() {
            $(this).animate({'opacity': 1}, 200);
        });
    });
});
  

Ответ №3:

Убедитесь, что у вас есть html-разметка, примерно такая:

 <div id="container">
    <div id="content"></div>
</div>
  

css:

 #loading { display:none }
  

Затем с помощью простого jQuery вы сможете разобраться в этом:

 $(function() {
    $('a').click(function(e) {

        e.preventDefault();

        var url = $(this).attr('href');
        var content = $('#content');

        content.fadeOut(400, function() {

            $("#container").append('<div id="loading">Loading...</div>');

            var loading = $('#loading');

            loading.fadeIn(400, function() {
                content.load(url, function() { 
                    loading.fadeOut(400, function() {
                        $(this).remove();
                        content.fadeIn(400);
                    });
                });
            });   
        });
    });
});
  

Имеет смысл?

редактировать: немного изменен.