单击目标div以外的其他位置时取消功能

时间:2017-02-13 12:06:39

标签: javascript html

我正在我的网页游戏上实施库存机制,我想稍微复杂一点。

为了打开大门,您需要找到断路器。当你找到它时,你需要点击boltcutters然后在链上打破它,这就是我工作的部分。 但是我希望实现某种功能,如果在点击boltcutters之后我点击任何地方,但在链上我想运行一个函数取消链函数(改变颜色)并显示“Cant use it here”msg。例如。

简而言之,我需要找到一个解决方案,其中(伪代码):

If(boltcutters_clicked){
if(clicked_on_chain){
 openthedoor()} 
else {
 cancelBoltcutters()}

以下是我现在的代码部分,如果有帮助的话:

  

//链力学

var boltcutters_used = false;
document.getElementById('item_boltcutters').onmousedown = function(){
    boltcutters_used = true;
    document.getElementById('item_boltcutters').style.color = "red";
    document.getElementById('item_boltcutters').style.border = "1px solid red";
}

var boltcutters_found = false;
document.getElementById("chain").onmousedown = function(){
    if(boltcutters_used){
        alert('you open the door');
    } else if(!boltcutters_found){
        alert("I need to find something to break this chain...")
    } else {
        alert("Boltcutters could do the trick")
    }
}

感谢下面提到的想法,我提出了以下解决方案:

var last_clicked = null;
var test=0;
window.onclick = function (e) {
last_clicked = e.target;

if(boltcutters_used == true){
    test++;
}
if(boltcutters_used == true && last_clicked !== document.getElementById("chain") && test >1){
    alert("Can't use it here");
    boltcutters_used = false;
    test=0;
}

}

它有效:)

1 个答案:

答案 0 :(得分:2)

维护最后点击的项目

有一个变量来存储last clicked元素

window click上更新该变量的值

chain事件处理程序

中检查此变量
var last_clicked = null;
window.onclick = function (e) {
    last_clicked = e.target;
}

var boltcutters_used = false;
document.getElementById('item_boltcutters').onmousedown = function(){
    boltcutters_used = true;
    document.getElementById('item_boltcutters').style.color = "red";
    document.getElementById('item_boltcutters').style.border = "1px solid red";
}

var boltcutters_found = false;
document.getElementById("chain").onmousedown = function(){
    if(boltcutters_used){
        if(last_clicked === document.getElementById("item_boltcutters")) {
            alert('you open the door');
        } else {
            alert("You should use the bolt cutters on this");
        }
    } else if(!boltcutters_found){
        alert("I need to find something to break this chain...")
    } else {
        alert("Boltcutters could do the trick")
    }
}