【问题标题】:How to animate background image with jQuery如何使用 jQuery 为背景图像设置动画
【发布时间】:2012-11-28 15:23:23
【问题描述】:

您好,我正在尝试使用 jQuery 为背景图像设置动画,我尝试关注 this tutorial here,但是我的测试页面没有运气,我看到蓝色 Facebook 图标,但鼠标悬停在它上面没有动画向上露出灰色标志。请帮忙!谢谢,我是 jQuery 菜鸟。

我的测试页: http://leongaban.com/_stack/bg_animation/

Facebook 图标应该向上动画,完整图片如下:

我的 CSS

<style>
    #facebook_icon li {
        padding: 0;
        width: 120px;
        height: 119px;
        list-style: none;
        background: red;
        background:url('img/fb_120x238.png') repeat 0 0;
    }
</style>

HTML

<ul id="facebook_icon">
    <li><a href="#"><div class="box"></div></a></li>
</ul>

Javascript

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.bgpos.js"></script>

<script>

    (function() {
        $('#facebook_icon li')
            .css( {backgroundPosition: "0 0"} )
            .mouseover(function(){
                $(this).stop().animate(
                    {backgroundPosition:"(0 -119px)"},
                    {duration:500})
                })
            .mouseout(function(){
                $(this).stop().animate(
                    {backgroundPosition:"(0 0)"}, 
                    {duration:500})
                })
    })();

</script>

更新:有效的 CSS 3 解决方案

CSS 3

#facebook_icon li {
        padding: 0;
        width: 120px;
        height: 119px;
        list-style: none;
        background: red;
        background:url('img/fb_120x238.png') repeat 0 0;

        -moz-transition: background-position 1s;
        -webkit-transition: background-position 1s;
        -o-transition: background-position 1s;
        transition: background-position 1s;
        background-position: 0 0;
    }

    #facebook_icon li:hover{
        background-position: 0 -119px;
    }

    .box {
        width: 120px;
        height: 119px;
    }

HTML(添加了空的 div 框以供点击)

<ul id="facebook_icon">
    <li><a href="#"><div class="box"></div></a></li>
</ul>

【问题讨论】:

  • 你也可以使用 CSS3 过渡。
  • 为什么你的li在你的a里?反过来。
  • 您的anchor 中有一个li
  • 你试过 mouseenter() 和 mouseleave() 代替吗?
  • 首先,你不需要{duration:500}。你可以通过 500。api.jquery.com/animate

标签: javascript jquery html css jquery-animate


【解决方案1】:

一个简单的解决方案应该是使用 css3 过渡。 你可以这样做:

在你的 CSS 中

#facebook_icon li{
    -moz-transition: background-position 1s;
    -webkit-transition: background-position 1s;
    -o-transition: background-position 1s;
    transition: background-position 1s;
    background-position: 0 0;
}

#facebook_icon li:hover{
     background-position: 0 -119px;
}

【讨论】:

  • WOOT 是的,这太简单了......我喜欢 CSS3 :) 我以前用它来动画不透明度......我想我会保存 jQuery 来做一些更复杂的事情跨度>
【解决方案2】:

谢天谢地,这个很简单。您在锚点上为background-position 设置动画,但实际图像在 li 上。

只需在 JavaScript 中更改选择器:

 $('#facebook_icon li')

但是,我建议更改您的标记(以及随附的 CSS),使 a 位于 li 内,而不是 ul 的子代。这样你的标记是有效的。

更新:

嘿,所以我完全同意使用 CSS3。这正是我将如何实现的。但只是为了结束这个问题:要让 bgpos 插件与 jQuery 1.8.2 一起工作,请将 backgroundPosition 方法的前两行更改为:

 if (fx.start === 0 && typeof fx.end == 'string') {
    var start = $.css(fx.elem,'backgroundPosition');

【讨论】:

  • 谢谢,我更新了代码,还包括了作者正在使用的 jquery.bgpos.js ......但是仍然没有用。此外,我将 A 标签移到了 li 内,现在我失去了悬停状态。我有点不想在 li 里面放任何文字,也许我应该把图片放在 li 里面?也许这里的 CSS 3 方式会更好
  • @Leon 作者的插件不支持最新的jQuery。我将版本降回 1.4.2 并开始工作
  • @Leon 您可以对悬停状态执行以下两项操作之一。理想情况下,你给a 一个宽度和高度并显示blockinline-block 以保持标记有效,但也让它像你期望的那样工作。不太好的替代方法是在 CSS 中的 li 上设置 cursor: pointer
  • 啊,谢谢,忘了a标签和显示块的宽度和高度!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
相关资源
最近更新 更多