Hướng dẫn javascript conditional background color - màu nền có điều kiện javascript

Tôi đã cố gắng tạo ra một trò chơi tic-tac-toe nhưng vì một số lý do, điều kiện không hoạt động ..

Tôi đã cố gắng nhắm mục tiêu ba yếu tố đầu tiên ở hàng đầu tiên và nếu tất cả chúng đều có cùng màu, tôi muốn trình duyệt để cảnh báo một cửa sổ bật lên "thắng", nhưng điều đó không xảy ra.

Có ai có ý tưởng tại sao?

Đây là mã của tôi:

var one = document.getElementById("one");
var two = document.getElementById("two");
var three = document.getElementById("three");
var four = document.getElementById("four");
var five = document.getElementById("five");
var six = document.getElementById("six");
var seven = document.getElementById("seven");
var eight = document.getElementById("eight");
var nine = document.getElementById("nine");


var counter = 1;

//code that changes the box color
one.addEventListener("click", function() {
  if (counter < 10 && counter % 2 === 0) {
    one.style.backgroundColor = "yellow";
  } else if (counter < 10 && counter % 2 != 0) {
    one.style.backgroundColor = "red";
  }
  counter++;
  console.log(counter);
});
two.addEventListener("click", function() {
  if (counter < 10 && counter % 2 === 0) {
    two.style.backgroundColor = "yellow";
  } else if (counter < 10 && counter % 2 != 0) {
    two.style.backgroundColor = "red";
  }
  counter++;
  console.log(counter);
});
three.addEventListener("click", function() {
  if (counter < 10 && counter % 2 === 0) {
    three.style.backgroundColor = "yellow";
  } else if (counter < 10 && counter % 2 != 0) {
    three.style.backgroundColor = "red";
  }
  counter++;
  console.log(counter);
});
four.addEventListener("click", function() {
  if (counter < 10 && counter % 2 === 0) {
    four.style.backgroundColor = "yellow";
  } else if (counter < 10 && counter % 2 != 0) {
    four.style.backgroundColor = "red";
  }
  counter++;
  console.log(counter);
});
five.addEventListener("click", function() {
  if (counter < 10 && counter % 2 === 0) {
    five.style.backgroundColor = "yellow";
  } else if (counter < 10 && counter % 2 != 0) {
    five.style.backgroundColor = "red";
  }
  counter++;
  console.log(counter);
});
six.addEventListener("click", function() {
  if (counter < 10 && counter % 2 === 0) {
    six.style.backgroundColor = "yellow";
  } else if (counter < 10 && counter % 2 != 0) {
    six.style.backgroundColor = "red";
  }
  counter++;
  console.log(counter);
});
seven.addEventListener("click", function() {
  if (counter < 10 && counter % 2 === 0) {
    seven.style.backgroundColor = "yellow";
  } else if (counter < 10 && counter % 2 != 0) {
    seven.style.backgroundColor = "red";
  }
  counter++;
  console.log(counter);
});
eight.addEventListener("click", function() {
  if (counter < 10 && counter % 2 === 0) {
    eight.style.backgroundColor = "yellow";
  } else if (counter < 10 && counter % 2 != 0) {
    eight.style.backgroundColor = "red";
  }
  counter++;
  console.log(counter);
});
nine.addEventListener("click", function() {
  if (counter < 10 && counter % 2 === 0) {
    nine.style.backgroundColor = "yellow";
  } else if (counter < 10 && counter % 2 != 0) {
    nine.style.backgroundColor = "red";
  }
  counter++;
  console.log(counter);
});

//logic for winning
if (one.style.backgroundColor == "red" && two.style.backgroundColor == "red" && three.style.backgroundColor == "red") {
  console.log("red wins");
}
.knobs {
  background-color: blue;
  border: none;
  padding: 50px;
  margin: 10px;
}

.knobs:focus {
  outline: none;
}

#total {
  text-align: center;
}
<!DOCTYPE html>

<div id="total">
  <button id="one" class="knobs"></button>
  <button id="two" class="knobs"></button>
  <button id="three" class="knobs"></button>
  <br>
  <button id="four" class="knobs"></button>
  <button id="five" class="knobs"></button>
  <button id="six" class="knobs"></button>
  <br>
  <button id="seven" class="knobs"></button>
  <button id="eight" class="knobs"></button>
  <button id="nine" class="knobs"></button>
</div>

Giúp đỡ của bạn sẽ được nhiều đánh giá cao!

Hướng dẫn javascript conditional background color - màu nền có điều kiện javascript

Zze

17.3K12 Huy hiệu vàng82 Huy hiệu bạc113 Huy hiệu đồng12 gold badges82 silver badges113 bronze badges

Hỏi ngày 24 tháng 4 năm 2017 lúc 1:01Apr 24, 2017 at 1:01

2

Vấn đề là câu lệnh IF của bạn chỉ chạy một lần ngay từ đầu. Bạn cần biến nó thành một chức năng và sau đó gọi nó sau mỗi sự kiện. Cái gì đó như

function check() {
    if (one.style.backgroundColor == "red" && two.style.backgroundColor == "red" && three.style.backgroundColor == "red"){
    console.log("red wins");
    }
}

Vào cuối sự kiện, người nghe, bạn sẽ gọi nó như vậy:

check();

(Giống như Xufox đã nói ở trên, bạn thực sự nên xem xét phái đoàn để điều này dễ quản lý hơn và bạn không phải lặp lại mọi thứ.)

Đã trả lời ngày 24 tháng 4 năm 2017 lúc 1:20Apr 24, 2017 at 1:20

Hướng dẫn javascript conditional background color - màu nền có điều kiện javascript

PangopangoPango

6635 Huy hiệu bạc10 Huy hiệu Đồng5 silver badges10 bronze badges

Trong mã của bạn:

var one = document.getElementById("one");
var two = document.getElementById("two");
var three = document.getElementById("three");
var four = document.getElementById("four");
var five = document.getElementById("five");
var six = document.getElementById("six");
var seven = document.getElementById("seven");
var eight = document.getElementById("eight");
var nine = document.getElementById("nine");
  1. Bạn không cần phải khai báo từng nút như thế này. Bạn có thể tối ưu hóa nó bằng một mảng và vòng lặp như

    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    0 hoặc
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    1. Như thế này:

    var knobs = [
        'one', 
        'two', 
        'three', 
        'four', 
        'five', 
        'six', 
        'seven', 
        'eight', 
        'nine'
    ];
    
    knobs.forEach(function(id) {
      var element = document.getElementById(id);
      element.addEventListener('click', function() {
          ...
      }
    }
    
  2. Bạn đang thêm người nghe vào mỗi nút với

    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    2. Điều này có thể được tối ưu hóa khi tôi đề cập đến số của tôi 1. Bạn nhận được phần tử nút với
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    3 và bạn Cand thêm trình nghe trong cùng
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    1.

  3. Tôi cũng đã sử dụng cùng một
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    1 để khởi tạo mảng
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    6 của mình với
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    7 cho mỗi phần tử. Điều này có nghĩa là nó trống rỗng.
  4. Bây giờ bạn cần thêm một phương thức để xác minh là có người chiến thắng sau mỗi lần nhấp. Trong mẫu này, tôi đã sử dụng
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    8 và tôi đã vượt qua chỉ mục của nút;
  5. Ngoài ra, trong dòng này
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    9 chỉ
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    0 là không đủ, vì vậy tôi khuyên bạn nên sử dụng
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    1 để so sánh
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    2.
  6. Vấn đề để sử dụng phương pháp này dựa trên CSS là điều gì xảy ra nếu bạn nhấp vào hai hoặc nhiều lần trong cùng một núm? Bộ đếm sẽ tăng và núm sẽ thay đổi màu từ
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    3 thành
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    4 chẳng hạn. Đó là lý do tại sao tôi khuyên bạn nên sử dụng mảng
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    6 để ánh xạ "Trạng thái trò chơi".what happens if you click two or more times in the same knob? The counter will increase and the knob will change the color from
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    3 to
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    4 for example. That is why I recommend you to use a
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    6 array to map the "game status".
  7. Cuối cùng, tôi đã tạo một
    .knobs {
      background-color: blue;
      border: none;
      padding: 50px;
      margin: 10px;
    }
    
    .knobs:focus {
      outline: none;
    }
    
    #total {
      text-align: center;
    }
    6 dưới dạng một mảng và tôi đặt
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    7 nếu là
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    3 và
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    9 nếu là
    <!DOCTYPE html>
    
    <div id="total">
      <button id="one" class="knobs"></button>
      <button id="two" class="knobs"></button>
      <button id="three" class="knobs"></button>
      <br>
      <button id="four" class="knobs"></button>
      <button id="five" class="knobs"></button>
      <button id="six" class="knobs"></button>
      <br>
      <button id="seven" class="knobs"></button>
      <button id="eight" class="knobs"></button>
      <button id="nine" class="knobs"></button>
    </div>
    4. Điều này sẽ giúp bạn đơn giản hóa quá trình xác minh.

Đây là mẫu mã. Mã hóa hạnh phúc. Lưu ý: Tôi đã giảm kích thước núm để trực quan hóa tốt hơn trong đoạn trích.Note: I reduced the knob size for better visualization in the snippet runner.

var knobs = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
var board = [];

var isRed = true;
var isEndGame = false;
var counter = 0;
knobs.forEach(function(id) {
  var element = document.getElementById(id);
  board.push(-1);
  element.addEventListener('click', function() {
    var index = knobs.indexOf(id);
    if (!isEndGame && board[index] == -1) {
      if (isRed) {
        element.style.backgroundColor = 'red';
        board[index] = 1;
      } else {
        element.style.backgroundColor = 'yellow';
        board[index] = 2;
      }
      verifyWinner(index);
      isRed = !isRed;
      counter++;
      //console.log(counter)
    }
    if (counter == 9) {
      isEndGame = true;
      console.log('End of game.');
    }
  });
});

function verifyWinner(index) {
  //logic for winning
  var player = isRed ? 1 : 2;

  switch (index) {
    case 0:
    case 2:
    case 6:
    case 8:
    case 4:
      verifyVertial(index);
      verifyHorizontal(index);
      verifyDiagonal(index);
      break;
    case 1:
    case 3:
    case 5:
    case 7:
      verifyVertial(index);
      verifyHorizontal(index);
      break;
  }
  if (isEndGame) {
    console.log((isRed ? 'Red' : 'Yellow') + ' has won.');
    console.log('End of game.');
  }
}

function verifyVertial(index) {
  //logic for winning
  if (!isEndGame) {
    var player = isRed ? 1 : 2;
    switch (index) {
      case 0:
      case 3:
      case 6:
        if (board[0] == player && board[3] == player && board[6] == player) {
          isEndGame = true;
        }
        break;
      case 1:
      case 4:
      case 7:
        if (board[1] == player && board[4] == player && board[7] == player) {
          isEndGame = true;
        }
        break;
      case 2:
      case 5:
      case 8: // edges
        if (board[2] == player && board[5] == player && board[8] == player) {
          isEndGame = true;
        }
        break;
    }
  }
}

function verifyHorizontal(index) {
  //logic for winning
  if (!isEndGame) {
    var player = isRed ? 1 : 2;
    switch (index) {
      case 0:
      case 1:
      case 2: // edges
        if (board[0] == player && board[1] == player && board[2] == player) {
          isEndGame = true;
        }
        break;
      case 3:
      case 4:
      case 5:
        if (board[3] == player && board[4] == player && board[5] == player) {
          isEndGame = true;
        }
        break;
      case 6:
      case 7:
      case 8: // edges
        if (board[6] == player && board[7] == player && board[8] == player) {
          isEndGame = true;
        }
        break;
    }
  }
}

function verifyDiagonal(index) {
  //logic for winning
  if (!isEndGame) {
    var player = isRed ? 1 : 2;
    switch (index) {
      case 0:
      case 4:
      case 8: // edges
        if (board[0] == player && board[4] == player && board[8] == player) {
          isEndGame = true;
        }
        break;
      case 2:
      case 4:
      case 6: // edges
        if (board[2] == player && board[4] == player && board[6] == player) {
          isEndGame = true;
        }
        break;
    }
  }
}
.knobs {
  background-color: blue;
  border: none;
  padding: 25px;
  margin: 3px;
}

.knobs:focus .clear:focus {
  outline: none;
}

#total {
  text-align: center;
}

.clear {
  clear: both;
}
<!DOCTYPE html>

<div id="total">
  <button id="one" class="knobs"></button>
  <button id="two" class="knobs"></button>
  <button id="three" class="knobs"></button>
  <div class="clearfix"></div>
  <button id="four" class="knobs"></button>
  <button id="five" class="knobs"></button>
  <button id="six" class="knobs"></button>
  <div class="clearfix"></div>
  <button id="seven" class="knobs"></button>
  <button id="eight" class="knobs"></button>
  <button id="nine" class="knobs"></button>
</div>

Đã trả lời ngày 24 tháng 4 năm 2017 lúc 3:00Apr 24, 2017 at 3:00

Hướng dẫn javascript conditional background color - màu nền có điều kiện javascript

TeoccitocciTeocci

5,8621 Huy hiệu vàng42 Huy hiệu bạc42 Huy hiệu đồng1 gold badge42 silver badges42 bronze badges