ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-17 13:34:09  阅读:165  来源: 互联网

标签:arr 工程师 color 大神 代码 程序员 嘴里 position 前端


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

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

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

场景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修改变量,这样只需要修改一处就可以控制项目的所有文件,大大节约开发时间。

 


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

标签:arr,工程师,color,大神,代码,程序员,嘴里,position,前端
来源: https://www.cnblogs.com/web-learn/p/15701880.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有