考核完善周

本文介绍了作者如何重写alert和confirm以改善页面风格,以及在项目中遇到的问题,如退出登录的逻辑、输入验证和Ajax异步处理。下周计划聚焦于算法练习和项目优化。
摘要由CSDN通过智能技术生成

考核总结

第一次用自己的思路写一个简单的项目,出现许多不足,学长学姐指出问题后给出一个星期的时间让我们来完善自己的项目,下面是几个比较大的问题,和一些细节知识点

一、重写alert、confirm

浏览器中alert、confirm样式放在页面中是不太美观的,影响页面的观感和用户体验,因此需要重写alert和confirm

一)重写alert

运用html和css完成样式,JS封装一个函数,传入需要的参数,来执行alert;我写了三个颜色,分别用于警告、警示、提示
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8daab0bc8ec943e1bfe2536bc1835316.png在这里插入图片描述
在这里插入图片描述

代码部分:
HTML

	<div class="waring">
         <div class="alert" role="alert"></div>
    </div>
    <div class="btn">
    	<button id="btnA">警告</button>
    	<button id="btnB">警示</button>
    	<button id="btnC">提示</button>
   </div>

CSS

.waring {
    position: absolute;
    top: 0;
    z-index: 99;
    display: flex;
    width: 100%;
    justify-content: center;
    align-items: center;
    transition: all 0.5s ease;
    opacity: 0;


}

.alert {
    height: 50px;
    width: 300px;
    display: flex;
    justify-content: center;
    align-items: center;
    border-radius: 10px;
    border: #cfdcc3 2px solid;
}

.btn{
    height: 100vh;
    width: 100vw;
    display: flex;
    justify-content: center;
    align-items: center;
}

JS


//提示框
function prompt(part, color, borColor, bacColor) {
    let timer;
    let time = 50;
    timer = setInterval(function () {
        time--;
        let waring = document.getElementsByClassName("waring")[0];
        let alert = document.getElementsByClassName("alert")[0];
        alert.innerHTML = part;
        alert.style.color = color;
        alert.style.borderColor = borColor;
        alert.style.backgroundColor = bacColor;
        waring.style.opacity = "1";
        waring.style.top = "5%";
        if (time == 0) {
            clearInterval(timer);
            waring.style.opacity = "0";
            waring.style.top = "0";
        }
    }, 50)
}
//警告
let btnA = document.getElementById("btnA");
btnA.onclick = function () {
    prompt("这是一个警告!", "#a94442", "#ebccd1", "#f2dede");
}
//警示
let btnB = document.getElementById("btnB");
btnB.onclick = function () {
    prompt("这是一个警示!",  "#084298", "#b6d4fe", "#cfe2ff");
}
//提醒
let btnC = document.getElementById("btnC");
btnC.onclick = function () {
    prompt("这是一个提醒!", "#507a49", "#cfdcc3", "#e2efda");
}

二)重写confirm

重写confirm,执行Ajax时需要异步(Ajax总是先于判断执行,所以需要异步操作);运用promise函数(是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果),返回成功或是失败

在这里插入图片描述
html

<div class="pickOut">
     <div class="pickCen">
     	 <h4>提示</h4>
         <div class="pickText"></div>
         <div class="pickBtn">
             <button class="pickSure pickbtn">确定</button>
             <button class="pickLifted pickbtn">取消</button>
         </div>
     </div>
 </div>
 <button class="btn">点我</button>

SASS

.pickOut {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    width: 100%;
    background-color: rgba(0, 0, 0, 0.4);
    /* display: flex; */
    justify-content: center;
    display: none;

    .pickCen {
        position: absolute;
        top: 0;
        z-index: 99;
        transition: all 0.5s ease;
        font-size: 25px;
        opacity: 0;
        height: 200px;
        width: 400px;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        border-radius: 10px;
        border: #ebccd1 2px solid;
        color: #a94442;
        background-color: #f2dede;

        h4{margin-top: 10px;}
        button {
            margin-top: 10px;
            height: 40px;
            width: 70px;
        }

        .pickSure {
            border: #e6b4bd 2px solid;
            background-color: #f5c4c4;

            &:hover {
                background-color: #f7bbbb;
            }

            &:active {
                background-color: #ad7674;
            }
        }

        .pickLifted {
            border: #ebccd1 2px solid;
            background-color: #f8d0d0;

            &:hover {
                background-color: #f7c1c1;
            }

            &:active {
                background-color: #c18e8d;
            }
        }
    }
}

JS

//confirm
function confirm(part) {
    let pickOut = document.getElementsByClassName("pickOut")[0];
    let pickCen = document.getElementsByClassName("pickCen")[0];
    pickOut.style.display = "flex";
    let pickText = document.getElementsByClassName("pickText")[0];
    pickText.innerHTML = part;
    let timer = setInterval(function () {
        pickCen.style.opacity = "1";
        pickCen.style.top = "50px";
    }, 50)
    let p = new Promise((resolve, reject) => {
        let pickbtn = document.getElementsByClassName("pickbtn");
        pickbtn[0].onclick = function () {
            resolve();
            clearInterval(timer);
            pickCen.style.opacity = "0";
            pickCen.style.top = "0";
            pickOut.style.display = "none";
        };
        pickbtn[1].onclick = function () {
            reject();
            clearInterval(timer);
            pickCen.style.opacity = "0";
            pickCen.style.top = "0";
            pickOut.style.display = "none";
        };
    });
    return p;
}
let btn = document.getElementsByClassName("btn")[0];
btn.onclick = function(){
    confirm("请选择?").then(() => {
        console.log(true)
    })
        .catch(function () { })
}

二、退出登录

退出登录需要调用上面confirm函数,确认后退出-
退出登录后,输入网址仍然能返回到后台,浏览器中的token依然保留,是一个很大的bug
应在退出登录后移除token,并且输入网址进入返回至登录界面先登录

//退出登录
let quit = document.getElementById("quit");
quit.onclick = function () {
    confirm("确定要退出登录吗?").then(() => {
        token = localStorage.getItem('token');
        localStorage.removeItem('token');
        window.location.replace("login.html");
    })
        .catch(function () { })
}
token = localStorage.getItem('token');
//浏览器网址进入自动退出
if(token == null){
    window.location.replace("login.html");
}

三、标签过滤

获取输入的数据时,若不进行标签过滤,代码中就可以通过输入框填加东西,可通过此种入病毒

function setText(val) {
    if (val != null && val != "") {
        var re1 = new RegExp("<.+?>|&.+?;", "g"); //匹配html标签的正则表达式,"g"是搜索匹配多个符合的内容
        var msg = val.replace(re1, ""); //执行替换成空字符
        msg = msg.replace(/\s/g, ""); //去掉所有的空格(中文空格、英文空格都会被替换)
        msg = msg.replace(/[\r\n]/g, ""); //去掉所有的换行符
        return msg //获文本文字内容的前100个字符
    }
}

四、细节零碎知识点

1)输入过长自动换行属性

word-break: break-all;

2)密码可见不可见问题

通过JS写点击事件,修改元素的type值;password为不可见、text为可见

3)邮箱格式判断

运用正则表达式判断邮箱是否正确,防止频繁使用接口

let email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
let id = document.querySelector("#ID").value;
if(!(email.test(id)){
console.log(id)
}

4)其余零碎知识点

a. 尽管后端会对前端的传入的数据进行判断,前端依旧需要对数据进行判断和处理,判空,格式判断,正负数、整小数判断等,防止过多的使用接口,尽量减少接口的频繁使用
b. 有分页功能填加数据、删除数据时需要进行页数判断和更改,在最后一页只有一条时删除后自动跳转至前一页;最后一页已满,再填加跳转至下一页
c 防止多次alert提示,定时器混乱,在执行定时器前先关闭上一个定时器

下周计划

下周开启新的学习计划,依旧跟着小组走,继续开始练习算法题目,马上蓝桥杯了,还是要努力一下,不知道是不是300块钱买了顿早午餐;还是空余时间准备一下,当然以小组前端计划为先,最近课程较多,纪检部工作较多,要合理分配一下时间,不能太过盲目;下周宿舍文化节争取领奖品回来

日常

春天真的到了
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值