要想成为一个高级前端工程师,很多人的答案都是:学习,不断地学习。
学习肯定是要学的,但是我们要怎么学习呢?
学习方式还是挺多的,我更推荐大家多看看比自己水平高的人,写的代码。遇到没见过的内容就立即学习学习。下面就给大家看看,我们为什么要看别人的代码!
场景1:数组拼接
let arr1 = [ a, b, c ] let arr2 = [ 1, 2, 3 ] /* 把 arr1 和 arr2 拼接到一起 */
普通程序员:
// 写法1: let arr = arr1.concat( arr2 ) // 写法2 -- 使用遍历 let arr = arr1 arr2.forEach( item => { arr.push( item ) })
大神的代码:
let arr = arr1.push( ...arr2 )
场景2:吸顶效果 -- 网页中的某个元素,滚动到网页顶部时,固定在顶部。
普通程序员代码:
//添加滚动事件 window.addEventListener( 'scroll', this.handleScroll ) //获取元素距离顶部的距离 handleScroll () { var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop var offsetTop = document.querySelector('#searchBar').offsetTop console.log( scrollTop ) //判断到达顶部的距离,等于0时,给元素添加固定定位,设置top的值 if ( scrollTop > offsetTop ) { document.querySelector('#searchBar').style.position="fixed" document.querySelector('#searchBar').style.top="0" }else{ //当距离大于0时,修改position属性值 document.querySelector('#searchBar').style.position="relative" } }
大神的代码:
#searchBar{ position:sticky; top:0 }
值得注意的是,position:sticky;是新增属性,好多低版本浏览器不支持。所以不建议在PC端使用,可以在手机端使用。
场景3:高度设置
普通程序员代码:
.box{ position:fixed; top:0; bottom:0; left:0; right:0 }
大神的代码:
.box{ height:100vh; } // vh -> viewport height
场景4:计算高度设置
普通程序员代码:
// 方法1:使用绝对定位 <div class="box"> <header></header> <div class="content"></div> </div> <style> .box{ position:relative; } header{ position:fixed; top:0; height:40px; width:100%; } .content{ position:absolute; top:40px; width:100%; left:0; } </style> // 方法2:使用 js 动态获取可视区高度,然后减去上边高度,动态设置content元素的高度
大神的代码:
.content{ height: calc( 100%-40px ) }
使用 calc() 函数动态计算高度。
场景5:给根组件添加事件
普通程序员代码:
// 父组件代码 <div> <child @btnclick="btnClick" /> </div> <script> export default{ methods:{ btnClick(){ console.log("子组件点击事件") } } } </script> //子组件代码 <template> <div @click="clickEvent"> 子组件内容 </div> </template> <script> export default{ methods:{ clickEvent(){ this.$emit( "btnclick" ) } } } </script>
大神的代码:
// 父组件代码 <div> <child @click.nactive="btnClick" /> </div> <script> export default{ methods:{ btnClick(){ // 使用 .native 修饰符 给根元素添加事件 console.log("子组件点击事件") } } } </script>
场景6:js的防抖
普通程序员代码:
<input @change="search" v-model="val" /> export default{ data(){ return{ val:'' } }, methods:{ search(){ //网络请求查询相关数据 //只要input的值 val 改变,就会发送网络请求 } } }
大神的代码:
// 如果input输入框的值改变比较频繁的时候,就会不断的向服务器发送网络请求, // 这样就会非常损耗性能,所以需要在一定时间内,多次频繁改变值的时候,只发一次网络请求 <input @change="search" v-model="val" /> export default{ data(){ return{ val:'' } }, methods:{ search(){ //网络请求查询相关数据 //只要input的值 val 改变,就会发送网络请求 this.debounce(this.searchData,200) }, searchData(){ //向服务器发送网络请求 }, debounce(func,delay){ let timer = null; return function(...args){ if(timer)clearTimeout(timer) timer = setTimeout(()=>{ func.apply(this,args) }) } } } }
这样操作的话,就避免同时向服务器发送多次请求,减轻服务器压力。
场景7:数组去重
普通程序员代码:
function unique(arr){ var res = [arr[0]]; for(var i=1;i<arr.length;i++){ var repeat = false; for(var j=0;j<res.length;j++){ if(arr[i] == res[j]){ repeat = true; break; } } if(!repeat){ res.push(arr[i]); } } return res; }
大神的代码:
function unique(arr){ const res = new Map() return arr.filter((item)=> !res.has(item) && res.set(item,1) ) }
利用 ES6 的数组新增方法filter
场景8:css样式设置全局变量
普通程序员的代码:
// 假设主色调是 red div{ color:#666 } .active{ color:red; }
一个网站、app或小程序等,都会有一个主色调,页面多处使用该颜色时,就需要写很多次。
大神的代码:
// 创建一个 base.css文件,代码如下: :root{ --color-text:#666;//普通字体颜色 --color-high-text:red;//高亮文字颜色 } // 样式文件 @import "assets/css/base.css"; div{ color:var(--color-text) } .active{ color:var(--color-high-text) }
这样做的好处就是,可以通过base.css修改变量,这样只需要修改一处就可以控制项目的所有文件,大大节约开发时间。
好了小编今天的文章就到此结束了,喜欢我的可以点个关注哦!