我正在尝试重新创建WoW天赋计算器,就像这里看到的一样 - https://classicdb.ch/?talent#h
项目文件 - https://codepen.io/jjchrisdiehl/pen/gNQLgR
这是一个帮助更好理解JavaScript的项目,请避免使用任何jQuery解决方法 - 谢谢。
如果您查看HTML代码,您会发现我已将HTML设置为具有'class'为“item”的div,并且我还有另一个嵌套在“item” div内部的div,其中包含类为“points”的内容。
<div class="item two nature_wispsplode button" data-max="5">
<div class="points"></div>
</div>
<div class="item three fire_fireball button" data-max="3">
<div class="points"></div>
</div>
这个想法是给具有“item”类的每个div添加一个名为logMouseButton的JavaScript事件监听器。 这将监听单击并记录它是左键还是右键单击。
/* Get item div element for addEventListener*/
let itemButton = document.getElementsByClassName("item");
/* Apply logMouseButton to every itemButton */
for (var i = 0; i < itemButton.length; i++) {
itemButton[i].addEventListener("mouseup", logMouseButton, false);
}
现在,logMouseButton的代码是从Moz页面上的MouseEvents .button中被黑客入侵的。我认为可以使用switch来管理向每个项目的个别计数器添加或减去点数。
/* Set Counter */
var counter = 0;
/* Add or subtract points based on button clicked */
function logMouseButton(e) {
/* Set the max number of clicks in points counter based off of data-max attribute */
var maxPoints = this.getAttribute("data-max");
if (typeof e === "object") {
switch (e.button) {
case 0:
if (counter == 0 || counter < maxPoints) {
counter = counter + 1;
}
document.querySelector(".item .points").innerHTML = counter;
// alert(counter);
break;
case 1:
log.textContent = "Middle button clicked.";
break;
case 2:
if (counter > 0) {
counter = counter - 1;
}
document.querySelector(".item .points").innerHTML = counter;
break;
default:
log.textContent = `Unknown button code: ${btnCode}`;
}
}
}
左击增加,右击减少。如您在我的codepen项目中所见,左/右击可以使用,但仅适用于一个项目。
我的问题是——我应该如何将其分别应用于每个项目,以便它们独立地管理自己的计数器,而不受其他项目的影响?
谢谢!
注意——在klugjo的指导下,我得以让计数器正常工作。我最终记录了“points”HTML值,增加了这个值,然后再将新值添加回innerHTML:https://codepen.io/jjchrisdiehl/pen/JgXzKe
如果您有任何关于为什么这不是最佳方法或为什么其他方法更好的见解,请告诉我!
e.target.children [0] .innerHTML
读取该值。该值将是一个字符串,因此请使用parseInt
将其转换为整数。 - klugjo