防抖和节流的方法详解和CSS文本溢出小知识

428 阅读2分钟

本文已参与「新人创作礼」活动.一起开启掘金创作之路

1.防抖

防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时

场景:搜索框输入发请求,一些拖拽盒子,或者滚动事件

防抖的实现:利用间歇函数

const timer =setTimeout(callback函数,间隔时间)  //执行完会返回自身的这个定时器的编号
//事件所触发的函数
clickFn(){
     //先清除timer对应的定时器
    clearTimeout(this.timer)
    //从新启动一个延时器,并把timeID赋值给this.timer
    this.timer = setTimeout(() =>{
        //如果500ms内没有触发这个的事件,就做你要做的事。要是触发的话,定时器就会被上一句代码清除,也就会重新计时
        。。。。。。。。如发请求等事情,滚动事件等事件的执行
    },500)
 }

2.节流

作用:防止事件连续不停的进行,一个一个的处理,是间隔时间执行,一些高频事件,在被连续触发时,需要限定在单位时间内只执行一次;例如:防止发起多次请求或者按键的连续点击

节流:也可分为时间戳节流(后一时间减去前一时间小于多少就不执行代码)和定时器节流两类

1.定时器实现思想:

 let timer = null
//事件所触发的函数
clickFn(){
 if(timer){
     //条件为true就会return,不会执行下面定时器里面的代码了
     return
 }
 timer = setTimeout(() =>{
  
     //如果条件为false,就会执行这个事件的代码
        。。。。。。。。如发请求等事情
       timer = null 
    },500)
    
   
 }

2.时间戳方法:

let last = 0;
function(){    
    //获取现在的事件戳
    let now = new Date().getTime();
    // 现在的时间戳减去代码执行后的时间戳如果大于某个时间,就执行代码,否则就不执行
    if (now - last > 300) {
        //执行代码
        console.log("函数节流")
        //把代码执行完成后的事件戳赋值给last
        last = new Date().getTime();
    }
}

3.单行文本溢出显示...

<style>
.name {
   //单行文本,设置不允许换行
    white-space:nowrap;
    //溢出部分隐藏
    over-flow:hidden;
    //文本溢出,使用...代替
    text-overflow:ellipsis;
}
</style><body>
    <div class='name'>这是一段很长的文本</div>
</body>

4.多行文本溢出显示...

1,基于高度截断:原理是通过伪元素绝对定位到行尾并遮住文字,再通过 overflow: hidden 隐藏多余文字

优点:兼容性好,对各大主流浏览器有好的支持,响应式截断,根据不同宽度做出调整。一般文本存在英文的时候,可以设置word-break: break-all使一个单词能够在换行时进行拆分
<style>
    .demo {
        position: relative;
        line-height: 20px;
        height: 40px;
        overflow: hidden;
    }
    .demo::after {
        content: "...";
        position: absolute;
        bottom: 0;
        right: 0;
        padding: 0 20px 0 10px;
    }
</style><body>
    <div class='demo'>长文本内容</div>
</body>

2.基于行数截断:兼容性相对较低,

<style>
    p {
        width: 400px;
        border-radius: 1px solid red;
        //用来限制在一个块元素显示的文本的行数,为了实现该效果,它需要组合其他的WebKit属性
        -webkit-line-clamp: 2;           //语句12代表的这意思是两行
        display: -webkit-box;          //和语句1结合使用,将对象作为弹性伸缩盒子模型显示
        -webkit-box-orient: vertical; //和语句1结合使用 ,设置或检索伸缩盒对象的子元素的排列方式
        overflow: hidden;             //文本溢出限定的宽度就隐藏内容
        text-overflow: ellipsis;      //多行文本的情况下,用省略号“…”隐藏溢出范围的文本
    }
</style>
<p>
    第一行文字
    第二行文字
</p >

\

\