jQuery Animate backgroundPosition无法正常工作

时间:2012-11-18 17:59:42

标签: jquery jquery-animate background-position

我试图动画一些div的背景位置,然后是一个回调动画。

我在这里缺少什么?

HTML:

<div>
    <div class='divimg'></div>
    <div class='divimg'></div>
    <div class='divimg'></div>
</div>
​

CSS:

.divimg {
    width:250px;
    height:250px;
    margin:20px;
    float:left;
    background-size: 500px 500px;
    background-position: top center;
    background-repeat: no repeat;
    background-image: url(http://lorempixel.com/186/116/nature/1);
}​

JavaScript:

$(function() { 
    function animateGrid() {  
        $('.divimg').animate(
            {backgroundPosition:"bottom center"}, 
            500, function() { 
                $('.divimg').animate(
                    {backgroundPosition:"top center"}, 
                500)
            }
        );   
    }
    animateGrid(); 
})​

http://jsfiddle.net/jc6212/WPF6H/2/

1 个答案:

答案 0 :(得分:3)

来自.animate() docs

  

除非如下所述,否则应将所有动画属性设置为单个数值。 [...]   不完全支持速记CSS属性(例如字体,背景,边框)。

要像您一样只为backgroundPositionY设置动画,您可以在Chrome中为该属性设置动画。由于Firefox不支持backgroundPositionY,您可以为不支持它的浏览器应用CSS Hook

if (!('backgroundPositionY' in document.createElement('div').style)) {
    $.cssHooks.backgroundPositionY = {
        get: function(elem, computed, extra) {
            return $.css(elem, 'backgroundPosition').split(' ')[1];
        },
        set: function(elem, value) {
            elem.style.backgroundPosition = $.css(elem, 'backgroundPosition').split(' ')[0] + ' ' + value;
        }
    };
}


$(function() {

    function animateGrid() {
        $('.divimg').animate({
            backgroundPositionY: 250
        }, 500, function() {
            $('.divimg').animate({
                backgroundPositionY: 0
            }, 500);
        });
    }

    animateGrid();
});

在Chrome,FF,IE9中测试过。应该适用于所有浏览器。

jsFiddle