让我们从一个简单的图形开始,它只是一个“数字条”。这是一个很好的图像来展示你所询问的概念,最重要的是,我已经创建了它。这里是...
数字 http://www.secretagentorange.com/_test/numbers.png
此图像是通过组合六个单独的 40x40 图标制作的。我使用 PS Elements 来完成这项工作,但 GIMP 或许多其他图像编辑器可以完成这项工作。我们的单个位图由六个单独的图像组成,称为“精灵”。我们要做的是通过调整 background-position-x CSS 属性(并确保我们的“光圈”或显示窗口仅大到足以显示一个精灵)来操纵图像一次只显示一个精灵。
给定以下javascript:
$( '#logo2' ).on( 'mouseover', function() {
var current2 = $( '#toons2' ).css( "background-position" ).split( " " );
current2[0] = parseInt( current2[0].replace( "px", "" ), 10 );
current2[0] = ( ( current2[0] > -120 ) ? current2[0] - 40 : 0 );
$( '#toons2' ).css( "background-position", current2[0] + "px 0" )
});
和 HTML:
<div id="toons2"></div>
<div id="logo2">hover2</div>
和 CSS:
#toons2 {
width: 40px;
height: 40px;
background: transparent url( 'img/image01.png' ) no-repeat;
background-position: 0 0;
}
那么我们可以预期,每次我们将鼠标悬停在 div#logo2 上时,div#toons2 的背景图像都会发生变化。(在这种情况下,前四个图标将依次显示并重复。)
div#toons2 的高度和宽度很重要:它必须与单个精灵 (40x40) 的确切高度和宽度匹配。因此,如果我们有一个单独的 sprite 的组合图形,例如每个 35 像素宽 x 90 像素高,那么我们需要将 div#toons2 的高度和宽度设置为 35 的宽度和 90 的高度。这是一切都非常简单。
至于我们的 javascript,我们所做的只是在每次悬停时将 background-position-x 值调整 -40 像素,因为这是每个精灵的宽度。最初,我们看到...
一个 http://www.secretagentorange.com/_test/number1-open.png
现在,当我们第一次将鼠标悬停时,我们会将“数字条”的 x 位置调整 -40 像素,有效地将 div#toons2 的 CSS 设置为...
background-position: -40px 0;
产生...
两个 http://www.secretagentorange.com/_test/number2-open.png
下次我们将鼠标悬停时,backgroundPositionX 将是 -80px,这将显示为...
三 http://www.secretagentorange.com/_test/number3-open.png
最后,将 background-position-x 设置为 -120px 会显示图像中的第四个图标,即...
四 http://www.secretagentorange.com/_test/number1-closed.png
让我们看一下javascript。这一行:
var current2 = $( '#toons2' ).css( "background-position" ).split( " " );
获取 div#toons2 的 X 和 Y backgroundPosition 值。
在我们的例子中,我们只关心 X 值,如下所示:
current2[0] = parseInt( current2[0].replace( "px", "" ), 10 );
在这里,我们获取第一个索引,去除任何预期的后缀,并将字符串转换为整数。现在我们有了数值,我们可以轻松地操作它。
在我们的示例中,我们必须将图形向左移动 40 像素以显示每个后续精灵,因此我们将从整数中减去 40 来做到这一点。但由于我们只希望看到四张图片,因此与海报的原始条件保持一致,我们会检查以确保我们不会走得太远。如果我们已经显示了第四个精灵,我们会将 X 值重置为零。下一行执行此操作:
current2[0] = ( ( current2[0] > -120 ) ? current2[0] - 40 : 0 );
获得新的 X 值后,我们只需将其插入 backgroundPositionX 属性:
$( '#toons2' ).css( "background-position", current2[0] + "px 0" )
我们在其中构建定义新值的字符串。(第二个参数 '0' 是 Y 位置,不需要更改。)
这样做。
这是小提琴(http://jsfiddle.net/UxKyY)。它包括原始条件以及建议的解决方案。