使用JavaScrip和HTML搭建一个简单的博客网站系统

搭建一个简单的博客网站系统,我们需要创建几个基本的页面和功能:登录、注册、文章发布等。这里我们先实现一个基础版本,包括用户登录、注册以及文章发布的功能。由于这是一个简化版的示例,我们将所有逻辑集成在一个HTML文件中,并使用JavaScript来处理前端逻辑。

1.界面展示


2.功能说明

这个简易博客系统包含以下功能:

  1. 登录:用户可以输入邮箱和密码进行登录。
  2. 注册:用户可以注册新的账户,需要提供用户名、邮箱和密码。
  3. 发表文章:登录后,用户可以在"发表新文章"表单中输入标题和内容,点击"发表"按钮后,文章会显示在下方的文章列表中,同时附带发布时间和发布人信息。
  4. 展示文章:所有已发布的文章都会显示在页面底部,按照发布时间倒序排列。

为了增强博客系统的功能,我们将添加以下内容:

  1. 登录界面 :增加修改密码和根据邮箱找回密码的功能。

  2. 博客文章:增加评论和删除功能。

主要新增功能说明:

  1. 登录界面:

    • 忘记密码:用户可以通过输入邮箱来请求密码重置链接,并跳转到修改密码页面。
    • 修改密码:用户可以在此页面输入新密码并保存。
  2. 博客文章:

    • 评论:每篇文章下方都有一个评论区,用户可以添加评论,评论会显示评论者、时间和内容。
    • 删除文章:只有发布人可以删除自己的文章(此处简化为任何人都能删除)。

3.完整代码

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>增强版简易博客系统</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        .container {
            max-width: 600px;
            margin: auto;
        }
        .form-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
        }
        input[type="text"],
        input[type="password"],
        textarea {
            width: 100%;
            padding: 8px;
            box-sizing: border-box;
        }
        button {
            padding: 10px 15px;
            background-color: #007BFF;
            color: white;
            border: none;
            cursor: pointer;
        }
        button:hover {
            background-color: #0056b3;
        }
        .post {
            border-bottom: 1px solid #ccc;
            padding: 10px 0;
        }
        .post-author,
        .post-date {
            color: #555;
        }
        .comment-section {
            margin-top: 10px;
        }
        .comment {
            margin-left: 20px;
            padding: 5px 0;
        }
    </style>
</head>
<body>
<div class="container">
    <h1>增强版简易博客系统</h1>
    <div id="login-form" class="form-container">
        <h2>登录</h2>
        <div class="form-group">
            <label for="login-email">邮箱:</label>
            <input type="text" id="login-email">
        </div>
        <div class="form-group">
            <label for="login-password">密码:</label>
            <input type="password" id="login-password">
        </div>
        <button onclick="handleLogin()">登录</button>
        <p>还没有账号?<a href="#" onclick="showRegisterForm()">注册</a></p>
        <p><a href="#" onclick="showForgotPasswordForm()">忘记密码?</a></p>
    </div>

    <div id="register-form" class="form-container" style="display:none;">
        <h2>注册</h2>
        <div class="form-group">
            <label for="register-name">用户名:</label>
            <input type="text" id="register-name">
        </div>
        <div class="form-group">
            <label for="register-email">邮箱:</label>
            <input type="text" id="register-email">
        </div>
        <div class="form-group">
            <label for="register-password">密码:</label>
            <input type="password" id="register-password">
        </div>
        <button onclick="handleRegister()">注册</button>
        <p>已经有账号?<a href="#" onclick="showLoginForm()">登录</a></p>
    </div>

    <div id="forgot-password-form" class="form-container" style="display:none;">
        <h2>找回密码</h2>
        <div class="form-group">
            <label for="forgot-email">邮箱:</label>
            <input type="text" id="forgot-email">
        </div>
        <button onclick="handleForgotPassword()">发送重置链接</button>
        <p><a href="#" onclick="showLoginForm()">返回登录</a></p>
    </div>

    <div id="change-password-form" class="form-container" style="display:none;">
        <h2>修改密码</h2>
        <div class="form-group">
            <label for="new-password">新密码:</label>
            <input type="password" id="new-password">
        </div>
        <button onclick="handleChangePassword()">修改密码</button>
        <p><a href="#" onclick="showLoginForm()">返回登录</a></p>
    </div>

    <div id="blog-form" class="form-container" style="display:none;">
        <h2>发表新文章</h2>
        <div class="form-group">
            <label for="post-title">标题:</label>
            <input type="text" id="post-title">
        </div>
        <div class="form-group">
            <label for="post-content">内容:</label>
            <textarea id="post-content"></textarea>
        </div>
        <button onclick="publishPost()">发表</button>
        <p><a href="#" onclick="logout()">注销</a></p>
    </div>

    <div id="posts-list" style="margin-top: 20px;"></div>
</div>

<script>
    let users = [];
    let currentUser = null;
    let posts = [];

    function showLoginForm() {
        document.getElementById('login-form').style.display = 'block';
        document.getElementById('register-form').style.display = 'none';
        document.getElementById('forgot-password-form').style.display = 'none';
        document.getElementById('change-password-form').style.display = 'none';
        document.getElementById('blog-form').style.display = 'none';
        document.getElementById('posts-list').innerHTML = '';
    }

    function showRegisterForm() {
        document.getElementById('login-form').style.display = 'none';
        document.getElementById('register-form').style.display = 'block';
        document.getElementById('forgot-password-form').style.display = 'none';
        document.getElementById('change-password-form').style.display = 'none';
        document.getElementById('blog-form').style.display = 'none';
        document.getElementById('posts-list').innerHTML = '';
    }

    function showForgotPasswordForm() {
        document.getElementById('login-form').style.display = 'none';
        document.getElementById('register-form').style.display = 'none';
        document.getElementById('forgot-password-form').style.display = 'block';
        document.getElementById('change-password-form').style.display = 'none';
        document.getElementById('blog-form').style.display = 'none';
        document.getElementById('posts-list').innerHTML = '';
    }

    function handleChangePasswordForm() {
        document.getElementById('login-form').style.display = 'none';
        document.getElementById('register-form').style.display = 'none';
        document.getElementById('forgot-password-form').style.display = 'none';
        document.getElementById('change-password-form').style.display = 'block';
        document.getElementById('blog-form').style.display = 'none';
        document.getElementById('posts-list').innerHTML = '';
    }

    function handleRegister() {
        const name = document.getElementById('register-name').value;
        const email = document.getElementById('register-email').value;
        const password = document.getElementById('register-password').value;

        if (!name || !email || !password) {
            alert('请填写所有字段');
            return;
        }

        const userExists = users.some(user => user.email === email);
        if (userExists) {
            alert('该邮箱已被注册');
            return;
        }

        users.push({ name, email, password });
        alert('注册成功!');
        showLoginForm();
    }

    function handleLogin() {
        const email = document.getElementById('login-email').value;
        const password = document.getElementById('login-password').value;

        const user = users.find(u => u.email === email && u.password === password);
        if (!user) {
            alert('邮箱或密码错误');
            return;
        }

        currentUser = user;
        alert(`欢迎回来,${currentUser.name}!`);
        showBlogForm();
    }

    function handleForgotPassword() {
        const email = document.getElementById('forgot-email').value;
        const user = users.find(u => u.email === email);
        if (!user) {
            alert('未找到该邮箱的用户');
            return;
        }

        alert('已发送密码重置链接到您的邮箱,请检查邮件。');
        handleChangePasswordForm();
    }

    function handleChangePassword() {
        const newPassword = document.getElementById('new-password').value;
        if (!newPassword) {
            alert('请输入新密码');
            return;
        }

        currentUser.password = newPassword;
        alert('密码修改成功!');
        showLoginForm();
    }

    function publishPost() {
        const title = document.getElementById('post-title').value;
        const content = document.getElementById('post-content').value;

        if (!title || !content) {
            alert('请填写所有字段');
            return;
        }

        const post = {
            title,
            content,
            author: currentUser.name,
            date: new Date().toLocaleString(),
            comments: [],
            id: Date.now()
        };

        posts.unshift(post);
        document.getElementById('post-title').value = '';
        document.getElementById('post-content').value = '';
        renderPosts();
    }

    function addComment(postId) {
        const commentInput = document.getElementById(`comment-input-${postId}`);
        const commentText = commentInput.value.trim();

        if (!commentText) {
            alert('请输入评论内容');
            return;
        }

        const post = posts.find(p => p.id === postId);
        if (post) {
            post.comments.push({
                text: commentText,
                author: currentUser ? currentUser.name : '匿名',
                date: new Date().toLocaleString()
            });
            commentInput.value = '';
            renderPosts();
        }
    }

    function deletePost(postId) {
        posts = posts.filter(p => p.id !== postId);
        renderPosts();
    }

    function renderPosts() {
        const postsList = document.getElementById('posts-list');
        postsList.innerHTML = '';

        posts.forEach((post, index) => {
            const postElement = document.createElement('div');
            postElement.className = 'post';
            postElement.innerHTML = `
                <h3>${post.title}</h3>
                <p>${post.content}</p>
                <div class="post-info">
                    <span class="post-author">作者: ${post.author}</span>
                    <span class="post-date">时间: ${post.date}</span>
                </div>
                <div class="comment-section">
                    <h4>评论 (${post.comments.length})</h4>
                    ${post.comments.map(comment => ` <div class="comment"> <strong>${comment.author}</strong> - ${comment.date}<br> ${comment.text} </div> `).join('')}
                    <div class="form-group">
                        <label for="comment-input-${post.id}">添加评论:</label>
                        <input type="text" id="comment-input-${post.id}">
                        <button οnclick="addComment(${post.id})">提交</button>
                    </div>
                </div>
                <button οnclick="deletePost(${post.id})" style="margin-top: 10px;">删除文章</button>
            `;
            postsList.appendChild(postElement);
        });
    }

    function logout() {
        currentUser = null;
        showLoginForm();
    }

    function showBlogForm() {
        document.getElementById('login-form').style.display = 'none';
        document.getElementById('register-form').style.display = 'none';
        document.getElementById('forgot-password-form').style.display = 'none';
        document.getElementById('change-password-form').style.display = 'none';
        document.getElementById('blog-form').style.display = 'block';
        renderPosts();
    }

    showLoginForm();
</script>
</body>
</html>
相关推荐
枣把儿1 分钟前
开源!全套公众号写作、封面、发布自动化工具包!
前端·命令行
陶醉的松鼠5 分钟前
前端容易忽略的 debugger 调试技巧
前端
我命由我123455 分钟前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee
龙九山9 分钟前
我的 10 个 npm 插件,差点被 AI 判了死刑
前端·开源
deli00712 分钟前
键盘按键测试:按下就点亮,keydown 延迟精确到 1 毫秒
前端
Amos_Web19 分钟前
通过 Rspack 源码学 Rust(三):用 Default 与 std::mem::take 取出字段所有权
前端
MetWeave27 分钟前
风怎么流动:色斑告诉你多大,告诉不了你去哪
前端·数据可视化
Amos_Web28 分钟前
Rspack 源码解析(三十三):Module Federation 如何用 RemoteModule 与 ContainerEntryModule 表示远程代
前端
特立独行的猫A38 分钟前
仓颉语言实现的Harness: 一口气派三个子代理,cjh 的并发不是“多线程“,是“进程树“
前端·harmonyos
Dumbness40 分钟前
农历转换的 4 个边界:2 月 30 日能转出"正月十四"、小月没有三十、闰月、立春到春节之间的干支
前端·javascript