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();
});
});