【问题标题】:Movie Seat Booking Project with plain JavaScript, HTML, and CSS使用纯 JavaScript、HTML 和 CSS 的电影座位预订项目
【发布时间】:2022-01-19 13:21:51
【问题描述】:

任何人都可以帮助我按照以下要求将我当前的代码更改为:

  • 创建一个程序,显示座位安排,如果座位 已经被占用了。
  • 在座位安排上方,将当前预订状态注明给 “未预订”。
  • 鼠标悬停在单个座位上时,座位的当前状态 将在上面显示。如果座位已被占用,则座位 应该是灰色的,鼠标悬停在当前状态应该显示 “采取”。
  • 选择可用座位会将座位颜色更改为 绿色。选择 2 个座位后,将烹饪状态更改为“已预订”。和 两个座位都应该是灰色的。

提前非常感谢您!当我点击确认预订时,座位似乎没有变灰。

$(function () {
  $(".place").click(function () {
    $(this).toggleClass("active");
  });
  $(".unbooked").attr("title","Unbooked");
  $(".taken").attr("title","Taken");
});

$("#submit").click(function () {
  $(".place").each(function () {
    if ($(this).hasClass("active")) {
      $(this).addClass("taken");
      $(this).removeClass("unbooked");
      $(this).attr("title","Taken");
      alert("Seats booked: " + $(this).text())
    }
  });
});

const container = document.querySelector('.container')
const seats = document.querySelectorAll('.row .seat:not(.occupied)')
const count = document.getElementById('count')

container.addEventListener('click', function (e) {
  console.log(e.target)
  if (
    e.target.classList.contains('seat') &&
    !e.target.classList.contains('occupied')
  ) {
    console.log(e.target)
    e.target.classList.toggle('selected')
    updateSelectedCount()
  }
})

function updateSelectedCount() {
  const selectedSeats = document.querySelectorAll('.row .seat.selected')
  const selectedSeatsCount = selectedSeats.length
  count.innerText = selectedSeatsCount
}
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
  background-color: #242333;
  color: white;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
}
.order,
.result {
  float: right;
  width: 20%;
  
}
.movie-container {
  margin: 20px 0;
}
.movie-container select {
  background-color: #fff;
  border-radius: 5px;
  border: none;
  font-size: 14px;
  margin-left: 10px;
  padding: 5px 15px;
  outline: none;
}
.seat {
  background-color: #198bad;
  height: 19px;
  width: 20px;
  margin: 3px;
  border-top-left-radius: 10px;
  border-top-right-radius: 10px;
}
.seat.selected {
  background-color: #16df16;
}
.seat.occupied {
  background-color: grey;
}
.seat:nth-of-type(2) {
  margin-right: 18px;
}
.seat:nth-last-of-type(2) {
  margin-left: 18px;
}
.seat:not(.occupied):hover {
  cursor: pointer;
  transform: scale(1.2);
}
.showcase .seat:not(.occupied):hover {
  cursor: default;
  transform: scale(1);
}
.showcase {
  background-color: rgba(0, 0, 0, 0.1);
  padding: 5px 10px;
  border-radius: 5px;
  color: #777;
  list-style: none;
  display: flex;
  justify-content: space-between;
}
.showcase li {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 10px;
}
.showcase li small {
  margin-left: 2px;
}
.row {
  display: flex;
}
.screen {
  background-color: #fff;
  height: 70px;
  width: 100%;
  margin: 15px 0;
  transform: rotateX(-45deg);
  box-shadow: 0 3px 10px rgba(255, 255, 255, 0.7);
}
.container {
  perspective: 1000px;
  margin-bottom: 30px;
}
p.text {
  margin: 5px 0;
}
p.text span {
  color: #6feaf6;
}
.active {
  background: green;
  color: #fff;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="stylesheet" href="Q7.css" />
  <title>Movie Seat Booking</title>
</head>

<body>
  <div class="movie-container">
    <label> Avaliable screenings</label>
    <select id="movie">
      <option>Steve To The Rescue</option>
    </select>
  </div>
  <ul class="showcase">
    <li>
      <div class="seat"></div>
      <small>N/A</small>
    </li>
    <li>
      <div class="seat selected"></div>
      <small>Selected</small>
    </li>
    <li>
      <div class="seat occupied"></div>
      <small>Occupied</small>
    </li>
  </ul>
  <div class="container">
    <div class="screen"></div>
    <div class="row">
      <div class="col col-lg-1 place mx-auto unbooked seat"> A1</div>
      <div class="col col-lg-1 place mx-auto unbooked seat"> A2</div>
      <div class="col col-lg-1 place mx-auto unbooked seat"> A3</div>
      <div class="col col-lg-1 place mx-auto unbooked seat"> A4</div>
      <div class="col col-lg-1 place mx-auto unbooked seat"> A5</div>

    </div>
    <div class="row">
      <div class="col col-lg-1 place mx-auto unbooked seat">B1</div>
      <div class="col col-lg-1 place mx-auto unbooked seat">B2</div>
      <div class="col col-lg-1 place mx-auto taken occupied seat">B3</div>
      <div class="col col-lg-1 place mx-auto taken occupied seat">B4</div>
      <div class="col col-lg-1 place mx-auto unbooked seat">B5</div>

    </div>
    <div class="row">
      <div class="col col-lg-1 place mx-auto unbooked seat">C1</div>
      <div class="col col-lg-1 place mx-auto unbooked seat">C2</div>
      <div class="col col-lg-1 place mx-auto taken occupied seat">C3</div>
      <div class="col col-lg-1 place mx-auto taken occupied seat">C4</div>
      <div class="col col-lg-1 place mx-auto unbooked seat">C5</div>
    </div>

  </div>
  <p class="text">You have selected <span id="count">0</span> seats
  </p>
  <div class="container order d-grid gap-2 mx-auto">
    <input class="btn btn-secondary mx-auto" type="button" value="Confirm Booking" id="submit">
  </div>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script src="Q7.js"></script>
</body>

</html>

【问题讨论】:

  • 座椅不变灰是您想要的唯一解决方案吗?

标签: javascript html jquery css


【解决方案1】:

将座椅变灰

而不是alert("Seats booked: " + $(this).text())

添加这一行$(this).addClass("occupied");

$(function () {
  $(".place").click(function () {
    $(this).toggleClass("active");
  });
  $(".unbooked").attr("title","Unbooked");
  $(".taken").attr("title","Taken");
});

$("#submit").click(function () {
  $(".place").each(function () {
    if ($(this).hasClass("active")) {
      $(this).addClass("taken");
      $(this).removeClass("unbooked");
      $(this).attr("title","Taken");
      $(this).addClass("occupied");
    }
  });
});

const container = document.querySelector('.container')
const seats = document.querySelectorAll('.row .seat:not(.occupied)')
const count = document.getElementById('count')

container.addEventListener('click', function (e) {
  console.log(e.target)
  if (
    e.target.classList.contains('seat') &&
    !e.target.classList.contains('occupied')
  ) {
    console.log(e.target)
    e.target.classList.toggle('selected')
    updateSelectedCount()
  }
})

function updateSelectedCount() {
  const selectedSeats = document.querySelectorAll('.row .seat.selected')
  const selectedSeatsCount = selectedSeats.length
  count.innerText = selectedSeatsCount
}
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
  background-color: #242333;
  color: white;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
}
.order,
.result {
  float: right;
  width: 20%;
  
}
.movie-container {
  margin: 20px 0;
}
.movie-container select {
  background-color: #fff;
  border-radius: 5px;
  border: none;
  font-size: 14px;
  margin-left: 10px;
  padding: 5px 15px;
  outline: none;
}
.seat {
  background-color: #198bad;
  height: 19px;
  width: 20px;
  margin: 3px;
  border-top-left-radius: 10px;
  border-top-right-radius: 10px;
}
.seat.selected {
  background-color: #16df16;
}
.seat.occupied {
  background-color: grey;
}
.seat:nth-of-type(2) {
  margin-right: 18px;
}
.seat:nth-last-of-type(2) {
  margin-left: 18px;
}
.seat:not(.occupied):hover {
  cursor: pointer;
  transform: scale(1.2);
}
.showcase .seat:not(.occupied):hover {
  cursor: default;
  transform: scale(1);
}
.showcase {
  background-color: rgba(0, 0, 0, 0.1);
  padding: 5px 10px;
  border-radius: 5px;
  color: #777;
  list-style: none;
  display: flex;
  justify-content: space-between;
}
.showcase li {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 10px;
}
.showcase li small {
  margin-left: 2px;
}
.row {
  display: flex;
}
.screen {
  background-color: #fff;
  height: 70px;
  width: 100%;
  margin: 15px 0;
  transform: rotateX(-45deg);
  box-shadow: 0 3px 10px rgba(255, 255, 255, 0.7);
}
.container {
  perspective: 1000px;
  margin-bottom: 30px;
}
p.text {
  margin: 5px 0;
}
p.text span {
  color: #6feaf6;
}
.active {
  background: green;
  color: #fff;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="stylesheet" href="Q7.css" />
  <title>Movie Seat Booking</title>
</head>

<body>
  <div class="movie-container">
    <label> Avaliable screenings</label>
    <select id="movie">
      <option>Steve To The Rescue</option>
    </select>
  </div>
  <ul class="showcase">
    <li>
      <div class="seat"></div>
      <small>N/A</small>
    </li>
    <li>
      <div class="seat selected"></div>
      <small>Selected</small>
    </li>
    <li>
      <div class="seat occupied"></div>
      <small>Occupied</small>
    </li>
  </ul>
  <div class="container">
    <div class="screen"></div>
    <div class="row">
      <div class="col col-lg-1 place mx-auto unbooked seat"> A1</div>
      <div class="col col-lg-1 place mx-auto unbooked seat"> A2</div>
      <div class="col col-lg-1 place mx-auto unbooked seat"> A3</div>
      <div class="col col-lg-1 place mx-auto unbooked seat"> A4</div>
      <div class="col col-lg-1 place mx-auto unbooked seat"> A5</div>

    </div>
    <div class="row">
      <div class="col col-lg-1 place mx-auto unbooked seat">B1</div>
      <div class="col col-lg-1 place mx-auto unbooked seat">B2</div>
      <div class="col col-lg-1 place mx-auto taken occupied seat">B3</div>
      <div class="col col-lg-1 place mx-auto taken occupied seat">B4</div>
      <div class="col col-lg-1 place mx-auto unbooked seat">B5</div>

    </div>
    <div class="row">
      <div class="col col-lg-1 place mx-auto unbooked seat">C1</div>
      <div class="col col-lg-1 place mx-auto unbooked seat">C2</div>
      <div class="col col-lg-1 place mx-auto taken occupied seat">C3</div>
      <div class="col col-lg-1 place mx-auto taken occupied seat">C4</div>
      <div class="col col-lg-1 place mx-auto unbooked seat">C5</div>
    </div>

  </div>
  <p class="text">You have selected <span id="count">0</span> seats
  </p>
  <div class="container order d-grid gap-2 mx-auto">
    <input class="btn btn-secondary mx-auto" type="button" value="Confirm Booking" id="submit">
  </div>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script src="Q7.js"></script>
</body>

</html>

使用全屏

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多