JS实现搜索功能页面(可搜索,无需数据库,无后端)

很多刚学习前端的小伙伴想做一个搜索页面,一看要做后端又要数据库的可能就放弃了,这里给大家带来一个不需要数据库的,也可以使用的搜索功能页面。网页包含了3个功能:搜索框,类别选项,价格进度条。

搜索框是实时搜索的,而且做了不区分英语大小写,也支持中文搜索。

 使用类别选项,筛选相应类别的手表。

 拉动价值进度条筛选相应价格的手表。

 filter.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<link rel="stylesheet" href="./filter.css"/>
		<title>Filter Project</title>

	</head>
	<body>
		<div class="container">
			<div class="leftMenu">
				<input type="text" placeholder="Search..." class="search" />
				<h1>Categories</h1>
				<div class="cats">
				</div>
				<h1>Maximum Price</h1>
				<div class="price">
					<input type="range" class="priceRange" />
					<span class="priceValue"></span>
				</div>
			</div>
			<div class="content">
				<div class="products">
					<div class="product">
						<img 
							src="https://m.media-amazon.com/images/I/71e04Q53xlL._AC_UY879_.jpg" 
							alt=""
						/>
						<span class="name">name</span>
						<span class="priceText">$44</span>
					</div>
				</div>
			</div>
		</div>
		
		<script src="./filter.js"></script>
	</body>
</html>

filter.css

body{
	
}

.container{
	display: flex;
	padding: 50px;
}

.leftMenu{
	flex: 1;
}

.search{
	padding: 10px;
	width: 200px;
	border: 1px solid gray;
}

h1{
	font-size: 30px;
	color: #555;
	font-weight: 300;
}

.cat{
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.cat{
	cursor: pointer;
	font-size: 20px;
	font-weight: 300;
	padding: 5px;
}


.content{
	flex: 4;
}

.products{
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
}

.product{
	width: 350px;
	display: flex;
	flex-direction: column;
	gap: 30px;
	align-items: center;
}

img{
	width: 150px;
	height: 250px;
	object-fit: contain;
}

.name{
	font-weight: 300;
}

filter.js

const data = [
	{
		id: 1,
		name: "Invicta Men's Pro Diver",
		img: "https://m.media-amazon.com/images/I/71e04Q53xlL._AC_UY879_.jpg",
		price: 74,
		cat: "Dress",
	},
	{
		id: 2,
		name: "Timex Men's Expedition Scout",
		img: "https://m.media-amazon.com/images/I/91WvnZ1g40L._AC_UY879_.jpg",
		price: 62,
		cat: "Dress",
	},
	{
		id: 3,
		name: "Breitling Superocean Heritage",
		img: "https://m.media-amazon.com/images/I/61hGDiWBU8L._AC_UY879_.jpg",
		price: 40,
		cat: "Casual",
	},
	{
		id: 4,
		name: "Casio Classic Resin Strap",
		img: "https://m.media-amazon.com/images/I/51Nk5SEBARL._AC_UY879_.jpg",
		price: 200,
		cat: "Sport",
	},
	{
		id: 5,
		name: "Garmin Venu Smartwatch",
		img: "https://m.media-amazon.com/images/I/51kyjYuOZhL._AC_UY879_.jpg",
		price: 16,
		cat: "Luxury",
	},

];


const productsContainer = document.querySelector(".products")
const searchInput = document.querySelector(".search")
const categoriesContainer = document.querySelector(".cats")
const priceRange = document.querySelector(".priceRange")
const priceValue = document.querySelector(".priceValue")

const displayProducts = (filteredProducts) =>{
	productsContainer.innerHTML = filteredProducts.map(product=>
	`
	<div class="product">
		<img 
			src=${product.img} 
			alt=""
		/>
		<span class="name">${product.name}</span>
		<span class="priceText">$${product.price}</span>
	</div>
	`
	).join("");
};

displayProducts(data);

searchInput.addEventListener("keyup",(e) => {
	const value = e.target.value.toLowerCase();
	
	if(value){
		displayProducts(data.filter(item=> item.name.toLowerCase().indexOf(value) != -1))
	}else{
		displayProducts(data);
	}
	
});

const setCategories = () => {
	const allCats = data.map((item) => item.cat)
	const categories = ["All",
	...allCats.filter((item,i) => {
		return allCats.indexOf(item)===i
	})
	];
	
	categoriesContainer.innerHTML = categories.map(cat=>
	`
	<span class="cat">${cat}</span>
	
	`
	).join("");
	
	categoriesContainer.addEventListener("click",(e)=>{
		const selectedCat = e.target.textContent;
		selectedCat === "All" ? displayProducts(data) : displayProducts(data.filter(item=>
		item.cat === selectedCat));
	});
	
};

const setPrices = ()=>{
	const priceList = data.map((item) => item.price);
	const minPrice = Math.min(...priceList)
	const maxPrice = Math.max(...priceList)
	
	priceRange.min = minPrice
	priceRange.max = maxPrice
	priceRange.value = maxPrice
	priceValue.textContent = "$" + maxPrice
	
	priceRange.addEventListener("input",(e)=>{
		priceValue.textContent = "$" + e.target.value;
		displayProducts(data.filter((item) => item.price <= e.target.value));
	});
	
};

setCategories();
setPrices();

  • 3
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
登录页面是音乐网站中重要的组成部分,通过HTML、CSS和JavaScript的配合,可以实现一个简单而美观的登录页面。以下是实现登录页面的一些基本步骤: 1.创建HTML文件并定义基本结构。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <div class="login-page"> <div class="form"> <form class="login-form"> <input type="text" placeholder="用户名"/> <input type="password" placeholder="密码"/> <button>登录</button> <p class="message">还没有账号?<a href="#">立即注册</a></p> </form> </div> </div> </body> </html> ``` 2.使用CSS样式美化页面。 ```css body { background: #f2f2f2; font-family: sans-serif; } .login-page { width: 360px; padding: 8% 0 0; margin: auto; } .form { position: relative; z-index: 1; background: white; max-width: 360px; margin: 0 auto 100px; padding: 45px; text-align: center; box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24); } .form input { font-family: "Roboto", sans-serif; outline: 0; background: #f2f2f2; width: 100%; border: 0; margin: 0 0 15px; padding: 15px; box-sizing: border-box; font-size: 14px; } .form button { font-family: "Roboto", sans-serif; text-transform: uppercase; outline: 0; background: #4CAF50; width: 100%; border: 0; padding: 15px; color: #FFFFFF; font-size: 14px; -webkit-transition: all 0.3 ease; transition: all 0.3 ease; cursor: pointer; } .form button:hover,.form button:active,.form button:focus { background: #43A047; } .form .message { margin: 15px 0 0; color: #b3b3b3; font-size: 12px; } .form .message a { color: #4CAF50; text-decoration: none; } ``` 3.使用JavaScript实现交互效果。 ```javascript document.querySelector('.message a').addEventListener('click', function() { document.querySelector('.login-form').style.display = "none"; document.querySelector('.register-form').style.display = "block"; }); document.querySelector('.register-form a').addEventListener('click', function() { document.querySelector('.register-form').style.display = "none"; document.querySelector('.login-form').style.display = "block"; }); ``` 通过以上步骤,就可以实现一个简单的音乐网站登录页面。请注意,此页面只是一个简单的示例,实际开发中还需要考虑更多的功能和交互设计,如账号验证、注册、找回密码等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值