Jquery ajax. Как сделать плавную смену изображений и индикацию загрузки?

Доброго времени суток друзья! Есть у меня что-то наподобие галереи, выглядит так:

fbb8a4e32fc74ecb84aaf92115bf5b7c.jpg

Работает следующим образом: щелкаешь на кнопку с шаблоном ткани и загружается картинка из базы данных с соответствующим описанием. Дело в том что смена изображения выглядит не очень хорошо.
В интернете не смог найти подходящего решения. Хотелось бы чтобы изображение появлялось плавно, и пока идет загрузка, появлялся соответствующий индикатор в виде GIF-ки. При этом лучше всего было бы чтобы предыдущее изображение не исчезало пока не загрузится новое. Использую простейший jquery ajax запрос:

$(document).ready(function() {
    $('#select-menu').find('a').click(function() {
        var formData = $(this).attr('href');
        $.ajax({
            type: "GET",
            url: "image.php",
            data: formData,
            cache: true,
            content: "html",
            success: function processData(data) {
                $('#item-wrapper').html(data);
            }
        });
        return false;
    });
});


На данный момент получается что изображение появляется резко, при этом старое пропадает и вместо него на секунду появляется в углу значок не загрузившегося изображения. Поэтому и хочу этот процесс замаскировать.

Обращение происходит к этому сценарию:

<?php
if (isset($_GET['cloth']) && isset($_GET['cloth_index'])) {
    $imageCloth = getItemImage($getId, $keyClass, $keySubclass, $getCloth, $getClothIndex);
    if(!empty($imageCloth)) {
        foreach ($imageCloth as $img) {
            $itemCatTitle = $img['catalog_title'];
            $itemTitle =  $img['title'];
            $itemImg = $img['image'];
        }
        ?>
        <div id="item-wrapper">
            <figure>
                <b class="loading"></b>
                <img src="./uploads/catalog/items/<?php echo $itemImg; ?>">
            </figure>
        </div>
    <?php
    }
    else {
        include('noitem.html');
    }
}


Рассматривал такой вариант:
если добавить "beforeSend:" анимацию загрузки, это добавит лишь анимацию загрузки, изображение будет также дергаться. К тому же эта анимация появится перед отправкой данных на сервер, а нужно её вставить, пока принимает данные. Видел множество галерей, где это реализовано, но там немного иначе всё работает. Как быть с подобным запросом? Подскажите пожалуйста!
  • Вопрос задан
  • 859 просмотров
Решения вопроса 1
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
  • Посылаем запрос, вызываем GIF
  • Получаем картинку
  • Вешаем обработчик ей на событие load, по которому будем возвращать прозрачность и убирать предыдущую картинку и гифку
    (Или если гифка поверх старой картинки, можно ее сразу удалять)
  • Ставим ей opacity:0
  • Добавляем в DOM


UPD: примерная реализация.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы