Day 15 | Demo Mockdata

Sử dụng HTML , CSS, JS  thiết kế chức năng Mockdata

 
 
 
				
					<body>
    <div class="container">
      <header>
        <h4 class="title"><span class="ez-toc-section" id="Live_Product_Filter"></span>Live Product Filter<span class="ez-toc-section-end"></span></h4>
        <div class="form-input">
          <i class="fas fa-search"></i>
          <input
            type="text"
            id="filter"
            placeholder="Tìm sản phẩm mong muốn..."
          />
        </div>
      </header>

      <div class="products">
        <div>
          <h3><span class="ez-toc-section" id="Loading"></span>Loading...<span class="ez-toc-section-end"></span></h3>
        </div>
      </div>
    </div>
    <script src="app.js"></script>
  </body>
				
			
				
					@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');

* {
	padding: 0;
	margin: 0;
	box-sizing: border-box;
}

body {
	background-color: #dadada;
	font-family: 'Roboto', sans-serif;
	height: 100vh;
	width: 100%;
}

.container {
	border-radius: 10px;
	box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
	width: 400px;
	margin: 80px auto;
	background-color: #fff;
	overflow: hidden;
}

header {
	padding: 20px 15px;
}

h4 {
	margin-bottom: 20px;
	font-size: 20px;
	color: #333;
}

.form-input {
	display: flex;
	align-items: center;
	border: 1px solid #333;
	border-radius: 5px;
}

.form-input input {
	outline: none;
	border: none;
	background-color: transparent;
	font-size: 16px;
	padding: 8px 10px;
	width: 100%;
}

.form-input i {
	color: #555;
	padding-left: 10px;
}

/* Products */
.products {
	margin-top: 15px;
	width: 100%;
	overflow-y: auto;
	max-height: 400px;
	overflow-y: auto;
}

h3 {
	padding: 8px 20px;
}

.product {
	display: flex;
	align-items: center;
	cursor: pointer;
	margin-bottom: 10px;
	padding: 8px 20px;
	height: 100px;
}

.product:hover {
	background-color: #ddd;
}

.product img {
	width: 50px;
	object-fit: cover;
	object-position: center;
	margin-right: 20px;
}

.product h4 {
	font-size: 15px;
	color: #333;
	margin-bottom: 15px;
	font-weight: 600;
}

.hide {
	display: none;
}

				
			
				
					const products = document.querySelector('.products')
const filter = document.getElementById('filter')
const listItems = []

getData()

filter.addEventListener('input', (e) => filterData(e.target.value))

<a href="https://nodemy.vn/di-sau-vao-async-await-trong-javascript-huong-dan-tu-co-ban-den-nang-cao-don-gian-de-hieu-danh-cho-nguoi-moi-bat-dau-important/">async</a> <a href="https://nodemy.vn/tim-hieu-ve-ham-trong-javascript-cach-tao-truyen-tham-so-va-su-dung-mot-cach-hieu-qua-don-gian-de-hieu-danh-cho-nguoi-moi-bat-dau-important/">function</a> getData() {
	const res = await fetch('https://fakestoreapi.com/products')

	const results = await res.json()

	// Clear products
	products.innerHTML = ''

	results.forEach((product) => {
		const div = document.createElement('div')
		div.setAttribute('class', 'product')
		listItems.push(div)

		div.innerHTML = `
			<img decoding="async" src="${product.image}" alt="học lập trình frontend, fullstack hà nội, ${product" title="# Day 15 | Thế nào là MockData? Filter, tìm kiếm sản phẩm trong dự án shop bán hàng, thương mại điện tử 1 học lập trình frontend, fullstack hà nội">
			<div class="product-detail">
				<h4><span class="ez-toc-section" id="producttitleslice0_30"></span>${product.title.slice(0, 30)}<span class="ez-toc-section-end"></span></h4>
				<p>$${product.price}</p>
			</div>
        `

		products.appendChild(div)
	})
}

function filterData(search) {
	listItems.forEach((item) => {
		if (item.innerText.toLowerCase().includes(search.toLowerCase())) {
			item.classList.remove('hide')
		} else {
			item.classList.add('hide')
		}
	})
}
				
			
LỘ TRÌNH LÊN FULLSTACK, trọn bộ serial course Pro HTML,CSS,JAVASCRIPT MIỄN PHÍ :

HTML : HTML căn bản cho người mới bắt đầu

CSS : CSS căn bản cho người mới bắt đầu

JS: Javascript cho người mới bắt đầu 

 
 
 

Leave a Reply

Your email address will not be published. Required fields are marked *