这个功能可以通过以下步骤使用 JavaScript 实现:

  1. 为每个特色菜创建一个对象,包括图片、价格、名称等信息。

  2. 在页面中创建一个特色菜列表,每个菜品都有一个点击事件。

  3. 点击特色菜时,将相应的菜品对象信息显示在右侧的菜品详情区域,包括图片、价格、名称等信息,并显示加减餐的界面。

  4. 使用 JavaScript 计算所选菜品的总价格,并将其显示在页面底部。

以下是一个简单的实现示例:

HTML 代码:

<div class='special-dishes'>
  <ul>
    <li data-id='1'>特色菜1</li>
    <li data-id='2'>特色菜2</li>
    <li data-id='3'>特色菜3</li>
  </ul>
</div>

<div class='dish-details'>
  <img src='' alt='' class='dish-image'>
  <h3 class='dish-name'></h3>
  <p class='dish-price'></p>
  <div class='add-remove'>
    <button class='btn-add'>加餐</button>
    <span class='dish-quantity'>1</span>
    <button class='btn-remove'>减餐</button>
  </div>
</div>

<div class='cart'>
  <h4>购物车</h4>
  <ul class='cart-items'></ul>
  <p class='cart-total'>总价:¥0</p>
</div>

JavaScript 代码:

// 定义特色菜品对象
var dishes = [
  {
    id: 1,
    name: '特色菜1',
    price: 38,
    image: 'dish1.jpg'
  },
  {
    id: 2,
    name: '特色菜2',
    price: 48,
    image: 'dish2.jpg'
  },
  {
    id: 3,
    name: '特色菜3',
    price: 58,
    image: 'dish3.jpg'
  }
];

// 获取页面元素
var dishList = document.querySelector('.special-dishes ul');
var dishImage = document.querySelector('.dish-image');
var dishName = document.querySelector('.dish-name');
var dishPrice = document.querySelector('.dish-price');
var btnAdd = document.querySelector('.btn-add');
var btnRemove = document.querySelector('.btn-remove');
var dishQuantity = document.querySelector('.dish-quantity');
var cartItems = document.querySelector('.cart-items');
var cartTotal = document.querySelector('.cart-total');

// 定义变量
var selectedDishes = [];
var total = 0;

// 渲染特色菜列表
dishes.forEach(function(dish) {
  var li = document.createElement('li');
  li.textContent = dish.name;
  li.dataset.id = dish.id;
  li.addEventListener('click', function() {
    renderDishDetails(dish);
  });
  dishList.appendChild(li);
});

// 渲染菜品详情
function renderDishDetails(dish) {
  dishImage.src = dish.image;
  dishName.textContent = dish.name;
  dishPrice.textContent = '¥' + dish.price.toFixed(2);
  dishQuantity.textContent = 1;
  btnAdd.addEventListener('click', function() {
    dishQuantity.textContent++;
  });
  btnRemove.addEventListener('click', function() {
    if (dishQuantity.textContent > 1) {
      dishQuantity.textContent--;
    }
  });
}

// 添加菜品到购物车
function addToCart(dish) {
  var li = document.createElement('li');
  li.textContent = dish.name + ' x ' + dishQuantity.textContent;
  cartItems.appendChild(li);
  selectedDishes.push({
    name: dish.name,
    price: dish.price,
    quantity: parseInt(dishQuantity.textContent)
  });
  total += dish.price * parseInt(dishQuantity.textContent);
  cartTotal.textContent = '总价:¥' + total.toFixed(2);
}

// 监听加入购物车按钮
btnAdd.addEventListener('click', function() {
  var dishId = parseInt(dishList.querySelector('.active').dataset.id);
  var dish = dishes.find(function(dish) {
    return dish.id === dishId;
  });
  addToCart(dish);
});

// 监听减少购物车按钮
btnRemove.addEventListener('click', function() {
  var dishId = parseInt(dishList.querySelector('.active').dataset.id);
  var dish = dishes.find(function(dish) {
    return dish.id === dishId;
  });
  selectedDishes.pop();
  total -= dish.price * parseInt(dishQuantity.textContent);
  cartItems.removeChild(cartItems.lastChild);
  cartTotal.textContent = '总价:¥' + total.toFixed(2);
});

// 监听特色菜点击事件
dishList.addEventListener('click', function(event) {
  var dishId = parseInt(event.target.dataset.id);
  var dish = dishes.find(function(dish) {
    return dish.id === dishId;
  });
  dishList.querySelectorAll('li').forEach(function(li) {
    li.classList.remove('active');
  });
  event.target.classList.add('active');
  renderDishDetails(dish);
});

这段代码中,首先定义了特色菜品对象数组 dishes,包括每个菜品的ID、名称、价格和图片。然后获取页面元素,并定义了一些变量,如选中的菜品数组 selectedDishes 和总价 total

接下来,使用 forEach 方法渲染特色菜列表,为每个菜品添加点击事件,点击菜品时会调用 renderDishDetails 方法,将菜品详情信息显示在右侧的菜品详情区域。

renderDishDetails 方法中,根据传入的菜品对象渲染菜品详情信息,包括菜品图片、名称、价格和加减餐的按钮。点击加减餐按钮时会改变菜品数量的显示。

addToCart 方法中,将选中的菜品信息添加到购物车中,并计算购物车中所有菜品的总价,最后将总价显示在页面底部。

最后,监听加入购物车和减少购物车按钮的点击事件,并根据选中的菜品信息计算购物车中所有菜品的总价。监听特色菜点击事件,根据选中的菜品对象渲染菜品详情信息。

JavaScript 实现特色菜点餐系统:点击展示详情、加减餐、计算总价

原文地址: https://www.cveoy.top/t/topic/otYf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录