Можно ли анимировать фоновый URL-адрес с помощью jQuery?

#jquery #navigation #jquery-animate #hyperlink #fade

#jquery #навигация #jquery-анимировать #гиперссылка #исчезновение

Вопрос:

Мне интересно, можно ли анимировать фоновый URL-адрес с помощью jQuery, и если нет, то какие у меня есть альтернативы. Мой HTML-код навигационной панели выглядит следующим образом:

 <li><a href="index.html" class="fade nav top current" id="index"><img style="margin: 90px 0 0 0px" src="images/home.png"></a></li>
     <li><a href="about.html" class="fade nav bottom" id="about"><img class="flip" style="margin: 84px 3px 0 0px" src="images/about.png"></a></li>
     <li><a href="#" id="contact" class="nav top"><img style="margin: 82px 2px 0 0px" src="images/contact.png"></a></li>
 

Тогда CSS для ссылок в навигационной панели выглядит следующим образом:

 a.nav {
    height: 170px;
    width: 118px;
    display: block;
    margin: 0 auto;
}

a.top, a.bottom {
    background: url('images/bodhi-leaf-brown.png') no-repeat;
}

a.current, nav a:hover {
    background: url('images/bodhi-leaf-green.png') no-repeat !important;
}
 

Затем у меня есть скрипт jQuery, который одновременно управляет перемещением контактной формы, а также добавляет и удаляет класс «current» в / из навигационных ссылок, чтобы фоновое изображение менялось:

 $(function ()
{

    var newHash = "",
        $mainContent = $("#main-content"),
        $pageWrap = $("#page-wrap"),
        baseHeight = 0,
        $el,
    curTab = "#index";

    $("nav").delegate("a.fade", "click", function ()
    {
        window.location.hash = $(this).attr("href");
        $("#panel").slideUp("slow");
        $(this).addClass("current", 3000);
        $("#contact").removeClass("current", 3000);
        return false;
    });

    $(window).bind('hashchange', function ()
    {

        newHash = window.location.hash.substring(1);

        if (newHash)
        {
            $pageWrap.height($pageWrap.height());
            baseHeight = $pageWrap.height() - $mainContent.height();

            $mainContent
                .find("#guts")
                .fadeOut(500, function ()
                {
                    $mainContent.hide().load(newHash   " #guts", function ()
                    {
                        $pageWrap.animate({ height: baseHeight   $mainContent.height()   "px" }, function ()
                        {
                            $mainContent.fadeIn(500);
                            $pageWrap.css("height", "auto"); 
                        });

                        $("nav a").removeClass("current");
                    curTab = "#"   /^(. ).. $/.exec(newHash)[1];
                    $(curTab).addClass("current");
                    });
                });
        };
    });

$("#contact").click(function ()
{
    $("#panel").slideDown("slow");
    $(this).addClass("current");
    $("#index, #about").removeClass("current");
    return false;
});

$(".close").click(function ()
{
    $("#panel").slideUp("slow");
    $(curTab).addClass("current");
    $("#contact").removeClass("current");
    return false;
});

    $(window).trigger('hashchange');

});
 

Я хочу, чтобы между фоновыми изображениями при наведении курсора мыши и функциями щелчка тоже было затухание. Отсюда и мой вопрос об анимации фоновых изображений с помощью jQuery. Если это невозможно сделать, есть ли другой метод, который я мог бы использовать, который включал бы существующий скрипт, который у меня есть?

Вы можете увидеть страницу в ее текущем виде здесь.

Спасибо,

Ник

Комментарии:

1. просто измените свойство css ‘background’.

2. @bitsMix спасибо. Не могли бы вы подробнее объяснить, что вы имеете в виду? Можно ли анимировать свойство CSS background?

Ответ №1:

вот как вы можете использовать функцию наведения с помощью animate. Есть еще один эффект, просто найдите подходящий для вас на странице документа jQuery для анимации.

  $("nav a").hover(
    function() {
        $(this).animate({
            opacity: .6
        }, {
            duration: 100,
            specialEasing: {
                opacity: 'linear',
            },
            complete: function() {

                $(this).addClass("aHover").animate({
                    opacity: 1
                }, {
                    duration: 100,
                    specialEasing: {
                        opacity: 'linear',
                    }
                });
            }
        });
    }, function() {
        $(this).animate({
            opacity: .6
        }, {
            duration: 100,
            specialEasing: {
                opacity: 'linear',
            },
            complete: function() {

                $(this).removeClass("aHover").animate({
                    opacity: 1
                }, {
                    duration: 100,
                    specialEasing: {
                        opacity: 'linear',
                    }
                });
            }
        });
    });
 

наведите анимацию

Комментарии:

1. Спасибо. Это выглядит многообещающе! Можете ли вы посоветовать, как я могу продлить эффект затухания? Я хотел бы довольно быстрое исчезновение при наведении, т.е. 500 мс, и более длительное исчезновение, когда пользователь «покидает» div, т.е. 3000 мс. Я пытался настроить продолжительность в вашем скрипте, но из-за используемого вами метода это выглядит неправильно.

2. продолжительность: 100 — измените его на то, что вам нужно. для непрозрачности также непрозрачность: .6 (используйте значения от 0 до 1)

3. Спасибо. Я тоже пробовал это. Похоже, что при использовании вашего метода один фон должен быть полностью удален, прежде чем другой может быть удален, а это не то, что я ищу. Мне нужно правильное перекрестное увядание, чтобы листья просто меняли цвет с коричневого на зеленый и обратно.

4. Хорошо, я пометил ваш ответ как правильный, так как он действительно отвечает на вопрос. Сейчас я пробую другой метод, который использует divs с абсолютным позиционированием и jquery для анимации затухания div с зелеными листьями, а не фоновыми изображениями, так как я думаю, что это будет лучше работать для моих целей. Я включаю в это часть вашего кода. Спасибо, Ник