Membuat Website Pencarian Kode Pos dengan Javascript
Nama : Gabriel Solomon Sitanggang
NRP : 5025201165
Link repository dapat diakses di link berikut. Atau bisa dilihat langsung dibawah ini
1. index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style.css"> <title>Postal Code</title> </head> <body> <div class="box"> <div class="judul" id="judul"> <h1>🗺️ INDONESIAN POSTAL CODE 🗺️</h1> </div> <div class="flex"> <form id="form"> <div class="divInput"> <label class="judul">Select Province:</label> <select class="btn" id="prov" name="provinsi" required> <option value="" disabled selected>Select Province</option> </select> <label class="judul">Select District:</label> <select class="btn" id="kab" name="kabupaten" required> <option value="" disabled selected>Select District</option> </select> <label class="judul">Postal Code:</label> <input class="btn" id="cari" type="number" placeholder="Masukan kode pos"> </div> </form> </div> <div class="result"> </div> </div> <script type="module" src="main.js"></script> </body> </html>
2. style.css
body {
margin: 0px;
background-color: #3B9AE1;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
height: 100vh;
}
.box {
background-color: #21E1E1;
flex-direction: column;
border: 2px solid black;
width: 50em;
height: 30em;
box-shadow: 5px 5px 0px 0px rgba(0, 0, 0, 0.75);
-webkit-box-shadow: 5px 5px 0px 0px rgba(0, 0, 0, 0.75);
-moz-box-shadow: 5px 5px 0px 0px rgba(0, 0, 0, 0.75);
}
.judul {
width: 100%;
height: 20%;
display: flex;
align-items: center;
justify-content: center;
color: #3120E0;
font-family: monospace;
font-size: larger;
animation: show 2.5s;
opacity: 1;
visibility: visible;
font-weight: bold;
}
.flex {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
form {
padding: 20px;
width: 40%;
height: 200px;
display: flex;
flex-direction: column;
justify-content: center;
animation: show 2.5s;
opacity: 1;
visibility: visible;
}
.divInput {
width: fit-content;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
row-gap: 8px;
}
.btn {
cursor: pointer;
padding: 5px;
border: 2px solid black;
background-color: #F0EABE;
color: black;
font-weight: bold;
width: 100%;
}
.btn:hover {
background-color: #3B9AE1;
color: #000000;
transition: 0.18s ease-in-out;
box-shadow: 3px 3px 0px 0px rgba(0, 0, 0, 0.75);
-webkit-transition: 0.18s ease-in-out;
-moz-transition: 0.18s ease-in-out;
-ms-transition: 0.18s ease-in-out;
-o-transition: 0.18s ease-in-out;
}
form select,
input {
margin-top: 20px;
width: 90%;
height: 30px;
border-radius: 4px;
}
form label {
margin-bottom: -10px;
font-size: 20px;
}
form h1{
display: block;
margin: 0 auto;
margin-top: -20px;
margin-bottom: 40px;
}
h3{
font-size: 14px;
font-weight: normal;
}
p{
font-size: 14px;
}
.result {
margin-top: 200px;
display: grid;
grid-template-columns: auto auto auto auto auto auto;
gap: 20px;
width: 100%;
justify-content: center;
}
.card {
background-color: tomato;
padding: 10px;
text-align: center;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: center;
flex-wrap: wrap;
width: 200px;
height: 200px;
border: solid black;
border-radius: 8px;
box-shadow: 11px 10px 20px -9px rgba(0, 0, 0, 0.7);
-webkit-box-shadow: 11px 10px 20px -9px rgba(0, 0, 0, 0.7);
-moz-box-shadow: 11px 10px 20px -9px rgba(0, 0, 0, 0.7);
animation: show 2.5s;
opacity: 1;
visibility: visible;
font-family: monospace;
font-size: larger;
}
.card:hover {
background-color: #3be140;
color: #000000;
transition: 0.18s ease-in-out;
box-shadow: 3px 3px 0px 0px rgba(0, 0, 0, 0.75);
-webkit-transition: 0.18s ease-in-out;
-moz-transition: 0.18s ease-in-out;
-ms-transition: 0.18s ease-in-out;
-o-transition: 0.18s ease-in-out;
}
@keyframes show {
0%{
opacity: 0;
visibility: hidden;
}
100%{
opacity: 1;
visibility: visible;
}
}
3. main.js
import data from "../data/data.json" assert {type: "json"}
let data_postal = []
const data_prov = []
const provinsi = document.querySelector("#prov")
const select = document.querySelector("#prov")
const select_kab = document.querySelector("#kab")
const kab = document.querySelector("#kab")
document.addEventListener('DOMContentLoaded', function () {
addprov()
setKab()
result()
form()
});
function setKab() {
provinsi.addEventListener("change", function () {
const id = provinsi.value
const postal = data.postal[id]
const option = document.createElement('option')
option.innerText = "Pilih Kabupaten";
option.setAttribute("selected",true)
option.setAttribute("disabled",true)
select_kab.innerText = ''
select_kab.append(option)
data_prov.push(postal)
const city = [...new Set(postal.map((data) => {
return data.city;
}))]
city.sort((a,b)=>{
let fa = a.toLowerCase()
let fb = b.toLowerCase()
if (fa < fb) {
return -1;
}
if (fa > fb) {
return 1;
}
return 0;
})
city.map((data) => {
makeOptionKab(data)
})
})
}
function addprov() {
const prov = Object.entries(data.province)
const data_baru = prov.map((data) => {
return data[1]
})
data_baru.sort((a,b)=>{
let fa = a.province_name.toLowerCase()
let fb = b.province_name.toLowerCase()
if (fa < fb) {
return -1;
}
if (fa > fb) {
return 1;
}
return 0;
})
data_baru.map((data)=>{
makeOption(data)
})
}
function makeOption(provinsi) {
const option = document.createElement('option')
option.innerText = provinsi.province_name;
option.setAttribute('value', provinsi.province_code)
select.append(option)
return select
}
function makeOptionKab(kabupaten) {
const option = document.createElement('option')
option.innerText = kabupaten;
option.setAttribute('value', kabupaten)
select_kab.append(option)
return select
}
function result() {
kab.addEventListener("change", function () {
const elemet = document.getElementsByClassName("card")
if(elemet.length != 0){
for(let i = 0,card ;card = elemet[i];i++)
elemet[i].remove()
}
const value = kab.value;
const result = data_prov[0].filter((data) => {
if ( value == data.city) return data
})
result.map((data) => {
data_postal.push(data)
})
data_postal.map((data)=>{
makeResult(data)
})
data_postal = []
})
}
function makeResult(data) {
const container = document.querySelector(".result");
const div = document.createElement("div")
const title = document.createElement("h3")
const kecamanatan = document.createElement("h3")
const p = document.createElement("p")
title.innerText = `Desa : ${data.urban}`
kecamanatan.innerText = `Kecamatan : ${data.sub_district}`
p.innerText = `kode pos: ${data.postal_code}`
div.classList.add("card")
div.append(kecamanatan,title,p)
container.append(div)
return container
}
function form(){
const cariForm = document.getElementById("form")
cariForm.addEventListener("submit",function(e){
e.preventDefault()
const title = document.getElementsByTagName("p");
const cari = document.querySelector("#cari")
const filter = document.getElementsByClassName("card");
const value = cari.value;
for (let i = 0, list; list = title[i]; i++) {
let text = list.innerHTML;
if (text.indexOf(value) > -1) {
filter[i].style.display = "";
} else if (value.length == 0) {
console.log("hai");
} else
filter[i].style.display = "none";
}
})
}
Untuk tampilan dapat dilihat di bawah ini :
1. Tampilan Awal
4. Hasil dari Pencarian Kode Pos Berdasarkan Provinsi dan Kabupaten yang Berisikan Informasi tentang Kecamatan, Desa, serta Kode Posnya





Tidak ada komentar:
Posting Komentar