浏览代码

Allow mouseover of buttons that are disabled

tags/v0.1.3
Fen Dweller 5 年前
父节点
当前提交
8fd740f92a
共有 3 个文件被更改,包括 44 次插入24 次删除
  1. +12
    -2
      satiate.css
  2. +3
    -1
      stories/demo.js
  3. +29
    -21
      world.js

+ 12
- 2
satiate.css 查看文件

@@ -421,9 +421,19 @@ a:hover {
border: none; border: none;
} }


.missing {
.disabled:active {
background-color: #444; background-color: #444;
color: #aaa !important;
border: none;
}

.disabled:focus {
outline: none;
}

.missing,
.disabled.missing {
background-color: #333;
color: #aaa;
} }


#area-name { #area-name {


+ 3
- 1
stories/demo.js 查看文件

@@ -90,7 +90,9 @@ stories.push({
"exits": { "exits": {
"up": { "up": {
"target": "Locked Room", "target": "Locked Room",
"desc": "It's locked!",
get desc() {
return state.player.items.keys.includes("Locked Room") ? "It's locked, but at least you have the key" : "It's locked!";
},
"conditions": [ "conditions": [
(room) => { (room) => {
return state.player.items.keys.includes("Locked Room"); return state.player.items.keys.includes("Locked Room");


+ 29
- 21
world.js 查看文件

@@ -41,7 +41,7 @@ function resetControls() {
button.classList.add("move-button") button.classList.add("move-button")
button.id = "move-" + dir; button.id = "move-" + dir;
button.classList.add("missing"); button.classList.add("missing");
button.setAttribute("disabled", "true");
disableButton(button);
button.textContent = dirs[dir]; button.textContent = dirs[dir];
moveHolder.appendChild(button); moveHolder.appendChild(button);


@@ -159,8 +159,7 @@ function updateRoom() {


Object.entries(dirs).forEach(([dir, name]) => { Object.entries(dirs).forEach(([dir, name]) => {
const button = document.querySelector("#move-" + dir); const button = document.querySelector("#move-" + dir);
button.classList.add("disabled");
button.setAttribute("disabled", "true");
disableButton(button);
button.textContent = dirs[dir]; button.textContent = dirs[dir];
}); });


@@ -178,18 +177,25 @@ function updateRoom() {
} }


button.classList.remove("missing"); button.classList.remove("missing");
button.classList.add("disabled");
disableButton(button);
button.textContent = dest.name; button.textContent = dest.name;


// if any condition fails, don't enable/add a listener
button.addEventListener("mouseenter", () => {
showActionDescription(exit.desc);
});

button.addEventListener("mouseleave", () => {
removeActionDescription();
});

// if any condition fails, don't turn it on and allow clicks
if (exit.conditions) { if (exit.conditions) {
if (!exit.conditions.every(cond => cond(room,state))) { if (!exit.conditions.every(cond => cond(room,state))) {
return; return;
} }
} }


button.classList.remove("disabled");
button.removeAttribute("disabled");
enableButton(button);


if (moveListeners[dir]) { if (moveListeners[dir]) {
button.removeEventListener("click", moveListeners[dir]); button.removeEventListener("click", moveListeners[dir]);
@@ -203,14 +209,6 @@ function updateRoom() {
button.addEventListener("click", moveFunc); button.addEventListener("click", moveFunc);


moveListeners[dir] = moveFunc; moveListeners[dir] = moveFunc;

button.addEventListener("mouseenter", () => {
showActionDescription(exit.desc);
});

button.addEventListener("mouseleave", () => {
removeActionDescription();
});
}); });
} }


@@ -235,8 +233,10 @@ function updateRoom() {
button.textContent = action.name; button.textContent = action.name;


button.addEventListener("click", () => { button.addEventListener("click", () => {
action.execute(room);
refresh();
if (!button.classList.contains("disabled")) {
action.execute(room);
refresh();
}
}); });


button.addEventListener("mouseenter", () => { button.addEventListener("mouseenter", () => {
@@ -258,11 +258,9 @@ function updateRoom() {


if (action.conditions) { if (action.conditions) {
if (!action.conditions.every(cond => cond(room))) { if (!action.conditions.every(cond => cond(room))) {
button.classList.add("disabled");
button.setAttribute("disabled", true);
disableButton(button);
} else { } else {
button.classList.remove("disabled");
button.removeAttribute("disabled");
enableButton(button);
} }
} }


@@ -281,3 +279,13 @@ function updateRoom() {
added.forEach(button => actionHolder.appendChild(button)); added.forEach(button => actionHolder.appendChild(button));
} }
} }

function disableButton(button) {
button.setAttribute("tabindex", "-1");
button.classList.add("disabled");
}

function enableButton(button) {
button.removeAttribute("tabindex");
button.classList.remove("disabled");
}

正在加载...
取消
保存