Electric Car Website Project
Step 1 : Coming up with an idea
Purpose:
- As someone interested in new technology and cars, I want to have the users to get information about the Electric vehicles and their qualities that they need
- I want this site to give accessibility to get them book a test drive when the customer's see the car that they want.
- Since in today's world there is a pletora of option to choose from. I want to give users the option to randomly get a car that they can test drive.
Requirements
- Have a webrowser installed.
- Have a code editor installed.
- Have json-server installed in the code editor.
Installation Instructions
- Fork and clone.https://github.com/AricayaJohn/EVTestDrive-Project
- Run
json-server --watch db.json
in code Editor. - Open
index.html
in the browser.
Step 2: Features
- I want to have a title in the header.
To do this, in the HTML add h1 tag in the body of the file.
<h1 id = "header">Electric Car Test Drive</h1>
- I want to have a random button generator.
To do this, we add a button tag with an id attribute in html.
<button id = "randomBtn">Random EV</button>
-I want a list of cars with its information inside a card structure that can also take a user information so that they can book the test drive. (DOMContentLoaded)
To do this we will create a div element with id attribute and a class attribute that will allow us to edit, style and manipulate the data in html.
<div id ="ev-collection" class = "card-containter"></div>
<!--This where we will fetch data from db.json then create a card in js-->
</div>
Step 3 : Come up with an MVP
- I want a list of cars inside a card structure. (DOMContentLoaded) To do this, we are going to fetch the data using DOMCOntentLoaded event listener and use a function to call and create the cards from our the data in our json file.
document.addEventListener("DOMContentLoaded", () => {
fetchGetEVData();
createRandomBtn(); // call the function for random button
})
//This is to get data from db.json
function fetchGetEVData() {
fetch("http://localhost:3000/EV")
.then(resp => resp.json())
.then(data => {
console.log("Data fetched successfully:", data); // Log fetched data json objects to console
data.forEach(EV => showCars(EV));
})
//if promise failed to load data from json file
//then it will show error
.catch(error => {
console.error('Error fetching the json data', error)
})
}
//Create a card
function showCars(EV) {
//Fetch data for ev-collection HTML and create structure to cards
const evCollection = document.getElementById("ev-collection");
const div = document.createElement("div")
div.classList.add("card");
//Create images variable to add to div
const img = document.createElement("img")
img.src = EV.ImageLink
img.classList.add("car-img")
//Create h2 variable to give title for card
const h2 = document.createElement("h2")
h2.textContent = EV.Company
//Create p document for model, price, and range
const p = document.createElement("p")
p.textContent = EV.Model
//Create p for price
const price = document.createElement("p")
price.textContent = EV.Price
//create p for range
const range = document.createElement("p")
range.textContent = EV.Range
- I want to take user information into a form so that they can book the test drive In our index.js, below of our previous syntax we will create a form variable that will contain alabel and input for name, email, and date of testdrive and a submit button for the form
//Create a form for user's info name, email, the day to test drive, and submit button
const form = document.createElement("form")
form.classList.add("comment-form")
//Create a label for name
const userName = document.createElement("Label")
userName.textContent = "Name: ";
const userInput = document.createElement("input")
userName.type = "text"
userInput.name = "name";
//Create a label for email
const userEmail = document.createElement("label")
userEmail.textContent = "Email: ";
const inputEmail = document.createElement("input")
inputEmail.type = "email";
userEmail.name = "email";
//Create a email label and input
const dateLabel = document.createElement("label")
dateLabel.textContent = "Schedule Test Drive: "
const dateInput = document.createElement("input")
dateInput.type = "date";
dateInput.name = "date";
//Create a submit button to submit form
const submitBtn = document.createElement("input")
submitBtn.type = "submit"
submitBtn.value = "submit"
//Handling submit function eventListener
function handleSubmit(event) {
event.preventDefault();
const name = userInput.value;
const email = inputEmail.value;
const date = dateInput.value;
if (!name || !email || !date) {
alert("Please complete all fields before submitting the form.");
return;
}
alert("Your Test Drive reservaton has been completed");
form.reset();
};
//callback
form.addEventListener("submit", handleSubmit)
Then we will append this functions, attributes and elements to the Dom so that we could see it on our website.
//Going to append the form to the card DOM
form.appendChild(userName);
form.append(userInput);
//Create a break to have another input bellow
form.appendChild(document.createElement("br"))
//Going to append the email form to the card DOM
form.appendChild(userEmail);
form.append(inputEmail);
//Going to create a break to put date label and input bellow
form.appendChild(document.createElement("br"))
//Going to append date label and input to the DOM
form.appendChild(dateLabel)
form.append(dateInput);
//Adding a break to put submit button bellow
form.appendChild(document.createElement("br"))
//Appending submit button to form
form.appendChild(submitBtn)
//Connect the data to html div to be able to send to the DOM
div.append (img, h2, p, price, range, form)
evCollection.append(div)
}
*- I want to have a random button generator that would pick a random car for the user. *
To do this, we are getting the randomBtn tag in our HTML and adding a function to it so that it would display a random EV card.
function createRandomBtn() {
const randomBtn = document.getElementById("randomBtn");
randomBtn.classList.add("random-btn");
randomBtn.addEventListener("click", () => {
const cards = document.querySelectorAll(".card");
const randomIndex = Math.floor(Math.random() * cards.length);
cards.forEach((card, index) => {
if (index === randomIndex) {
card.style.display = "block"; // Show the selected card
} else {
card.style.display = "none"; // Hide the other cards
}
});
});
}
**- I want an alert to show up when form is submitted or is incomplete. **
To do this, we add a function and event listener bellow our submit button that we created.
//handling submit
function handleSubmit(event) {
event.preventDefault();
const name = userInput.value;
const email = inputEmail.value;
const date = dateInput.value;
if (!name || !email || !date) {
alert("Please complete all fields before submitting the form.");
return;
}
alert("Your Test Drive reservaton has been completed");
form.reset();
};
form.addEventListener("submit", handleSubmit)
Step 4 : Stretch goals
- I want to have a drop down button that filters down to the car model
- I want user can like/favorite the vehicle (click)
- Add form for user to submit a test drive request to their email at certain date
Top comments (0)