项目总结

146 阅读4分钟

1:你学会了什么

  • 学会了对本地存储localStroage的应用,设置本地存储localStorage.setItem("id","1");得到存储值用localStorage.getItem("id"),删除本地存储值用localStroage.removeItem("id");
  • 返回顶部可以用window.scrollTo Api,对里面传值(横轴坐标,纵轴坐标)就可以实现返回顶部的效果,还可以传入一个对象,用于控制返回的速度
  • 返回上一个页面history.go(-1);
  • 对变量污染的解决办法

2:你的进步有哪些

通过这次项目的完成,加深了对本地存储localStroage的应用.新认识了scrollTo这个api,在多次应用ajax发请求后,对ajax理解的更加透彻了.还有对登录注册的正则判断reg.test(str).还有就是对offsetTop与ScroolTop,scrollHeight的应用更比以前熟练了.加深了变量污染的知识点,可以用闭包解决,可以用let解决.

3:你哪里不会

对组件的封装代码理解不太够,底层原型逻辑理解有些迷糊.

4:总结项目中有那些业务,你是符合实现的

  • 在这次项目的完成后,我印象最深的就是对页面间的传值的应用,也就是本地存储.localStorage.setItem与localStorage.getItem分别将值存入本地.在另一个页面取到存储的值并应用;与其一起的还有history.go(-1),小括号里面传入的值为-1就是向历史上一个页面返回,传入的是1的话就是向前进一个页面,以前只是知道,并没有将这两个功能应用,现在做完这个项目就将他熟练的应用了,算是一个小的进步.(代码如下)
  • 图片的懒加载
   //  懒加载
            var imgs = document.querySelectorAll(".img img");
            imgs = Array.from(imgs);
            window.onscroll = function (e) {
                setTimeout(function () {
                    LazyLoading(imgs)
                }, 2000)
            }
            LazyLoading(imgs);
            function LazyLoading(imgs) {
                for (var i = 0; i < imgs.length; i++) {
                    var height = imgs[i].offsetTop;
                    var wheight = window.innerHeight;
                    var sheight = document.documentElement.scrollTop;
                    if (height <= wheight + sheight) {
                        imgs[i].src = imgs[i].getAttribute('date-src');
                    }
                }
            };
  • 在ajax发起的请求后,利用for循环将数据渲染在界面时会发生变量污染的情况,可以在声明变量时用let声明.或者利用闭包也可以解决变量污染的问题.
  • 然后就是对正则的应用,匹配数字,字母/^[a-zA-Z0-9]{6,13}/ 或者数字字母下划线/^[\w]{6,13}$/等条件.{最少,最多}这个代表的是量词,有两个参数条件(最少与最多), 可以用reg.test(要匹配的字符串)来判断是否符合条件.符合条件则返回true.
  • 项目中有一个小功能即楼层滚动,实现的主要原理就是用元素.offsetTop,实现这个分为两个步骤:
    • 1.判断内容区当前元素距离上方的距离,如果当前元素.offsetTop<被卷去的高度时,就让其侧边栏加特效.
    • 2.当点击侧边栏中的某一个,将其索引值拿到,让documentElement.scrollTop的值等于内容区元素.offsetTop值就可以实现楼层滚动的效果了.(代码如下)
   //楼层滚动
            floorMoble();
            function floorMoble() {
                var h3s = document.querySelectorAll("h3");
                var catalogueUlLis = document.querySelectorAll(".catalogue ul li");
                window.addEventListener("scroll", function (e) {
                    for (let i = 0; i < h3s.length; i++) {
                        var top = document.documentElement.scrollTop;
                        if (h3s[i].offsetTop <= top + 200) {
                            for (let j = 0; j < catalogueUlLis.length; j++) {
                                catalogueUlLis[j].classList.remove("floorColor");
                            }
                            catalogueUlLis[i].classList.add("floorColor")
                        }
                    };

                });
                //侧边跳转
                catalogueUlLis.forEach(function (item, index) {
                    item.onclick = function () {
                        for (let i = 0; i < catalogueUlLis.length; i++) {
                            catalogueUlLis[i].classList.remove("floorColor")
                        }
                        catalogueUlLis[index].classList.add("floorColor");
                        document.documentElement.scrollTop = h3s[index].offsetTop - 200;
                    }
                })
            }
  • 相对于楼层滚动效果,触底请求数据也是类似的效果,我的实现原理是:先获取整个页面元素的正文高度,在获取屏幕滚动被卷去的高度,判断如果整个页面元素的正文高度-屏幕滚动被卷去的高度<=当前网页可见区域高度时,表明元素已触底了,则可以发起一次请求.这就完成了触底请求.(代码如下)
  • element.scrollHeight - element.scrollTop <= element.clientHeight
  var htmlScrolHeight = document.documentElement.scrollHeight;
            var heightCount = htmlScrolHeight - top;
            var showClient = document.documentElement.clientHeight;
            // console.log("html元素的总体高度:"+htmlScrolHeight,"被卷去的高度:"+top,"相减的高度:"+heightCount,"页面可见高度"+showClient)
            if (heightCount <= showClient) {
                page++; //再次发起请求
                // console.log(page)
                getShop(page);//调用请求
            }

5:总结你写的项目中有那些技术亮点并详细说明

返回顶部功能:有一个api,window.scrollTo();可以快捷实现返回顶部.里面传入两个值(x横轴坐标,y纵轴坐标)或者传入对象(代码如下)

  backTop.onclick = function () {
            // timerTop = setInterval(function () {
            //     var osTop = document.documentElement.scrollTop || document.body.scrollTop;
            //     var speed = Math.floor(-osTop / 5);
            //     document.documentElement.scrollTop = document.body.scrollTop = osTop + speed;
            //     if (osTop == 0) {
            //         clearInterval(timerTop);
            //     };
            //     isTop = true;
            // }, 30);
            window.scrollTo({
                top:0,
                behavior:"smooth",
            })
        }

{top:0,behavior:"smooth",};smooth是平滑的意思,返回顶部平滑效果.这是一个亮点,只用两三行代码就可以实现了平滑返回顶部的效果.