如何成为别人嘴里的高级前端工程师?

x33g5p2x  于2021-12-17 转载在 其他  
字(3.5k)|赞(0)|评价(0)|浏览(193)

要想成为一个高级前端工程师,很多人的答案都是:学习,不断地学习。

学习肯定是要学的,但是我们要怎么学习呢?

学习方式还是挺多的,我更推荐大家多看看比自己水平高的人,写的代码。遇到没见过的内容就立即学习学习。下面就给大家看看,我们为什么要看别人的代码!

场景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:数组去重

普通程序员代码:

functionunique(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]);
  }
 }
 returnres;
}

大神的代码:

functionunique(arr){
 const res = newMap()
 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修改变量,这样只需要修改一处就可以控制项目的所有文件,大大节约开发时间。

好了小编今天的文章就到此结束了,喜欢我的可以点个关注哦!

相关文章