项目总结

145 阅读2分钟

一.我学会了

1.写大项目的时候 分类创建文件夹, css js 图片 静态页面架构等分开创建,互相调用引用,用的时候条理清晰.

2.会运用老师封装好的接口,理解了Ajax中一些参数意思,也了解了数据的交互.

function getShopList(page) {
        REQUEST.get('/goodList', {
            params: {
                page: page
            }
        }, function (data) {})

3.在首页的登录注册和登陆之后的购物车和退出的切换,是使用的数据的交互,用的token code值判断

4.点击首页,登录注册等页面会切换

5.轮播图,了解了其中的原理 一个小盒子只显示一张图片的大小,然后在创建一个大的盒子,是总共图片加起来的长度 ,然后overflow:hidden

   1. 让图片动起来  是使用的定时器 setInterval 设定时间后,图片往左移动
   2. 较难的部分是点击移动图片    鼠标进入 定时器停止,然后点击图片左右移动 ,每次移动的距离是一张图片的长度,在图片结尾多加张图片,放的是第一张图片,从而好切换,轮播的更自如.

6.搜索 使用节流

 var debounce = function (fn, delay) {
        let timer = null;
        return function () {
            if (timer) {
                clearTimeout(timer)
            }
            timer = setTimeout(() => {
                fn.call(this)
            }, delay)
        }
    }

7.懒加载

window.onscroll = function () { scrollFunction() };

    function scrollFunction() {
        if (document.body.scrollTop > 300 || document.documentElement.scrollTop > 300) {
            bottom.style.display = "block";
        } else {
            bottom.style.display = "none";
        }
    }

是运用了getBooundingClientRect().top 这个api 后面的top可以修改 可以是left等,就是判断此元素距离屏幕顶部的距离,当距离小于屏幕的高度,切换图片,切换图片是运用的自定义属性 data-

获取自定义属性用的是getAttribute("data-"); 替换图片地址用的是setAttribute("src",data-)

8.登录和注册 运用了正则表达式 先注册,注册成功后会把数据存到服务器,然后会返回一个值,根据此值,判断之后来跳转登录页面, 登录成功后用localtion.href="" 来切换页面

btn.onclick = function () {
        var userName = input[0].value;
        var password = input[1].value;
        var userReg = /^[a-zA-Z0-9_\u4e00-\u9fa5]{6,12}$/;
        var passwordReg = /\w{6,12}/;
        if (!userReg.test(userName)) {
            var p = input[0].nextElementSibling;
            p.style.display = 'block';
            return
        }
        if (!passwordReg.test(password)) {
            var p = input[1].nextElementSibling;
            p.style.display = 'block';
            return
        }
        console.log('用户名和密码都通过了');
        api.Register({
            username: userName,
            password: password
        }, function (data) {
            console.log("注册接口响应数据", data);
            if (data.code == 1) {
                alert('注册成功');
                location.href = './login.html'
            } else {
                alert('注册失败')
            }
        }

        )
    }

登陆成功会返回一个值,根据此值来修改头部导航栏

9.购物车 购物车的数据渲染,根据token值来判断是否添加成功

购物车的增加和删除

 var shopcarlist = document.querySelectorAll(".shopcarlist");
        listdelete.forEach(function (item, index) {
            item.onclick = function () {
                // confirm("确定删除?");
                if (confirm("确定删除?")) {
                    REQUEST.get('/del', {
                        params: {
                            username: username,
                            token: token,
                            goodId: shopcarlist[index].getAttribute("data-Id")
                        }
                    }, function (data) {
                        console.log(data.code);
                        if (data.code == 1) {
                            shopcarlist[index].remove();
                        }
                    }
                    )
                }
            }
        })

根据判断code值 利用remove删除元素

10.全减全消

绑定全选框 全选框选择 后然后遍历所有商品的选择框 全选框选择了 商品框也同时跟着选中

然后遍历所有的商品的选择框 设置一个num=0来记录点击次数,点几次数等于商品数量的长度,那么全选框被选中.

allinput.onclick = function () {
            if (allinput.checked) {
                for (var k = 0; k < checkinput.length; k++) {
                    checkinput[k].checked = true;
                }
            }
            else {
                for (var k = 0; k < checkinput.length; k++) {
                    checkinput[k].checked = false;
                }
            }
        }
        var num = 0;
        checkinput.forEach(function (item, index) {
            item.onclick = function () {
                if (item.checked) {
                    num++;
                } else {
                    num--;
                }
                if (num == checkinput.length) {
                    allinput.checked = true;
                } else {
                    allinput.checked = false;
                }
            }
        })

11.渲染成功后点击商品进入详情页

二 进步

学会用字符串模板 学会了懒加载 更熟练更了解了js 会使用了本地存储 获取本地存储 学会了全减全消之间的关系 学会了登录成功后的导航栏切换

 window.addEventListener("scroll", function (e) {
        var box = document.documentElement;
        if (Math.ceil(box.clientHeight + box.scrollTop) >= box.scrollHeight - 100) {
            page++;
            getShopList(page)
        }
    });

三 哪里不会

放大镜 搜索 节流 变量污染 购物车的数量总和

四 总结业务

渲染页面 搜索 点击进入详情页 加入购物车 放大镜 删除购物车商品 登录注册 登陆成功切换加入购车 退出 触底加载 懒加载

五 业务亮点

登录注册 变换导航栏

先创建input 下面写p标签 点击输入框p标签消失

在输入框内输入内容 用value获取 然后用正则表达式判断输入是否符合格式 不符合弹出p标签显示不符合格式

注册成功后 信息传递到服务器 然后自动跳转到登录界面 登录已注册的账号和密码

登录成功后 变换导航栏 导航栏显示首页 购物车 退出

  var username; // 扩大username的作用域
    input[0].oninput = function(e){
        var userReg = /^[a-zA-Z0-9_\u4e00-\u9fa5]{6,12}$/;
        if(userReg.test(e.target.value)){
              username = e.target.value;
              //获取到p
              var p =e.target.nextElementSibling;
              p.innerHTML='验证通过';
              p.style.display='block';
              p.style.color='green';
              input[0].isPass=true; // 后面需要判断注册的账号和密码是否正确符合格式
              
        }else{
            var p =e.target.nextElementSibling;
              p.innerHTML='只能包含数字、字母、下划线、汉字6-12位';
              p.style.display='block';
              p.style.color='green';
              input[0].isPass=false;
        }

    }

    var password; // 扩大username的作用域
    input[1].oninput = function(e){
        var passwordReg = /\w{6,12}/;
        if(passwordReg.test(e.target.value)){
              password = e.target.value;
              //获取到p
              var p =e.target.nextElementSibling;
              p.innerHTML='验证通过';
              p.style.display='block';
              p.style.color='green';
              input[1].isPass=true;
        }else{
            var p =e.target.nextElementSibling;
              p.innerHTML='只能包含数字、字母、下划线、汉字6-12位';
              p.style.display='block';
              p.style.color='green';
              input[1].isPass=false;
        }

    }
 // 点击登录
    var btn = document.querySelector('.login button');
    btn.onclick=function(){
        var pass =input[0].isPass&&input[1].isPass;
       if(!pass){
            return
        } 
       
            var option ={
                username:username,
                password: password
            }
            api.Login(option,function(data){
               console.log('登陆成功',data);
               //登陆成功后 把注册的数据传到服务器
               if(data.code ===1){
                 var token  =data.token;
                localStorage.setItem('token',token)
                 localStorage.setItem('username',data.username)
                 setTimeout(() => {
                     location.href='../index.html'
                 }, 1000);
               }
            })   
    }