2-数据的存储-注册-登录-修改密码

一 返回到上一页

用BOM内置对象history来实现这个功能

/**
 * 返回到上一页
 */
function back(){
    let oimg = document.querySelector("header img")
    oimg.addEventListener("click",function(){
        history.back()
    })
}

二 密码框显示密码

html

        <div>
            <div class="pwd">
                <label for="pwd">密码</label>
                <a href="./updatePassword.html">忘记密码?</a>
            </div>
            <input type="password" id="pwd">
            <span id="pwd-msg">密码不能为空</span>
            <img src="./images/eye.png" alt="">
        </div>

js

/**
 * 密码框显示密码
 */
function showPassword(){
    let oimg = document.querySelector("main >div:nth-child(2) >img")
    let oinput = document.querySelector("#pwd")
    oimg.addEventListener("click",function(){
        //如果图片是闭眼的状态,则修改图片为睁眼的状态,并修改input输入框type属性的值为text
        if(this.getAttribute("src")=="./images/eye.png"){
            this.setAttribute("src","./images/eye_open.png")
            oinput.setAttribute("type","text")
        }else{
            this.setAttribute("src","./images/eye.png")
            oinput.setAttribute("type","password")
        }
    })
}

三 浏览器存储技术

浏览器提供了存储技术,可以让我们把数据临时或者永久的保存到浏览器上

localStorage 本地存储技术,可以把数据永久的保存到浏览器上

sessionStorage 会话存储技术,保存到浏览器上的数据只在一次会话的过程中有效

什么是会话:打开浏览器 —— 访问项目中的网页 ——关闭浏览器

浏览器存储技术存储的数据是键值对结构,而且键和值都必须是字符串

键具有唯一性

浏览器存储API

方法说明
setItem(key,value)保存数据
getItem(key)获取数据
removeItem(key)删除数据
clear()清除所有的数据

本地存储

    <h1>本地存储</h1>
    <div class="local">
        <button>保存数据</button>
        <button>获取数据</button>
        <button>删除数据</button>
        <button>清空数据</button>
    </div>
    <script>
        let obtns = document.querySelectorAll(".local button")
        //保存数据
        obtns[0].onclick = function(){
            localStorage.setItem("username","admin")
        }
        //获取数据
        obtns[1].onclick = function(){
            let val = localStorage.getItem("username")
            console.log(val);
        }
        //删除数据
        obtns[2].onclick = function(){
            localStorage.removeItem("username")
        }
        //清空数据
        obtns[3].onclick = function(){
            localStorage.clear()
        }
    </script>

会话存储

    <h1>会话存储</h1>
    <div class="session">
        <button>保存数据</button>
        <button>获取数据</button>
        <button>删除数据</button>
        <button>清空数据</button>
    </div>
    <script>
        let obtnArr = document.querySelectorAll(".session button")
        //保存数据
        obtnArr[0].onclick = function(){
            sessionStorage.setItem("name","赵日天")
        }
        //获取数据
        obtnArr[1].onclick = function(){
            let val = sessionStorage.getItem("name")
            console.log(val);
        }
        //删除数据
        obtnArr[2].onclick = function(){
            sessionStorage.removeItem("name")
        }
        //清空数据
        obtnArr[3].onclick = function(){
            sessionStorage.clear()
        }
    </script>

四 JSON

JSON和JS对象的关系

JSON是JS对象的字符串表示法

let obj = {a:"hello",b:"world"} //这是js对象
let json = '{“a”:"hello","b":"world"}' //是字符串

JSON的作用

1.浏览器无法保存js对象,我们想让浏览器保存js对象这样的数据格式,我们可以把js对象转成json字符串再保存到浏览器
2.前后端交互的一种数据格式

JSON和JS对象的互转

1 JS对象转JSON字符串
语法: JSON.stringify(js对象)
let obj = {a:"hello",b:"world"} //这是js对象
console.log("js对象的数据类型",typeof obj,obj);
//js对象转json字符串
let str = JSON.stringify(obj)
console.log("JSON的数据类型",typeof str,str);
2 JSON字符串转JS对象
语法:JSON.parse(JSON字符串)
//json转js对象
let str = '{"a":"hello","b":"world"}'
let obj2 = JSON.parse(str)
console.log(obj2);

五 注册

image-20230525170218337

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">
    <title>Document</title>
    <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.2/??flexible_css.js,flexible.js"></script>
    <link rel="stylesheet" href="./css/register.min.css">
</head>
<body>
    <!-- 头部 -->
    <header>
        <img src="./images/back.png" alt="">
        <span>注册</span>
    </header>
    <!-- 主体 -->
    <main>
        <div>
            <label for="user">手机</label>
            <input type="text" id="user">
            <span id="username-msg">手机号不能为空</span>
        </div>
        <div>
            <label for="pwd">密码</label>
            <input type="password" id="pwd">
            <span class="pwd-msg">密码不能为空</span>
            <img src="./images/eye.png" alt="">
        </div>
        <div>
            <label for="rpwd">确认密码</label>
            <input type="password" id="rpwd">
            <span class="pwd-msg">密码不能为空</span>
            <img src="./images/eye.png" alt="">
        </div>
        <div>
            <button id="register" type="button">立即注册</button>
        </div>
    </main>

    <script src="./js/register.js"></script>
</body>
</html>

js

/**
 * 注册
 * {id,name,tel,password}
 */
function register(){
    let btn = document.querySelector("#register")
    btn.onclick = function(){
        //获取span标签
        let spArr = document.querySelectorAll("main span")
        //获取用户输入的信息
        let inputs = document.querySelectorAll("main input")
        let tel = inputs[0].value
        let password = inputs[1].value
        let repassword = inputs[2].value

        //校验账号,密码是否符合规则(6位 ,首字母大写,其余位可以是字母或数字)
        //校验手机号
        let reg1 = /^0?(13|14|15|17|18|19)[0-9]{9}$/
        console.log(reg1.test(tel));
        if(reg1.test(tel)){
            spArr[0].innerText=""
        }else{
            spArr[0].innerText="手机号格式错误"
            return
        }
        //校验密码
        let reg2 = /^[A-Z][A-Za-z0-9]{5}$/
        if(reg2.test(password)){
            spArr[1].innerText=""
        }else{
            spArr[1].innerText="长度为6位,首字母大写,其余位可以是字母或数字"
            return
        }
        //确认密码
        if(password == repassword){
            spArr[2].innerText=""
        }else{
            spArr[2].innerText="两次密码不一致"
            return
        }


        //1.读本地存储中的数据
        let userinfo_json = localStorage.getItem("userinfo")||"[]"
        //2.转JS对象
        let userinfo_arr = JSON.parse(userinfo_json)
        //3.判断账号是否存在
        let index = userinfo_arr.findIndex(e => e.tel == tel)
        if(index != -1){
            alert("账号已存在,注册失败")
            return
        }

        //实现账号id的自增长
        let arr = userinfo_arr.map(e=>e.id)
        arr.push(0)
        let newId = Math.max(...arr)+1

        //4.把输入的账号和密码保存到一个js对象中
        let u = {id:newId,name:"赵日天",tel,password}
        //5.把对象追加到数组的末尾
        userinfo_arr.push(u)
        //6.把数组转json
        let json = JSON.stringify(userinfo_arr)
        //7.把json字符串保存到本地存储
        localStorage.setItem("userinfo",json)
        alert("注册成功")
        //跳转到登录页面
        location = "../login.html"
    }
}

六 重置密码

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">
    <title>Document</title>
    <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.2/??flexible_css.js,flexible.js"></script>
    <link rel="stylesheet" href="./css/update_password.min.css">
</head>
<body>
    <!-- 头部 -->
    <header>
        <img src="./images/bg1r.png" alt="">
        <div>
            <img src="./images/back.png" alt="">
            <span>修改密码</span>
        </div>
    </header>
    <!-- 主体 -->
    <main>
        <!-- 手机号 -->
        <div class="oldpwd">
            <span>手机号</span>
            <input type="text">
            <img src="./images/eye.png" alt="">
        </div>
        <!-- 新密码 -->
        <div class="pwd">
            <span>新密码</span>
            <input type="password">
            <img src="./images/eye.png" alt="">
        </div>
        <!-- 确认密码 -->
        <div class="confirm">
            <div>
                <span>确认密码</span>
            </div>
            <input type="password">
            <img src="./images/eye.png" alt="">
        </div>
        <button id="update">确认修改</button>
        
    </main>

    <script src="./js/updatePassword.js"></script>
</body>
</html>

js

/**
 * 忘记密码,重置密码
 */
function updatePassword(){
    //拿到按钮
    let obtn = document.querySelector("#update")
    obtn.onclick = function(){
        //获取用户输入的所有信息
        let inputs = document.querySelectorAll("main input")
        let tel = inputs[0].value
        let password = inputs[1].value
        let repassword = inputs[2].value
        
        //校验用户输入的信息是否符合规则

        //1.读本地存储中的数据
        let userinfo_json = localStorage.getItem("userinfo")||"[]"
        //2.转JS对象
        let userinfo_arr = JSON.parse(userinfo_json)
        //3.判断账号是否存在
        let index = userinfo_arr.findIndex(e => e.tel == tel)
        if(index == -1){
            alert("账号不存在")
            return
        }
        //4修改密码
        userinfo_arr[index].password = password
        //5.把数组转json
        let json = JSON.stringify(userinfo_arr)
        //6.把json字符串保存到本地存储
        localStorage.setItem("userinfo",json)

        alert("修改成功")
        location = "../login.html"

    }
}

七 登录

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">
    <title>Document</title>
    <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.2/??flexible_css.js,flexible.js"></script>
    <link rel="stylesheet" href="./css/login.css">
</head>
<body>
    <!-- 头部 -->
    <header>
        <img src="./images/back.png" alt="">
        <span>登录</span>
    </header>
    <!-- 主体 -->
    <main>
        <div>
            <label for="user">手机</label>
            <input type="text" id="user">
            <span id="username-msg">手机号不能为空</span>
        </div>
        <div>
            <div class="pwd">
                <label for="pwd">密码</label>
                <a href="./updatePassword.html">忘记密码?</a>
            </div>
            <input type="password" id="pwd">
            <span id="pwd-msg">密码不能为空</span>
            <img src="./images/eye.png" alt="">
        </div>
        <div>
            <button id="login" type="button">立即登录</button>
        </div>
        <div>
            <a href="./register.html">立即注册</a>
        </div>
    </main>

    <script src="./js/login.js"></script>
</body>
</html>

js

/**
 * 登录
 */
function login(){
    //拿到登录按钮
    let obtn = document.querySelector("#login")
    obtn.onclick = function(){
        //1.获取用户输入的手机号和密码
        let inputs = document.querySelectorAll("main input")
        let tel = inputs[0].value
        let password = inputs[1].value
        //2.校验手机号和密码格式
        //获取span标签
        let spArr = document.querySelectorAll("main span")
        //校验手机号
        let reg1 = /^0?(13|14|15|17|18|19)[0-9]{9}$/
        if(reg1.test(tel)){
            spArr[0].innerText=""
        }else{
            spArr[0].innerText="手机号格式错误"
            return
        }
        //校验密码
        let reg2 = /^[A-Z][A-Za-z0-9]{5}$/
        if(reg2.test(password)){
            spArr[1].innerText=""
        }else{
            spArr[1].innerText="长度为6位,首字母大写,其余位可以是字母或数字"
            return
        }

        //3.读取本地存储中的用户信息,并转换为js对象
        //读本地存储中的数据
        let userinfo_json = localStorage.getItem("userinfo")||"[]"
        //转JS对象
        let userinfo_arr = JSON.parse(userinfo_json)

        //4以账号和密码为条件去数组中查找
        let userObj = userinfo_arr.find(e =>e.tel == tel && e.password == password)
        console.log(userObj);
        if(userObj){
            //5.把当前登录的用户对象保存到浏览器存储
            sessionStorage.setItem("loginUser",JSON.stringify(userObj))
            alert("登录成功")
            //6.跳转到首页
            location = "../my.html"
        }else{
            alert("账号或密码错误")
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值