JavaScript 實現動態產品展示網頁

JavaScript 實現動態產品展示網頁

  • 1. HTML 頁面結構
  • 2. CSS 樣式設計
  • 3. JavaScript 實現功能
  • 功能總結

本文設計了一個基于 JavaScript 的動態產品展示網頁案例,核心功能包括:

  1. 動態產品分類過濾:通過點擊分類按鈕,僅顯示屬于該分類的產品。
  2. 產品詳情彈窗:點擊某個產品,顯示該產品的詳細信息。
  3. 搜索功能:用戶可以通過輸入關鍵字快速搜索產品。

1. HTML 頁面結構

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Dynamic Product Showcase</title><link rel="stylesheet" href="styles.css">
</head>
<body><!-- 頁面頭部 --><header><h1>Dynamic Product Showcase</h1><input type="text" id="searchBox" placeholder="Search products..." /></header><!-- 分類按鈕 --><div class="categories"><button data-category="all" class="category-button active">All</button><button data-category="electronics" class="category-button">Electronics</button><button data-category="fashion" class="category-button">Fashion</button><button data-category="home" class="category-button">Home</button></div><!-- 產品展示區 --><main><div class="product-list"><div class="product" data-category="electronics"><img src="https://via.placeholder.com/150" alt="Product 1"><h3>Smartphone</h3><p>$299</p></div><div class="product" data-category="fashion"><img src="https://via.placeholder.com/150" alt="Product 2"><h3>Leather Jacket</h3><p>$99</p></div><div class="product" data-category="home"><img src="https://via.placeholder.com/150" alt="Product 3"><h3>Table Lamp</h3><p>$49</p></div><div class="product" data-category="electronics"><img src="https://via.placeholder.com/150" alt="Product 4"><h3>Laptop</h3><p>$899</p></div></div></main><!-- 彈窗顯示產品詳情 --><div id="productModal" class="modal hidden"><div class="modal-content"><span id="closeModal" class="close">&times;</span><img id="modalImage" src="" alt="Product Image"><h3 id="modalTitle"></h3><p id="modalPrice"></p><p id="modalDescription"></p></div></div><script src="script.js"></script>
</body>
</html>

2. CSS 樣式設計

/* 通用樣式 */
body {font-family: Arial, sans-serif;margin: 0;padding: 0;
}header {background-color: #333;color: white;padding: 20px;text-align: center;
}input#searchBox {margin-top: 10px;padding: 5px;width: 80%;max-width: 400px;
}.categories {display: flex;justify-content: center;padding: 20px;background-color: #f4f4f4;
}.category-button {margin: 0 10px;padding: 10px 20px;border: none;background-color: #007BFF;color: white;cursor: pointer;border-radius: 5px;
}.category-button.active {background-color: #0056b3;
}.product-list {display: flex;flex-wrap: wrap;gap: 20px;justify-content: center;padding: 20px;
}.product {width: 200px;border: 1px solid #ccc;border-radius: 5px;text-align: center;padding: 10px;cursor: pointer;transition: transform 0.3s;
}.product:hover {transform: scale(1.05);
}/* 模態框樣式 */
.modal {display: none;position: fixed;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.8);justify-content: center;align-items: center;z-index: 1000;
}.modal-content {background-color: white;padding: 20px;border-radius: 10px;text-align: center;width: 300px;
}.close {float: right;cursor: pointer;color: red;
}

3. JavaScript 實現功能

// 獲取 DOM 元素
const categoryButtons = document.querySelectorAll('.category-button');
const products = document.querySelectorAll('.product');
const searchBox = document.getElementById('searchBox');
const modal = document.getElementById('productModal');
const modalImage = document.getElementById('modalImage');
const modalTitle = document.getElementById('modalTitle');
const modalPrice = document.getElementById('modalPrice');
const modalDescription = document.getElementById('modalDescription');
const closeModal = document.getElementById('closeModal');// 產品分類過濾
categoryButtons.forEach(button => {button.addEventListener('click', () => {const category = button.getAttribute('data-category');// 更新按鈕樣式categoryButtons.forEach(btn => btn.classList.remove('active'));button.classList.add('active');// 顯示/隱藏產品products.forEach(product => {const productCategory = product.getAttribute('data-category');if (category === 'all' || productCategory === category) {product.style.display = 'block';} else {product.style.display = 'none';}});});
});// 搜索功能
searchBox.addEventListener('input', (e) => {const query = e.target.value.toLowerCase();products.forEach(product => {const title = product.querySelector('h3').textContent.toLowerCase();if (title.includes(query)) {product.style.display = 'block';} else {product.style.display = 'none';}});
});// 產品詳情彈窗
products.forEach(product => {product.addEventListener('click', () => {const imageSrc = product.querySelector('img').src;const title = product.querySelector('h3').textContent;const price = product.querySelector('p').textContent;modalImage.src = imageSrc;modalTitle.textContent = title;modalPrice.textContent = price;modalDescription.textContent = 'This is a detailed description of ' + title + '.';modal.style.display = 'flex';});
});// 關閉彈窗
closeModal.addEventListener('click', () => {modal.style.display = 'none';
});

功能總結

  1. 點擊 分類按鈕,僅顯示對應分類的產品。
  2. 輸入關鍵字到 搜索框,可實時過濾產品列表。
  3. 點擊產品卡片,彈窗顯示產品的詳情信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64311.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64311.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡爬蟲科普:原理、類型、策略與常用工具

網絡爬蟲科普&#xff1a;原理、類型、策略與常用工具 網絡爬蟲在當今互聯網時代扮演著極為重要的角色&#xff0c;它能幫助我們從海量的網絡信息中提取出有價值的數據。以下將從網絡爬蟲的基本概念、工作流程、類型、搜索策略以及常用工具等方面進行詳細科普介紹。 一、網絡…

strace工具使用

下載地址&#xff1a; https://github.com/strace/strace/releases/tag/v6.12 解壓后執行以下命令 ./configure --hostarm-linux --prefix/home/wei/Code/strace/strace-6.12/out CC/home/wei/Code/firmware/prebuilts/host/gcc/gcc-arm-10.2-2020.11-x86_64-arm-none-linux…

圖像處理-Ch2-空間域的圖像增強

Ch2 空間域的圖像增強 文章目錄 Ch2 空間域的圖像增強Background灰度變換函數(Gray-level Transformation)對數變換(Logarithmic)冪律變換(Power-Law)分段線性變換函數(Piecewise-Linear)對比度拉伸(Contrast-Stretching)灰度級分層(Gray-level Slicing) 直方圖處理(Histogram …

Linux | Ubuntu零基礎安裝學習cURL文件傳輸工具

目錄 介紹 檢查安裝包 下載安裝 手冊 介紹 ?cURL是一個利用URL語法在命令行下工作的文件傳輸工具&#xff0c;首次發行于1997年??12。cURL支持多種協議&#xff0c;包括FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3…

cesium通過經緯度獲取3dtiles 得feature信息

找到這里3dtiles的兩種訪問方式&#xff1a; 1.1 3DTileContent#getFeature 這里涉及3DTile 數據結構&#xff0c;暫不了解3DTile 數據結構&#xff0c;因此暫不使用。 1.2 scene.pick 本次使用 scene表示虛擬場景中所有 3D 圖形對象和狀態的容器&#xff1b;scene中…

內置ALC的前置放大器D2538A/D3308

一、概述 D2538A/D3308是芯谷科技推出的帶有ALC&#xff08;自動電平控制&#xff09;的前置音頻放大器芯片&#xff0c;最初產品為單聲道/立體聲收錄機及盒式錄音機而開發&#xff0c;作為錄音/回放的磁頭放大器使用&#xff1b;由于產品的高增益、低噪聲及ALC外部可調的特性&…

基于SSM的“快遞管理系統”的設計與實現(源碼+數據庫+文檔+PPT)

基于SSM的“快遞管理系統”的設計與實現&#xff08;源碼數據庫文檔PPT) 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 登陸頁面 注冊頁面 快遞員頁面 派單員訂單管理頁面 派單員訂單添…

Mac 查詢IP配置,網絡代理

常用命令 1.查詢IP ifconfig | grep "inet" 2.ping查詢 ping 172.18.54.19&#xff08;自己IP&#xff09; 3.取消代理&#xff0c;通過在終端執行以下命令&#xff0c;可以取消 Git 的代理設置 git config --global --unset http.proxy git config --global …

Spring創建異步線程,使用@Async注解時不指定value可以嗎?

在Spring中使用Async注解時&#xff0c;不指定value是可以的。如果沒有指定value&#xff08;即線程池的名稱&#xff09;&#xff0c;Spring會默認使用名稱為taskExecutor的線程池。如果沒有定義taskExecutor線程池&#xff0c;則Spring會自動創建一個默認的線程池。 默認行為…

Python小括號( )、中括號[ ]和大括號{}代表什么

python語言最常見的括號有三種&#xff0c;分別是&#xff1a;小括號( )、中括號[ ]和大括號也叫做花括號{ }&#xff0c;分別用來代表不同的python基本內置數據類型。 小括號&#xff08;&#xff09;&#xff1a;struct結構體&#xff0c;但不能改值 python中的小括號( )&am…

QML 之狀態

文章目錄 狀態示例 1&#xff1a;矩形的可見/隱藏切換功能介紹&#xff1a; 示例 2&#xff1a;按鈕的激活/非激活狀態功能介紹&#xff1a; 示例 3&#xff1a;面板的展開/折疊功能介紹&#xff1a; 示例 4&#xff1a;燈泡的開/關功能介紹&#xff1a; 總結 狀態 狀態是界面中…

C語言簡單測試總結

前言 在學C語言之前回顧一下C中的一些知識.選用的是中國大學MOOC中C程序設計(面向對象進階)中的C語言水平評估測試題. 題目 ?The keyword "unsigned" can modify the keyword [ B ] A.signed B.long C.long double D.float題解:unsigned是無符號的意識,通常在…

frp(s) 內網穿透 Liunx環境雙端Docker部署

FRP(Fast Reverse Proxy)是一款高性能的反向代理應用,主要用于內網穿透、負載均衡和反向代理等多種場景。它能夠將內網中的服務暴露給公網,實現遠程訪問。此外,FRP還可以用于接收類似GitHub或第三方提供的Webhook請求。在微服務架構中,FRP可以作為服務調用的反向代理,提…

代碼隨想錄算法訓練營第三十五天|01背包問題 二維和一維(卡碼網第46題)、416分割等和子集

day35 動態規劃part03 1. 01背包問題 二維 卡碼網第46題 01 背包&#xff1a;有n件物品和一個最多能背重量為w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的價值是value[i] 。每件物品只能用一次&#xff0c;求解將哪些物品裝入背包里物品價值總和最大。 動規五部…

【Unity3D】ECS入門學習(九)SystemBase

SystemBase&#xff1a;支持主線程或多線程執行篩選實體任務。 主要介紹是內部成員&#xff1a;Entities的各種篩選方法&#xff0c;其內部成員還有EntityManager ForEach方法篩選&#xff0c;傳遞一個有參委托函數進去&#xff0c;參數ref xxx組件類&#xff08;可填多個&…

[Android]init中添加新的command

在Android的init進程中&#xff0c;command是用于定義啟動時要執行的具體命令行指令的關鍵部分。init進程是Android系統啟動的第一個進程&#xff0c;它負責初始化系統的各個組件&#xff0c;并啟動必要的服務。command可以在init.rc文件及其包含的其他.rc文件中找到&#xff0…

STM32F103RCT6學習之五:ADC

1.ADC基礎 ADC&#xff08;Analog-Digital Converter&#xff09;模擬-數字轉換器ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量&#xff0c;建立模擬電路到數字電路的橋梁12位逐次逼近型ADC&#xff0c;1us轉換時間 輸入電壓范圍&#xff1a;0~3.3V&#xff…

strncpy函數和使用案例

strncpy 是 C 語言標準庫函數之一&#xff0c;用于字符串操作。它的功能是將源字符串&#xff08;source&#xff09;中的字符復制到目標字符串&#xff08;destination&#xff09;中&#xff0c;但最多復制 n 個字符。如果源字符串的長度小于 n&#xff0c;則目標字符串剩余的…

實現類似gpt 打字效果

1. css的動畫&#xff08;animation) css中實現動畫有兩種方式&#xff1a;transition過渡動畫、 animation自定義動畫。 具體的可以看MDN鏈接&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定義關鍵幀動畫并未其命名使用自定義動…

微軟遠程桌面APP怎么用

微軟遠程桌面&#xff08;Remote Desktop&#xff09;客戶端&#xff08;RD Client&#xff09;是一款由微軟開發的應用程序&#xff0c;允許用戶通過網絡連接遠程訪問和控制另一臺計算機。同時&#xff0c;微軟遠程桌面RD Client支持多種設備和操作系統&#xff0c;包括Window…