Home > Web Front-end > CSS Tutorial > Building a Random Quotes Generator: A Step-by-Step Guide with Code

Building a Random Quotes Generator: A Step-by-Step Guide with Code

DDD
Release: 2025-01-22 04:46:21
Original
467 people have browsed it

Building a Random Quotes Generator: A Step-by-Step Guide with Code

This tutorial guides you through building a practical Random Quotes Generator application, perfect for learning coding fundamentals. We'll cover each step with detailed code examples, making it easy for beginners to follow along.


Project Overview

This app retrieves random quotes from a public API, displays them, and lets users copy or share them. Let's break down the process and explore the code logic.


Step 1: HTML Structure

We begin by creating the HTML layout:

<code class="language-html"><!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Random Quotes Generator</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div id="app">
        <!-- Content will be added here -->
    </div>
    <script src="index.js"></script>
</body>
</html></code>
Copy after login

This sets up the basic structure, including elements to display the quote, buttons for new quotes, and icons for copying and sharing.


Step 2: CORS Handling with a Proxy

To access the external API, we need a CORS (Cross-Origin Resource Sharing) solution. A simple Express.js proxy server handles this:

<code class="language-javascript">// proxy.js
const express = require("express");
const fetch = require("node-fetch");
const cors = require("cors");
const app = express();

app.use(cors());

app.get("/api/quote", async (req, res) => {
    try {
        const response = await fetch("https://qapi.vercel.app/api/random");
        const data = await response.json();
        res.json(data);
    } catch (error) {
        res.status(500).json({ error: "API fetch failed" });
    }
});

const PORT = 4000;
app.listen(PORT, () => console.log(`Proxy running on http://localhost:${PORT}`));</code>
Copy after login

This local proxy fetches quotes and avoids CORS issues.


Step 3: Fetching Quotes with JavaScript

The "New Quote" button triggers a quote fetch:

<code class="language-javascript">// index.js
const quoteDisplay = document.getElementById("quote");
const authorDisplay = document.getElementById("author");

async function getQuote() {
    try {
        const response = await fetch('http://localhost:4000/api/quote');
        const data = await response.json();
        quoteDisplay.textContent = data.quote || "No quote found.";
        authorDisplay.textContent = data.author || "Unknown";
    } catch (error) {
        console.error("Quote fetch error:", error);
        quoteDisplay.textContent = "Error fetching quote.";
    }
}</code>
Copy after login

This script fetches data, updates the quote and author in the UI.


Step 4: Copy Functionality

The Clipboard API enables quote copying:

<code class="language-javascript">// copyQuote.js
async function copyQuote() {
    try {
        const quoteText = `${quoteDisplay.textContent} - ${authorDisplay.textContent}`;
        await navigator.clipboard.writeText(quoteText);
        alert("Copied to clipboard!");
    } catch (error) {
        console.error("Copy failed:", error);
    }
}</code>
Copy after login

Clicking the copy icon copies the quote and author.


Step 5: Share Functionality

The Navigator API facilitates sharing:

<code class="language-javascript">// shareQuote.js
async function shareQuote() {
    const quoteText = `${quoteDisplay.textContent} - ${authorDisplay.textContent}`;
    try {
        await navigator.share({ text: quoteText });
    } catch (error) {
        console.error("Share failed:", error);
        // Fallback for unsupported browsers
        alert(`Share this quote: ${quoteText}`);
    }
}</code>
Copy after login

This handles sharing, providing a fallback for browsers lacking navigator.share.


Step 6: Styling with CSS

CSS styles the app for visual appeal and responsiveness (example styles omitted for brevity).


Step 7: Launching the App

  1. Clone the repository: (replace with your actual repository URL)
  2. Install dependencies: npm install
  3. Start the proxy server: node proxy.js
  4. Open index.html in your browser.

Project Structure

  • index.html: Main UI
  • proxy.js: CORS proxy server
  • index.js: Quote fetching and display
  • copyQuote.js: Copy functionality
  • shareQuote.js: Share functionality
  • styles.css: Styling

API Credit

Quotes provided by the Quotes API.


Conclusion

This tutorial covered building a Random Quotes Generator, demonstrating API integration, CORS handling, and browser APIs. It's a great exercise for learning API interaction, JavaScript fundamentals, and browser APIs. Feedback is welcome!

GitHub | LinkedIn | X

The above is the detailed content of Building a Random Quotes Generator: A Step-by-Step Guide with Code. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template