【问题标题】:JQuery - slowly bg-image changingJQuery - bg-image 缓慢变化
【发布时间】:2009-10-02 16:05:44
【问题描述】:

我正在尝试通过缓慢地改变背景图像来进行悬停动作。

.menu_part
{
    border-left: 1px solid black;
    background-image: url(../images/bg_menu.png);
    float:left;
    padding: 2px 10px;
}

.menu_part:hover
{
    background-image: url(../images/bg_menu_hove.png);                            
    color: #FFF;
}

菜单:

<div id="head_menu">
    <a href="#order"><div>make order</div></a>
    <a href="#portfolio"><div>portfolie</div></a>
    <a href="#contacts"><div>contacts</div></a>
    <a href="#vacancies"><div>vacancies</div></a>
    <a href="#about"><div>about company</div></a>
</div>

一些 JQuery:

$('#head_menu a').addClass('menu_part');

现在我正在尝试为选择器 $('#head_menu a') 编写悬停动作。我可以将 bg-image 更改为需要,当悬停时,慢慢地?


这是我的尝试代码:

    $("#head_menu a").hover(
        function() {
            $(this).animate({backgroundImage: 'url(images/bg_menu_hove.png)', color: '#fff'}, 1000);
        },
        function() {
            $(this).animate({backgroundImage: 'url(images/bg_menu.png)', color: '#000'}, 1000);                
        }
    );

但它现在甚至不显示菜单。我做错了什么?我也会尝试使用 bg-position。


这是带有 bg-position 的代码,我看不懂。我将 bg_menu.pngbg_menu_hove.png 合并为 1 张 200px+200px 的图片。 即使没有 JQuery,上面的样式也不起作用。

.menu_part:hover
{
    background-image: url(../images/new_menu.png);
    background-position: 0 -200px;
}

【问题讨论】:

  • 当你说“慢慢改变”时,你的意思是你想让一个图像淡入到下一个,或者类似的东西?

标签: jquery effects


【解决方案1】:

首先,具有变化背景的悬停效果的标准技术是合并两张图片。所以,之后将bg_menu_hove.png 粘贴到bg_menu.png 上,只玩背景的位置。

a 标记中删除div(div 是块元素,a 是内联...反之亦然)。

现在,如果我们只有一张图像,例如使用来自jQueryanimate 函数当然是(backgroundPosition)。 看看很好的例子,对初学者来说非常有用的网站:http://visualjquery.com/ (点击:Effects -&gt; Custom -&gt; Animate

【讨论】:

  • 其实是的,这比我的想法更好——只需将图像组合成一个(精灵)图像,然后使用 animate() 移动背景位置。
  • 我会尝试使用 bgPos,但是请看我在帖子中的更新。它不适用于动画。
  • 我的错 - 我没有意识到 animate 不适用于 backgroundPosition。试试这个:protofunc.com/scripts/jquery/backgroundPosition
【解决方案2】:

我认为您可以使用 jquery animate 函数来执行此操作,并对 CSS 进行一些细微更改 - 例如:

.menu_part
{
    border-left: 1px solid black;
    background-image: url(../images/bg_menu_hove.png);
    float:left;
    padding: 2px 10px;
}

.menu_part div
{
    background-image: url(../images/bg_menu.png);                            
    color: #FFF;
}

然后:

$('#head_menu a').addClass('menu_part');

$('.menu_part').bind('mouseover', function() {

    $(this).find('div').animate({ 
        opacity: 0
      }, 1500 );

});

$('.menu_part').bind('mouseout', function() {

    $(this).find('div').animate({ 
        opacity: 1
      }, 1500 );

});

目前无法对其进行测试,抱歉 - 但您了解基本概念。

【讨论】:

  • 我很确定内置动画不会为此工作,因为它甚至不处理颜色过渡。不过,jQuery UI 中更强大的动画可能能够处理它。
  • 但它确实可以处理不透明度,这就是我们在这里所做的一切。
  • 是的,我会专注于下面 Rinz 的回答,这是一个更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2020-07-13
  • 2013-08-10
相关资源
最近更新 更多