0

你们中的许多人都知道,用 alpha 透明度为 PNG 制作动画效果<IE8并不好。因此,我只想在<IE8.

我能看到这样做的唯一方法是这样做:

HTML

<!--[if lt IE 8]>
    <script type="text/javascript">
        var browserUnsupported = true;
    </script>
<![endif]-->

JAVASCRIPT

// Test if the browser is supported
if(browserUnsupported){
    // Hide the element
    $('#test').hide();
}else{
    // Fade out the element and then hide it
    $('#test').animate({
        opacity:0   
    },200,function(){
        $(this).hide();
    })
}

// Once the animation has completed, continue
setTimeout(function(){
    // This will execute once the animation has completed
    // We cannot use the callback in case the browser is unsupported
    // and the animate function has not been used
},200);

但这是一个相当冗长的修复,特别是如果你考虑到每次我想为某些东西制作动画时,我都必须这样做。

有人能想出更好的选择吗?

你能在 Internet Explorer 8 及更低版本中关闭动画不透明度吗?如果有黑客攻击,请考虑我没有在本地存储我的 jQuery,我从 Google CDN 加载它。即使这是唯一的选择,我也不愿意更改 jQuery 源代码。

更新

我不是在寻找更好的方法来检测浏览器版本。上面的代码仅用于说明目的。我想知道的是是否有一种方法可以控制 jQuery 动画的不透明度?或者,有没有更好的方法来为 if 条件设置动画,如果不是,请不要设置动画?

更新

像这样的东西(未经测试):

function myAnimate(styles,duration,easing,callback){
    // Get the selected element
    var element = this.elements;
    if($.browser.msie && $.browser.version<8){
        delete options.opacity;
    }
    // Call the animation method
    element.animate(options,duration,easing,callback);
}
4

2 回答 2

1

例如通过使用$.browser$.browser.version()来自 jQuery

if($.browser.msie && $.browser.version < 8) {
 //fallback
} else {
 //real code
}

编辑

您可以编写自己的执行函数,扩展 jQuery 以根据条件运行函数。如果你的条件不是 Internet Explorer,那么你可以确保在 IE 中不会调用此类函数。执行函数可能看起来像这样(虽然没有测试过)

$.fn.execute = function(a) {
    return this[a].apply(this, [].slice.call(arguments, 1));
}

condition = $.browser.msie;
$('div').execute(condition ? 'true' : 'false', function() {...});
于 2012-11-23T12:48:07.823 回答
0

$().fadeOut完全符合您的要求 - 为不透明度设置动画然后隐藏:

if(ie){
  $("#test").hide()
}else{
  $("#test").fadeOut(200)
}

如果你喜欢简洁的代码,你可以这样做

$("#test").fadeOut(supported && 200)

或者,您可以全局禁用所有动画

if(ie) $.fx.off = true;

或者将您的逻辑包装在一个您甚至可以添加到 jQuery 中的函数中:

$.fn.fadeIfSupported = function(){
  if(unsupported){
    this.hide()
  }else{
    this.fadeOut.apply(this, arguments)
  }
}
...
$("#test").fadeIfSupported(200);
于 2012-11-23T12:58:21.747 回答