小提琴:http: //jsfiddle.net/wczTW/1/
基本上,我有一组要上下移动的元素。想想“Cover Flow”,除了垂直(糟糕,我知道)。它工作得很好,除非你非常快速地向上或向下,在这种情况下,CSS 过渡似乎在最后一个完成之前开始,并且它们开始靠得太近。我什至不能 100% 确定这是怎么回事,但如果你用上面的小提琴演奏几秒钟,你应该明白我在说什么。
相关CSS:
.game {
position: absolute;
width: 150px;
height: 100px;
left: 200px;
margin-left: -125px;
background-color: gray;
border: 1px solid white;
-webkit-transition: all .2s ease-in-out;
-webkit-transform: scale(1);
overflow: hidden;
z-index: 10;
}
.selected {
transform-origin: 0 0;
border: 1px solid green;
-webkit-transition: all .2s ease-in-out;
-webkit-transform: scale(1.25);
z-index: 100;
}
相关的Javascript:
$(document).ready(function () {
keyDown = false;
lTop = ($(window).height() / 2) - 50;
$('.game').each(function () {
$(this).css('top', lTop);
lTop += 120;
});
});
$(document).keydown(function (e) {
if (!keyDown) {
if (e.keyCode == 40) { //down
var selected = $('.selected');
var next = selected.next()
if (next.length) {
selected.removeClass('selected');
next.addClass('selected');
$('.game').css('top', function (i, v) {
return (parseFloat(v) - 120) + 'px';
});
}
keyDown = true;
} else if (e.keyCode == 38) { //up
var selected = $('.selected');
var next = selected.prev()
if (next.length) {
selected.removeClass('selected');
next.addClass('selected');
$('.game').css('top', function (i, v) {
return (parseFloat(v) + 120) + 'px';
});
}
keyDown = true;
}
}
});
$(document).keyup(function (e) {
keyDown = false;
});
有没有一种简单的方法来排队 CSS 过渡?还是在当前转换完成之前阻止输入?
编辑:如果可能的话,我想我更喜欢中止动画并立即移动它。我认为上面的两个选项将是糟糕的用户体验。