2017 年更新
由于我刚刚收到了对该答案的另一个赞成票,我想我会重新审视它。
对于当前的浏览器,您应该对其他答案中的 transform(-50%, -50%) 技术有好运,但这取决于您的内容容器的设置方式,可能不会导致窗口居中;它可能是容器的中心,可能比窗口小或大。
最新的浏览器支持视口单位(vh、vw),这将准确地为您提供您正在寻找的视口居中。由于滚动,从当前位置到视口中心的动画将是一个不同的问题。
http://caniuse.com/#feat=viewport-units 
https://developer.mozilla.org/en-US/docs/Web/CSS/length(见 vh, vw)
没有 CSS 转换
您可以通过使用绝对定位在不使用 css-transform 的情况下完成此操作:
(这里的完整代码:http: //jsfiddle.net/wkgWg/)
.posDiv
{
    position:absolute;
    top:0;
    left:0;
    margin:0;
    border:1px solid red;
    -moz-transition:all 2s;
    -webkit-transition:all 2s;
    -o-transition:all 2s;
    transition:all 2s;
}
.triggerElement:hover .posDiv
{
    top:50%;
    left:50%;
    margin-left:-50px;
    margin-top:-50px;
    -moz-transition:all 2s;
    -webkit-transition:all 2s;
    -o-transition:all 2s;
    transition:all 2s;
}
使用 CSS 变换
如果您想继续使用 CSS-Transform,您需要使用 JavaScript 计算转换的“中心”或结束位置,然后在运行时生成并附加一个转换语句。您的原点变换向量需要从“中心到屏幕”向量中减去。
这是通过 Rico Sta 的 jQuery.transit 插件使用 css-transform(在支持的情况下)的 javascript 版本。克鲁兹。
(这里的完整小提琴:http: //jsfiddle.net/ZqpGL/263/)
$(function() {
    var $cards = $('.card');
    var cardInFocus = null;
    $cards.each(function(index, elem) {
        var $elem = $(elem);
        var pos = $elem.position();
        $(elem).data('orig-x', pos.left);
        $(elem).data('orig-y', pos.top);
    });
    var reset = function() {
        if (cardInFocus) {
            $(cardInFocus).transition({
                x: 0,
                y: 0
            });
        }
    };
    $cards.on('focus', function(e) {
        reset();
        cardInFocus = this;
        var $doc = $(document);
        var centerX = $doc.width() / 2;
        var centerY = $doc.height() / 2;
        var $card = $(this);
        var origX = $card.data('orig-x');
        var origY = $card.data('orig-y');
        $(this).transition({
            x: centerX - origX,
            y: centerY - origY
        });
    });
    $cards.on('blur', function(e) {
        reset();
    });
});