【问题标题】:Is it possible to animate background url using jQuery?是否可以使用 jQuery 为背景 url 设置动画?
【发布时间】:2011-12-13 03:05:53
【问题描述】:

我想知道是否可以使用 jQuery 为背景 url 设置动画,如果没有,我有什么替代方案。我的导航栏 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 脚本,它既可以控制联系表单的滑动,又可以在导航链接中添加和删除“当前”类,以便背景图像发生变化:

$(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 为背景图像设置动画。如果无法做到这一点,是否可以使用另一种方法来合并我拥有的现有脚本?

您可以查看当前页面here

谢谢,

尼克

【问题讨论】:

  • 只需更改 css 'background' 属性。
  • @bitsMix 谢谢。你能解释一下你的意思吗?是否可以为 CSS 背景属性设置动画?

标签: jquery navigation jquery-animate hyperlink fade


【解决方案1】:

这里是你如何使用悬停功能的动画。在 jQuery 文档page 上找到适合您的动画效果。

 $("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',
                    }
                });
            }
        });
    });

hover animate

【讨论】:

  • 谢谢。这看起来很有希望!你能告诉我如何让褪色效果更长吗?我希望在悬停时有一个相当快的淡出,即 500 毫秒,当用户“离开”div 时,我想要一个更长的淡出,即 3000 毫秒。我已尝试在您的脚本中调整持续时间,但由于您使用的方法,它看起来不正确。
  • duration: 100 - 将其更改为您需要的任何内容。对于不透明度也是不透明度:.6(使用从 0 到 1 的值)
  • 谢谢。我也试过了。似乎使用您的方法,一个背景需要完全淡出,然后才能淡入另一个背景,这不是我想要的。我需要一个适当的交叉淡入淡出,这样叶子的颜色就会从棕色变成绿色,然后再变回来。
  • 好的,我已将您的答案标记为正确答案,因为它确实回答了问题。我现在正在尝试一种不同的方法,它使用具有绝对定位和 jquery 的 div 来为带有绿叶的 div 的淡入设置动画,而不是背景图像,因为我认为这对我的目的更有效。我正在将您的一些代码合并到其中。谢谢,尼克
猜你喜欢
  • 2012-06-18
  • 2021-07-05
  • 2016-01-02
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
相关资源
最近更新 更多