我尝试做的背景:我使用three.js和标准html,css和js来创建一个网站,其中有两个网站,都使用显示和隐藏div。您可以按下许多按钮,显示一个div并隐藏所有其他按钮。这是在我的div.s js文件中。这显示在下面的代码中:
// Change to Bass
function changeToBass() {
document.getElementById("2dBass").style.display = 'block';
document.getElementById("2dDrums").style.display = 'none';
bassDivActive = true;
单击运行此功能的按钮时,将调用此函数。在这种情况下,称为changeToBass。它隐藏了所有显示的div除外。然后它将一个名为bassDivActive的变量设置为true,在main.js文件中声明为false:
// Active Div Variables
var bassDivActive = false;
var drumsDivActive = false;
// Check if the key was pressed
function checkKeyPressed3(i) {
if (i.keyCode == "51") {
checkActiveDiv();
}
}
checkActiveDiv() {
if (bassDivActive == true) {
console.log("Bass True");
bassDivActive = false;
} else if (drumsDivActive == true) {
console.log("Drums True");
drumsDivActive = false;
}
}
这个main.js文件有很多其他代码用于加载与此问题无关的应用程序。这里,两个变量bassDivActive和drumsDivActive都设置为false。然后有一个函数检查数字3是否被按下,然后运行一个名为checkActiveDiv()的函数。此功能确实有效,键检查不是问题,问题出在checkActiveDiv()函数中。当bassDivActive设置为true时,通过在divs.js文件中从之前调用的changeToBass()函数,checkActiveDiv()函数记录" Bass True"然后,一旦执行了部分代码,就应该将bassDivActive设置为false。
但是,这是我遇到的问题。如果我然后运行相同的东西,但是drumsDivActive设置为true,则代码仍然是当它应该为FALSE时,说bassBivActive为TRUE。
编辑: - 要显示调用其他函数的位置,它们位于以下位置:
// Do raycast
var intersectionsForward = raycasterForwardCollision.intersectObjects(barObjects, true);
// Check to see which objects the ray collides with
if (intersectionsForward.length > 0) {
for (var i = 0; i < intersectionsForward.length; i++) {
switch (intersectionsForward[i].object.parent.name) {
case "Bass":
bassInfo.position.y = 8;
locationSetBass();
break;
case "Drums":
drumsInfo.position.y = 8;
locationSetDrums();
break;
}
}
// Change to Bass Div when "2" key is pressed
function locationSetBass() {
// Add Event Listener to check when a particular key is pressed
window.addEventListener("keydown", checkKeyPressed2, false);
// Check if the key was pressed
function checkKeyPressed2(i) {
if (i.keyCode == "50") {
changeToBass();
}
}
}