css 如何根据所选按钮显示图像

nvbavucw  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(128)

我在HTML文件中创建了4个按钮。我在JavaScript文件中创建了一个名为products的对象,使用大括号{}创建。在该对象中,我创建了一个名为data的Array,使用方括号[]创建。在该Array中,我创建了许多不同的对象,使用大括号{}创建。
数组中的每个对象都正确显示。现在我想创建一个过滤器,它将只显示数组中的某些对象,这取决于按下哪个按钮。
在我的HTML文件中,我有这样的代码:

<div id="buttons">
   <button id="all" class="button-value" onclick="filterProduct('all')">All</button>
   <button id="product1" class="button-value" onclick="filterProduct('product1')">Product 1</button>
   <button id="product2" class="button-value" onclick="filterProduct('product2')">Product 2</button>
   <button id="product3" class="button-value" onclick="filterProduct('product3')">product3</button>
</div>

在我的CSS文件中,我有这样的代码:

.hide {
    display: none;
}

我用JavaScript创建的对象:

let products = {
    data: [
        {
            productName: "Item 1",
            category: "product1",
            price: "30",
            image: "image-of-the-product-1.jpg",
        },
        {
            productName: "Item 2",
            category: "product2",
            price: "49",
            image: "image-of-the-product-2.jpg",
        },
        {
            productName: "Item 3",
            category: "product3",
            price: "99",
            image: "image-of-the-product-3.jpg",
        },
    ]
}

JavaScript中的filterProduct函数:

// Parameter passed from button (Parameter same as category)
function filterProduct(value) {
    // Select all elements
    let elements = document.querySelectorAll(".card");
    // Loop through the elements
    elements.forEach((element) => {
    // Display all cards on all button click
    if (value == "all") {
        element.classList.remove("hide");
    } else {
        // Check if element contains category class
        if (element.classList.contains(value)) {
            // Display elements based on category
            element.classList.remove("hide");
        } else {
            // Hide other elements
            element.classList.add("hide");
        }
    }
});
}

如果用户单击带有product 1筛选器的按钮,则只应显示类别为product 1的产品。如果用户单击带有product 2筛选器的按钮,则只应显示类别为product 2的产品。如果用户单击带有product 3筛选器的按钮,则只应显示类别为product 3的产品。如果用户单击“全部”按钮,所有的产品都应该展示出来。

cclgggtu

cclgggtu1#

在这里您可以找到工作演示DEMO
我已经添加了我自己的卡到现在为止,但你可以改变这根据你的需要。

rqcrx0a6

rqcrx0a62#

let products = {
  data: [{
      productName: "Item 1",
      category: "product1",
      price: "30",
      image: "https://via.placeholder.com/200x200",
    },
    {
      productName: "Item 2",
      category: "product2",
      price: "49",
      image: "https://via.placeholder.com/400x400",
    },
    {
      productName: "Item 3",
      category: "product3",
      price: "99",
      image: "https://via.placeholder.com/350x150",
    },
    {
      productName: "Item 3",
      category: "all",
      price: "99",
      image: "https://via.placeholder.com/200x100",
    },
  ]
}

function filterProduct(value) {
  var newArray = products.data.filter(function(item) {
    return item.category == value;
  })[0];
  console.log(newArray)
  var html = [
    '<div class="uicomponent-panel-controls-container">',
    '<img src=' + newArray.image + '>',
    '</div>'
  ].join('\n');
  document.getElementById("displayImage").innerHTML = html;
}
.hide {
  display: none;
}
<div id="buttons">
  <button id="all" class="button-value" onclick="filterProduct('all')">All</button>
  <button id="product1" class="button-value" onclick="filterProduct('product1')">Product 1</button>
  <button id="product2" class="button-value" onclick="filterProduct('product2')">Product 2</button>
  <button id="product3" class="button-value" onclick="filterProduct('product3')">product3</button>
</div>

<div id="displayImage"></div>

一个一个三个一个一个一个一个一个四个一个一个一个一个一个五个一个
如果数据是静态的,那么你可以使用开关的情况下,这是你可以显示图像根据按钮点击
如果数据是动态的,而您无法Map该数据,则可以使用filterMap该数据

相关问题