jQuery .animate() 不在 IE 中为 backgroundPosition 设置动画

Posted

技术标签:

【中文标题】jQuery .animate() 不在 IE 中为 backgroundPosition 设置动画【英文标题】:jQuery .animate() not animating backgroundPosition in IE 【发布时间】:2011-03-04 22:04:12 【问题描述】:

我正在尝试为背景图像设置动画以向下移动一定数量的像素,但仍保留在页面的中心。在再次单击一个元素时,我需要它移回顶部,但仍保持在中心。以下是当前代码:

        $(document).ready(function() 
        $('#email_campaigns').click(function()
            var width = $(window).width();
            width = (width / 2) - 700;

            if($('#email_campaigns_box').css('display') == 'none')
                //$('body').css('background-position','center 119px');
                $('body').animate(
                    backgroundPosition: (width + "px 119px")
                , duration:500);
             else 
                //$('body').css('background-position','center top');
                $('body').animate(
                    backgroundPosition: (width + "px 0px")
                , duration:500);
            

            $('#email_campaigns_box').slideToggle("slow");
            $('#client_login_box').slideUp("slow");             
        );

        $('#client_login').click(function()
            var width = $(window).width();
            width = (width / 2) - 700;

            alert(width);

            if($('#client_login_box').css('display') == 'none')
                //$('body').css('background-position','center 119px');
                $('body').animate(
                    backgroundPosition: (width + "px 119px")
                , duration:500);
             else 
                //$('body').css('background-position','center top');
                $('body').animate(
                    backgroundPosition: (width + "px 0px")
                , duration:500);
            

            $('#client_login_box').slideToggle("slow");
            $('#email_campaigns_box').slideUp("slow");              
        );
    );

我不能传递“中心”,因为它只会接受数值。我的目标是以像素为单位计算页面的中心(宽度 = (width / 2) - 700;),然后动画到这个粗略的位置(由于滚动条,它通常会超出几个像素,然后强制到中心使用 .css() 调用。

问题是IE不想玩球。 IE 根本不会动画。 Firefox/Safari/Chrome 都按预期工作。

下面是一个活生生的例子: http://recklessnewmedia.com/new/# (点击顶部的“电子邮件广告系列”)。

谢谢

【问题讨论】:

【参考方案1】:

我建议将背景放在网站底部的容器 div 上。然后展开上面的登录,让浏览器为你做事!

这里有一个基本功能的简单演示:

http://jsfiddle.net/UkGva/

这样您将不得不编写更少的代码,并且 jquery 不需要做任何繁重的工作。虽然需要进行一些重组,但只需在底部容器上方的容器中进行登录(隐藏部分)即可。

这也应该适用于滚动条和所有(我发现即使在像 chrome 这样的工作浏览器中它也有点偏离)。并且你可以编写更少的 javascript

【讨论】:

以上是关于jQuery .animate() 不在 IE 中为 backgroundPosition 设置动画的主要内容,如果未能解决你的问题,请参考以下文章

jQuery .animate() 在 IE8 中没有做任何事情

jQuery.animate 在 IE8/IE9 上的 Facebook iFrame 中不起作用

Chrome, Safari 中的 JQuery .animate() != FF, IE, Opera

使用 .animate() 的 jQuery 在 IE8 中无法执行任何操作

IE 上的 Jquery Animate 出错

jQuery .animate() marginLeft 在 IE8 及更低版本中不起作用 - 参数无效