HTML+CSS+JS实现在同一个页面内跳转两个不同内容

在项目实践中,我们可能会有如下功能需求:

当我们在登录页面时,需要点击注册功能。同时我们又不想重新加载一个新页面。

如果我们是用Vue来编写这个功能,那会相对容易一些。只需要用Vue-router即可轻松实现该功能。

那么在用Web原生框架的我们要想实现这个功能,就可以尝试用到以下的两种方法:

两种方法的完整代码我都将在文章结尾处给出完整代码

1.通过JavaScript代码来实现修改注入css代码到html代码中:

1.1 首先是需要利用flag来实现标记当前页面,然后就可以对你想要修改的内容来实现相对应的DOM操作:

let flag = 1;

    document.querySelector('.top-tips-span').addEventListener('click', function () {

        if (flag) {

            document.querySelector('.content').classList.add("add-class-content");

            document.querySelector('.login-img').classList.add("add-class-login-img");

            document.querySelector('.register-img').classList.add("add-class-register-img");

            document.querySelector('.login-img').classList.remove("add-class-login-img-show");

            document.querySelector('.login-wrapper').style.height = '80vh';

            document.querySelector('.content').style.height = '90vh';

            document.querySelector('.login-form').style.display = 'none';

            document.querySelector('.register-form').style.display = 'block';

            document.querySelector('.top-tips-span').innerHTML = '登录';

            document.querySelector('.h1-text').innerHTML = '注册';

            flag = 0;

        }

        else {

            document.querySelector('.content').classList.remove("add-class-content");

            document.querySelector('.login-img').classList.remove("add-class-login-img");

            document.querySelector('.login-img').classList.add("add-class-login-img-show");

            document.querySelector('.register-img').classList.remove("add-class-register-img");

            document.querySelector('.login-wrapper').style.height = '70vh';

            document.querySelector('.content').style.height = '85vh';

            document.querySelector('.login-form').style.display = 'block';

            document.querySelector('.register-form').style.display = 'none';

            document.querySelector('.top-tips-span').innerHTML = '注册';

            document.querySelector('.h1-text').innerHTML = '登录';

            flag = 1;

        }

    })

querySelector:文档对象模型Document引用的 querySelector() 方法返回文档中与指定选择器或选择器组匹配的第一个 Element对象。如果找不到匹配项,则返回null

 document.querySelector('.top-tips-span'):你可以简单的理解为利用querySelector()方法可以帮你查找top-tips-span的类名对象。这在我们的CSS和HTML代码中存在这个相对应的类名。

addEventListener('click', function () {}) :方法将指定的监听器注册到 EventTarget 上,当该对象触发指定的事件时,指定的回调函数就会被执行。

你可以理解为当前面你所要查找的类名查找到,并且单击此类名所对应的内容时,它会执行指定的回调函数。

classList.remove和classList.add:你可以理解为将你想要移除或者添加的标签,操作到相对应的文档列表位置。

2.通过JavaScript来实现修改display属性,去控制显示与隐藏

 2.1 第一步你需要先获取到要操作的元素

   

        // 要操作到的元素

        let login = document.getElementById('login');

        let register = document.getElementById('register');

        let form_box = document.getElementsByClassName('form-box')[0];

        let register_box = document.getElementsByClassName('register-box')[0];

        let login_box = document.getElementsByClassName('login-box')[0];

此处有一个小问题?[0]的意义在哪里呢?

这个问题在我写的时候遇到过麻烦,当你不加 [0] 时候,你操作不了对应的点击事件。

因为getElementsByClassName()方法:返回的是一整个对象。而不是你想要操作的标签类。

当你加上 [0] 时候,他就会帮你获取到具体的你想要操作的标签名。

以下的控制台输出截图可以看出两者的区别。

 

加[0]情况

 

未加[0]情况

 2.2 第二步是完成相应的按钮点击事件即可。

        // 去注册按钮点击事件

        register.addEventListener('click', () => {

            form_box.style.transform = 'translateX(80%)';

            login_box.classList.add('hidden');

            register_box.classList.remove('hidden');

        })

        // 去登录按钮点击事件

        login.addEventListener('click', () => {

            form_box.style.transform = 'translateX(0%)';

            register_box.classList.add('hidden');

            login_box.classList.remove('hidden');

        })

 此处是通过提前写好的 hidden 类来实现的增加或者移除。

 同样也可以使用 display 来实现,代码会更简单些:

 Login.onclick = function () {

        LoginBox.style.display = 'block'

    }

    Register.onclick = function () {

        LoginBox.style.display = 'none'

        RegisterBox.style.display = 'block'

    }

直接修改对应类名的display属性,前提是当你需要显示注册内容时,你需要先隐藏掉登录内容。因为注册和登录的内容是在同一个区域内进行显示与隐藏。 

好啦,这就是我的全部理解了。如有不正确的地方欢迎大佬给予指正。如有不理解的内容也可以直接私信我。

以下是所有代码:

案例一代码:

<body>
    <div class="box">
        <div class="content">
            <img class="login-img images" src="./asset/login.jpg" alt="登录">
            <img class="register-img images" src="./asset/register.jpg" alt="注册">
            <div class="login-wrapper">
                <div class="top-tips">
                    <span>CAT IS LITTLE #FFF</span>
                    <span class="top-tips-span">注册</span>
                </div>
                <h1 class="h1-text">登录</h1>
                <div class="other-login">
                    <img src="./asset/QQ.png" alt="">
                    <span>使用QQ登录</span>
                </div>
                <div class="login-form">
                    <div class="user-form form-item">
                        <div class="text-tips">
                            <span>账号</span>
                        </div>
                        <input type="text">
                    </div>
                    <div class="password-form form-item">
                        <div class="text-tips">
                            <span>密码</span>
                            <span class="forgot-password">忘记密码?</span>
                        </div>
                        <input type="password">
                    </div>
                    <button class="btn">登录</button>
                </div>
                <div class="register-form">
                    <div class="user-form form-item">
                        <div class="text-tips">
                            <span>账号</span>
                        </div>
                        <input type="text">
                    </div>
                    <div class="password-form form-item">
                        <div class="text-tips">
                            <span>密码</span>
                        </div>
                        <input type="password">
                    </div>
                    <div class="password-form form-item">
                        <div class="text-tips">
                            <span>确认密码</span>
                        </div>
                        <input type="password">
                    </div>
                    <button class="btn">注册</button>
                </div>
            </div>
        </div>
    </div>
</body>
* {
    margin: 0;
    padding: 0;
  }
  
  .box {
    background-color: rgb(51, 32, 108);
    width: 100vw;
    height: 100vh;
  }
  .box .content {
    width: 90vw;
    height: 85vh;
    background-color: rgb(228, 218, 232);
    border-radius: 40px;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    display: flex;
    justify-content: center;
    align-items: center;
    overflow: hidden;
    transition: 1s;
  }
  .box .content .images {
    margin-left: -150px;
    margin-right: 100px;
    position: absolute;
    left: 15%;
  }
  .box .content .login-img {
    width: 45%;
    height: 90%;
    border-radius: 15%;
  }
  .box .content .register-img {
    width: 45%;
    opacity: 0;
    border-radius: 15%;
  }
  .box .content .login-wrapper {
    width: 30vw;
    height: 70vh;
    border-radius: 40px;
    -webkit-backdrop-filter: blur(1px);
            backdrop-filter: blur(1px);
    background: rgba(244, 240, 245, 0.6);
    padding: 60px;
    box-sizing: border-box;
    position: absolute;
    right: 10%;
    transition: 1s;
  }
  .box .content .login-wrapper .top-tips span:nth-child(1) {
    font-size: 25px;
    font-weight: 600;
  }
  .box .content .login-wrapper .top-tips .top-tips-span {
    font-size: 15px;
    color: rgb(79, 133, 226);
    border-bottom: 1px solid rgb(79, 133, 226);
    float: right;
    line-height: 25px;
    cursor: pointer;
  }
  .box .content .login-wrapper h1 {
    font-size: 45px;
    margin: 20px 0;
  }
  .box .content .login-wrapper .other-login {
    width: 60%;
    height: 50px;
    border-radius: 10px;
    text-align: center;
    line-height: 50px;
    font-size: 20px;
    color: #fff;
    margin: 40px 0;
    background-color: rgb(79, 133, 226);
    padding-bottom: 2px;
    cursor: pointer;
  }
  .box .content .login-wrapper .other-login img {
    width: 25px;
    height: 25px;
    vertical-align: middle;
  }
  .box .content .login-wrapper .other-login span {
    vertical-align: middle;
  }
  .box .content .login-wrapper .login-form,
  .box .content .login-wrapper .register-form {
    width: 100%;
  }
  .box .content .login-wrapper .login-form .form-item .text-tips,
  .box .content .login-wrapper .register-form .form-item .text-tips {
    color: rgb(123, 122, 123);
    margin: 5px;
  }
  .box .content .login-wrapper .login-form .form-item .text-tips .forgot-password,
  .box .content .login-wrapper .register-form .form-item .text-tips .forgot-password {
    font-size: 15px;
    color: rgb(79, 133, 226);
    border-bottom: 1px solid rgb(79, 133, 226);
    float: right;
    line-height: 25px;
    cursor: pointer;
  }
  .box .content .login-wrapper .login-form .form-item input,
  .box .content .login-wrapper .register-form .form-item input {
    width: 100%;
    height: 50px;
    margin: 5px 0;
    border-radius: 5px;
    border: 0;
    font-size: 17px;
    padding: 0 20px;
    box-sizing: border-box;
  }
  .box .content .login-wrapper .login-form .form-item input:focus,
  .box .content .login-wrapper .register-form .form-item input:focus {
    outline: none;
    border: 1px solid rgb(79, 133, 226);
  }
  .box .content .login-wrapper .login-form .btn,
  .box .content .login-wrapper .register-form .btn {
    width: 150px;
    height: 50px;
    margin: 20px 0;
    background-color: rgb(59, 58, 59);
    border: 0;
    border-radius: 5px;
    color: #fff;
    font-size: 20px;
    cursor: pointer;
  }
  .box .content .login-wrapper .login-form {
    display: block;
  }
  .box .content .login-wrapper .register-form {
    display: none;
  }
  
  .add-class-content {
    background-color: rgb(156, 148, 208) !important;
    transition: 0.1s;
  }
  
  .add-class-login-img {
    -webkit-animation: disappear 0.3s forwards;
            animation: disappear 0.3s forwards;
    -webkit-animation-timing-function: ease;
            animation-timing-function: ease;
  }
  
  .add-class-login-img-show {
    -webkit-animation-delay: 1s;
            animation-delay: 1s;
    -webkit-animation: appear 1s forwards;
            animation: appear 1s forwards;
    -webkit-animation-timing-function: ease;
            animation-timing-function: ease;
  }
  
  .add-class-register-img {
    -webkit-animation: appear 1s forwards;
            animation: appear 1s forwards;
    -webkit-animation-timing-function: ease;
            animation-timing-function: ease;
    -webkit-animation-delay: 0.2s;
            animation-delay: 0.2s;
  }
  
  @-webkit-keyframes appear {
    from {
      border-radius: 15%;
      opacity: 0;
    }
    to {
      border-radius: 0%;
      opacity: 1;
    }
  }
  
  @keyframes appear {
    from {
      border-radius: 15%;
      opacity: 0;
    }
    to {
      border-radius: 0%;
      opacity: 1;
    }
  }
  @-webkit-keyframes disappear {
    from {
      opacity: 1;
    }
    to {
      opacity: 0;
    }
  }
  @keyframes disappear {
    from {
      opacity: 1;
    }
    to {
      opacity: 0;
    }
  }/*# sourceMappingURL=style.css.map */
<script>
    let flag = 1;
    document.querySelector('.top-tips-span').addEventListener('click', function () {
        if (flag) {
            document.querySelector('.content').classList.add("add-class-content");
            document.querySelector('.login-img').classList.add("add-class-login-img");
            document.querySelector('.register-img').classList.add("add-class-register-img");
            document.querySelector('.login-img').classList.remove("add-class-login-img-show");
            document.querySelector('.login-wrapper').style.height = '80vh';
            document.querySelector('.content').style.height = '90vh';
            document.querySelector('.login-form').style.display = 'none';
            document.querySelector('.register-form').style.display = 'block';
            document.querySelector('.top-tips-span').innerHTML = '登录';
            document.querySelector('.h1-text').innerHTML = '注册';
            flag = 0;
        }
        else {
            document.querySelector('.content').classList.remove("add-class-content");
            document.querySelector('.login-img').classList.remove("add-class-login-img");
            document.querySelector('.login-img').classList.add("add-class-login-img-show");
            document.querySelector('.register-img').classList.remove("add-class-register-img");
            document.querySelector('.login-wrapper').style.height = '70vh';
            document.querySelector('.content').style.height = '85vh';
            document.querySelector('.login-form').style.display = 'block';
            document.querySelector('.register-form').style.display = 'none';
            document.querySelector('.top-tips-span').innerHTML = '注册';
            document.querySelector('.h1-text').innerHTML = '登录';
            flag = 1;
        }
    })
</script>

 

 案例二代码:

<body>
    <div class="container">
        <div class="form-box">
            <!-- 注册 -->
            <div class="register-box hidden">
                <h1>register</h1>
                <input type="text" placeholder="用户名">
                <input type="email" placeholder="邮箱">
                <input type="password" placeholder="密码">
                <input type="password" placeholder="确认密码">
                <button>注册</button>
            </div>
            <!-- 登录 -->
            <div class="login-box">
                <h1>login</h1>
                <input type="text" placeholder="用户名">
                <input type="password" placeholder="密码">
                <button>登录</button>
            </div>
        </div>
        <div class="con-box left">
            <h2>欢迎来到<span>我的世界</span></h2>
            <img src="../images/cat/1.png" alt="">
            <p>已有账号</p>
            <button id="login">去登录</button>
        </div>
        <div class="con-box right">
            <h2>欢迎来到<span>我的世界</span></h2>
            <img src="../images/cat/2.png" alt="">
            <p>没有账号?</p>
            <button id="register">去注册</button>
        </div>
    </div>
</body>
*{
    /* 初始化 */
    margin: 0;
    padding: 0;
}
body{
    /* 100%窗口高度 */
    height: 100vh;
    /* 弹性布局 水平+垂直居中 */
    display: flex;
    justify-content: center;
    align-items: center;
    /* 渐变背景 */
    background: linear-gradient(200deg,#f3e7e9,#e3eeff);
}
.container{
    background-color: #fff;
    width: 650px;
    height: 415px;
    border-radius: 5px;
    /* 阴影 */
    box-shadow: 5px 5px 5px rgba(0,0,0,0.1);
    /* 相对定位 */
    position: relative;
}
.form-box{
    /* 绝对定位 */
    position: absolute;
    top: -10%;
    left: 5%;
    background-color: #d3b7d8;
    width: 320px;
    height: 500px;
    border-radius: 5px;
    box-shadow: 2px 0 10px rgba(0,0,0,0.1);
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 2;
    /* 动画过渡 加速后减速 */
    transition: 0.5s ease-in-out;
}
.register-box,.login-box{
    /* 弹性布局 垂直排列 */
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100%;
}
.hidden{
    display: none;
    transition: 0.5s;
}
h1{
    text-align: center;
    margin-bottom: 25px;
    /* 大写 */
    text-transform: uppercase;
    color: #fff;
    /* 字间距 */
    letter-spacing: 5px;
}
input{
    background-color: transparent;
    width: 70%;
    color: #fff;
    border: none;
    /* 下边框样式 */
    border-bottom: 1px solid rgba(255,255,255,0.4);
    padding: 10px 0;
    text-indent: 10px;
    margin: 8px 0;
    font-size: 14px;
    letter-spacing: 2px;
}
input::placeholder{
    color: #fff;
}
input:focus{
    color: #a262ad;
    outline: none;
    border-bottom: 1px solid #a262ad80;
    transition: 0.5s;
}
input:focus::placeholder{
    opacity: 0;
}
.form-box button{
    width: 70%;
    margin-top: 35px;
    background-color: #f6f6f6;
    outline: none;
    border-radius: 8px;
    padding: 13px;
    color: #a262ad;
    letter-spacing: 2px;
    border: none;
    cursor: pointer;
}
.form-box button:hover{
    background-color: #a262ad;
    color: #f6f6f6;
    transition: background-color 0.5s ease;
}
.con-box{
    width: 50%;
    /* 弹性布局 垂直排列 居中 */
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    /* 绝对定位 居中 */
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}
.con-box.left{
    left: -2%;
}
.con-box.right{
    right: -2%;
}
.con-box h2{
    color: #8e9aaf;
    font-size: 25px;
    font-weight: bold;
    letter-spacing: 3px;
    text-align: center;
    margin-bottom: 4px;
}
.con-box p{
    font-size: 12px;
    letter-spacing: 2px;
    color: #8e9aaf;
    text-align: center;
}
.con-box span{
    color: #d3b7d8;
}
.con-box img{
    width: 150px;
    height: 150px;
    opacity: 0.9;
    margin: 40px 0;
}
.con-box button{
    margin-top: 3%;
    background-color: #fff;
    color: #a262ad;
    border: 1px solid #d3b7d8;
    padding: 6px 10px;
    border-radius: 5px;
    letter-spacing: 1px;
    outline: none;
    cursor: pointer;
}
.con-box button:hover{
    background-color: #d3b7d8;
    color: #fff;
}
<script>
        // 要操作到的元素
        let login = document.getElementById('login');
        let register = document.getElementById('register');
        let form_box = document.getElementsByClassName('form-box')[0];
        let register_box = document.getElementsByClassName('register-box')[0];
        let login_box = document.getElementsByClassName('login-box');
        console.log(login_box);
        // 去注册按钮点击事件
        register.addEventListener('click', () => {
            form_box.style.transform = 'translateX(80%)';
            login_box.classList.add('hidden');
            register_box.classList.remove('hidden');
        })
        // 去登录按钮点击事件
        login.addEventListener('click', () => {
            form_box.style.transform = 'translateX(0%)';
            register_box.classList.add('hidden');
            login_box.classList.remove('hidden');
        })
    </script>

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
一个完整的后台管理系统需要包括用户登录、数据展示、数据编辑、权限控制等多个模块。以下是一个简单的示例,包含了用户登录和数据展示两个模块,使用了 HTMLCSS 和 JavaScript: 1. 登录页面 ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>后台管理系统-登录</title> <style> body { background-color: #f5f5f5; font-family: Arial, sans-serif; } .login-form { margin: 100px auto; width: 300px; padding: 20px; background-color: #fff; border: 1px solid #ccc; } .login-form h2 { text-align: center; margin-bottom: 20px; } .login-form label { display: block; margin-bottom: 10px; } .login-form input[type="text"], .login-form input[type="password"] { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; margin-bottom: 20px; } .login-form input[type="submit"] { background-color: #4CAF50; color: #fff; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; } .login-form input[type="submit"]:hover { background-color: #3e8e41; } </style> </head> <body> <div class="login-form"> <h2>后台管理系统</h2> <form> <label>用户名:</label> <input type="text" name="username" required> <label>密码:</label> <input type="password" name="password" required> <input type="submit" value="登录"> </form> </div> </body> </html> ``` 2. 数据展示页面 ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>后台管理系统-数据展示</title> <style> body { background-color: #f5f5f5; font-family: Arial, sans-serif; } .header { background-color: #4CAF50; color: #fff; padding: 20px; text-align: center; } .container { margin: 20px auto; width: 80%; background-color: #fff; border: 1px solid #ccc; padding: 20px; } .table { border-collapse: collapse; width: 100%; } .table th, .table td { border: 1px solid #ccc; padding: 10px; } .table th { background-color: #f5f5f5; font-weight: bold; } </style> </head> <body> <div class="header"> <h1>后台管理系统</h1> <p>欢迎您,admin</p> </div> <div class="container"> <h2>用户列表</h2> <table class="table"> <thead> <tr> <th>ID</th> <th>用户名</th> <th>邮箱</th> <th>操作</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>user1</td> <td>[email protected]</td> <td> <a href="#">编辑</a> <a href="#">删除</a> </td> </tr> <tr> <td>2</td> <td>user2</td> <td>[email protected]</td> <td> <a href="#">编辑</a> <a href="#">删除</a> </td> </tr> <tr> <td>3</td> <td>user3</td> <td>[email protected]</td> <td> <a href="#">编辑</a> <a href="#">删除</a> </td> </tr> </tbody> </table> </div> </body> </html> ``` 3. JavaScript 代码 ```javascript // 登录表单提交事件 document.querySelector('form').addEventListener('submit', function(e) { e.preventDefault(); // 阻止表单提交 var username = this.username.value; var password = this.password.value; // 向服务器发送登录请求 // 这里只是模拟,际应用中需要向后端发送请求并验证用户名和密码 if (username === 'admin' && password === 'admin') { location.href = 'data.html'; // 登录成功,到数据展示页面 } else { alert('用户名或密码错误!'); // 登录失败,显示错误提示 } }); ``` 这个示例包含了一个简单的登录页面和一个数据展示页面。当用户在登录页面输入正确的用户名和密码后,会到数据展示页面。在际应用中,需要加上权限控制、数据编辑等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自拍拍到鬼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值