Javascript 如何重置已设置为禁用的可拖动项以重新启动游戏?
使用边设置动画。 我有一个带计时器的游戏。 用户必须在一定时间内拖动n个拖放对象。 如果用户没有时间,我想重置所有内容。 在drop事件中,当拖放到正确的位置时,我禁用了draggableJavascript 如何重置已设置为禁用的可拖动项以重新启动游戏?,javascript,jquery,css,jquery-ui,Javascript,Jquery,Css,Jquery Ui,使用边设置动画。 我有一个带计时器的游戏。 用户必须在一定时间内拖动n个拖放对象。 如果用户没有时间,我想重置所有内容。 在drop事件中,当拖放到正确的位置时,我禁用了draggable ui.draggable.draggable('disable'); 然而,当我重置所有元素时,在控制台中我得到了臭名昭著的: **Error: cannot call methods on draggable prior to initialization; attempted to call metho
ui.draggable.draggable('disable');
然而,当我重置所有元素时,在控制台中我得到了臭名昭著的:
**Error: cannot call methods on draggable prior to initialization; attempted to call method 'enable'**
基本上如果我不加
sym.$(".set" + set).draggable( "enable" );
然后禁用拖动功能
但如果我不禁用它们,那么跟踪答案和分数就会造成很多问题
你知道如何防止这种情况吗
是否有一些解决方法,或者我是否重新设置了错误的内容?还是我需要重新开始
for (j = 0; j < logs1.length; j++) {
sym.$(logs1[j]).addClass('logs1' + j);
sym.$('.logs1' + j).draggable({
zIndex: 1000,
axis: "y",
revert: function(obj) {
if (obj === false) {
sym.getSymbol("beaver").stop("stop3");
return true;
} else {
return false;
}
},
start: function(event, ui) {
sym.$("water").show();
startPos = $(this).offset().top;
sym.getSymbol("beaver").stop("stop1");
}
});
sym.$('.logs1' + j).droppable({
drop: function(ui, event) {
$(this).css({
'top': startPos
});
}
});
sym.$(droppable[j]).droppable({
accept: ".logs1" + j,
drop: dropEvent
});
}
K = 0;
function dropEvent(event, ui) {
$(this).css({'border': '3px solid lime'});
logDropFX.play();
ui.draggable.draggable('disable');
ui.draggable.position({ of: $(this),
my: 'left top',
at: 'left top'
});
waterRisingLoop.play();
sym.getSymbol("beaver").stop("stop2");
K++;
sym.$("marker").animate({
'top': 400 - (50 * K)
}, 1000);
var markerPos = sym.$("marker").offset().top;
console.log("marker level: " + markerPos);
if (markerPos < 250 || K == 5) {
clearInterval(timer);
done = false;
setTimeout(function() {
sym.$('levelScreen').animate({
"top": 0,
'z-index': 99999
}, 1000);
sym.$("level").attr('src', 'images/level1Complete.png');
sym.$(".set1").hide();
levelUpFX.play();
}, 2000);
}
}
for(j=0;j
复位代码如下所示。重做拖拉表似乎是多余的。我尝试了使用和不使用,但仍然收到错误消息
sym.$("startTimer").bind('click', function() {
.... // some code before
sym.$(".set" + set).show();
for (j = 0; j < logs1.length; j++) {
sym.$(('.logs' + set) + j).draggable(); // draggables
sym.$(".set" + set).draggable("enable"); // re-enable
}
timer = setInterval(function() {
if (w <= 180 && w > 0) {
w = w - 3;
sym.$("timer").css({
"width": w
});
currentPos = (sym.$("water").offset().top) - 4;
sym.$("water").animate({
'top': currentPos
});
}
}, 1000);
});
sym.$(“startTimer”).bind('click',function(){
..//前面有一些代码
符号$(“.set”+set).show();
对于(j=0;j
好的。我找到了解决办法。我在drop事件反馈检查中重新启用了Dragable。所以现在我(简化了):
函数dropEvent(事件,用户界面){
ui.draggable.draggable('disable');
位置({of:$(this),my:'left top',at:'left top'});
ui.draggable.addClass('done');
K++;
if(markerPos<250 | | K==5){
符号$('.done')。可拖动('enable');
}
}
好的。我找到了解决办法。我在drop事件反馈检查中重新启用了Dragable。所以现在我(简化了):
函数dropEvent(事件,用户界面){
ui.draggable.draggable('disable');
位置({of:$(this),my:'left top',at:'left top'});
ui.draggable.addClass('done');
K++;
if(markerPos<250 | | K==5){
符号$('.done')。可拖动('enable');
}
}
function dropEvent(event, ui) {
ui.draggable.draggable('disable');
ui.draggable.position({ of: $(this), my: 'left top', at: 'left top' });
ui.draggable.addClass('done');
K++;
if (markerPos < 250 || K == 5) {
sym.$('.done').draggable('enable');
}
}