网站首页 > 基础教程 正文
要想成为一个高级前端工程师,很多人的答案都是:学习,不断地学习。
学习肯定是要学的,但是我们要怎么学习呢?
学习方式还是挺多的,我更推荐大家多看看比自己水平高的人,写的代码。遇到没见过的内容就立即学习学习。下面就给大家看看,我们为什么要看别人的代码!
场景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修改变量,这样只需要修改一处就可以控制项目的所有文件,大大节约开发时间。
好了小编今天的文章就到此结束了,喜欢我的可以点个关注哦!
猜你喜欢
- 2024-11-10 好程序员web前端教程分享前端 javascript 练习题
- 2024-11-10 好程序员分享javascript中的常见的兼容写法
- 2024-11-10 利用这个css属性,你也能轻松实现一个新手引导库
- 2024-11-10 【前端】两种视口的故事(一) 视口定义在哪个标签中
- 2024-11-10 如何区分clientX、clientY、pageX、pageY、offsetX、offsetY……
- 2024-11-10 BetterScroll源码阅读顺便学习TypeScript
- 2024-11-10 Vue实战065:ScrollBehavior实现路由记录滚动行为
- 2024-11-10 布局视口,视觉视口,理想视口 布局与视口的概念
- 2024-11-10 页面被卷去的头部兼容性问题 昌邑市青龙山
- 2024-11-10 my97日期控件弹出位置显示异常 日期控件开发工具在哪
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)