您的脚本可以精简到此,无需对每个元素和插槽重复相同的功能,您可以使用它each()
。也无需更改每个元素的 id,您可以在 css 中使用相同的 id:
$(init);
function init() {
$('.element').css('cursor', 'move');
$('.element').each(function () {
$(this).data('number', $(this).attr('id').replace('element_', '')).draggable({
containment: '#content',
stack: '#elements div',
cursor: 'hand',
revert: true
});
});
// Create the element slots
$('#slots').find('div').each(function () {
$(this).data('number', $(this).attr('id').replace('slot_', '')).droppable({
accept: '#elements div',
hoverClass: 'hovered',
drop: handleElementDrop
});
});
}
function handleElementDrop(event, ui) {
var slotNumber = $(this).data('number');
var elementNumber = ui.draggable.data('number');
if (slotNumber == elementNumber) {
$(this).droppable('disable');
ui.draggable.parent().find('.info').addClass('correct');
ui.draggable.css('cursor', 'pointer')
.addClass('correct')
.draggable('disable')
.position({
of: $(this),
my: 'left top',
at: 'left top'
})
.on('click', function () {
window.open(ui.draggable.attr('data-link'));
});
ui.draggable.draggable('option', 'revert', false);
}
}
在handleElementDrop
功能中,您 cad 添加了单击事件处理程序,当用户将正确的元素放在正确的插槽上然后单击它时,该处理程序将触发。
jsfiddle