jquery - 我们如何在 jquery 中添加 css + 动画?

标签 jquery css animation

这是我正在尝试做的一小段:

$('#why-red a').hover(function() {
    $(this).animate({ -webkit-transform: 'scale(1.1)'  }, 'slow');  
    }, function() {
    $(this).animate({ -webkit-transform: 'scale(1)' }, 'slow');
});

这可以用 CSS 来完成:

// image
#effect a:hover{
    text-decoration:none;
    -webkit-transform: scale(1.1);
    -moz-transform: scale(1.1);
    z-index: 4;
}

并且有效。然而,在 WebKit 中,悬停时它会慢慢变大,这与 Firefox 或 IE 中的图像会立即变大不同。

如果我们能有这样的东西就更好了:

#why-red a{
    -webkit-transition: .15s linear;
}

我们如何添加过渡效果或不仅针对 Webkit,而且针对 IE、Firefox 等进行扩展。

更新: 我从 jQuery IRC 的一个好人那里收到了一个关于如何做这样的事情的很好的示例。

var rmatrix = /matrix\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\)/;

jQuery.support.scaleTransformProp = (function() {
    var div = document.createElement('div');
    return div.style.MozTransform === '' ? 'MozTransform' : 
           div.style.WebkitTransform === '' ? 'WebkitTransform' :
           div.style.OTransform === '' ? 'OTransform' :
           div.style.MsTransform === '' ? 'MsTransform' :
           false;
})();

if (jQuery.support.scaleTransformProp) {

    jQuery.cssHooks['scale'] = {
        get: function(elem, computed, extra) {
            var transform = jQuery.curCSS(elem, jQuery.support.scaleTransformProp),
                m = transform.match(rmatrix);
            return m && parseFloat(m[1]) || 1.0;
        },
        set: function(elem, val) {
            var transform = jQuery.curCSS(elem, jQuery.support.scaleTransformProp);
            if (transform.match(rmatrix)) {
                elem.style[jQuery.support.scaleTransformProp]= transform.replace(rmatrix, function(m, $1, $2, $3, $4, $5, $6) {
                    return 'matrix(' + [val, $2, $3, val, $5, $6].join(',') + ')';
                });
            } else {            
            elem.style[jQuery.support.scaleTransformProp]= 'scale(' + val + ')';
            }
        }
    };

    jQuery.fx.step.scale = function(fx) {
        jQuery.cssHooks['scale'].set(fx.elem, fx.now)
    };

}

/*SEMENTARA*/
$('#why-red a').hover(function() {
    $(this).animate({ 
        'scale' : 1.1
        }, 200);    
    }, function() {
    $(this).animate({ 
        'scale': 1
        }, 200);
});

目前,这是一个很好的解决方案,但你们有没有更好的想法?

最佳答案

您不能将 jQuery 的 .animate() 与 CSS 转换结合使用,至少在没有插件的情况下,因为 scale() 部分是非数字的并且会混淆它。

但是,您实际上根本不需要 jQuery 来实现您所追求的效果。您可以将 -webkit-transform-webkit-transition (以及 -moz-o 等价物)结合使用直接在 CSS 中动画转换。例如:

#why-red a {
    -webkit-transition: all .15s linear;
    -moz-transition: all .15s linear;
    -o-transition: all .15s linear;
}

#why-red a:hover {
    -webkit-transform: scale(1.1);
    -moz-transform: scale(1.1);
    -o-transform: scale(1.1);
}

(参见:http://www.the-art-of-web.com/css/css-animation/)

如果您愿意,您可以在悬停时通过 jQuery 的 .css() 应用 CSS,但这不是必需的。或者,如果您想使用 jquery 应用 css 转换:

$('#why-red a').css({
    '-webkit-transform': 'scale(1.1)',
    '-moz-transform': 'scale(1.1)',
    '-o-transform': 'scale(1.1)'
});

关于jquery - 我们如何在 jquery 中添加 css + 动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5029035/

相关文章:

css - IE7 错误 - span 覆盖了链接

ios SWRevealViewController 显示推送 segue 动画

c# - 使用 WPF 动画淡出任何控件

jquery - 放大弹出窗口中的共享按钮

javascript - 选择选项值比较给出错误结果

javascript - 按钮内的 div 不响应高度

javascript - 删除选择框reactJS中出现的编辑和删除按钮

animation - 使用 GTK+ 制作流畅的动画

javascript - 在 Laravel Blade 模板中使用 JS/JQuery 时搜索栏过滤器的问题

javascript - Jquery全局数组变量和动态创建按钮问题