在我的项目中,我想延迟事件 - 特别是上下楼层或显示楼层号 - 直到按下电梯的所有按钮。
例如,如果我按下2,4,1,3,则数字应按此顺序显示,并且向上或向下指示符应适当突出显示。
$(document).ready(function() {
var $buttons = $('.buttons'),
$floorAnimate = $('.floor-animate'),
$floorPanel = $('floor-panel');
function pressButtons()
{
$('.floor-number').css('display', 'none');
$buttons.click(function()
{
var $floorNumber = $(this).text(),
floorOn = $('floor-number').text();
$(this).addClass('pressed');
$('.floor-number').css('display', 'block').append($floorNumber).animate({top: '-200px'}, 1500);
$('#up-indicator').addClass('up');
});
}
pressButtons();
});
答案 0 :(得分:1)
看起来你需要将每个click事件打到一个数组中并做一个处理你想要的定时延迟。我做了一些粗略的事情。
http://codepen.io/anon/pen/fJcFo
我添加了一些console.logs,这样你就可以看到每个事件发生了什么。 但基本上发生的事情是:
如果您希望更灵活地使用html对象。您可以将整个Element传递给queuedFloor对象,方法是将其添加到它: element:pressedItem 然后,当您想要引用HTML元素时,可以通过其对象引用(elevator.queue [0] .element)调用它,并执行标准的javascript操作,例如:
elevator.queue[0].element.classList.add('onfloor');
会将一个类添加到名为“onfloor”的特定元素。
首先我创建一个javascript对象:
var elevator = elevator || {};
然后我向电梯对象添加动作
elevator.actions = {
buttonPressed:function(pressedItem){
console.log(pressedItem);
var queuedFloor = {
floor: pressedItem.innerText;
goToFloor: setTimeout(function(){
alert("arrived at floor" + elevator.queue[0].floor); //do your html manipulation for item here, remember its async so have to reference it by its position in the queue. In this case we only ever call the item in position 0 of the array.
elevator.queue[0].atFloor();
}, 3000),
atFloor: (function(){
elevator.queue.splice(0, 1);
console.log('queue spliced', elevator.queue);
})
};
elevator.queue.push(queuedFloor);
elevator.actions.moveElevator();
}
moveElevator:function(){
console.log('queued floors', elevator.queue);
elevator.queue[0].goToFloor();
}
}; elevator.queue = []
然后我设置了我的点击监听器
$buttons.click(function()
{elevator.actions.buttonPressed(this)});
});