首页 > 其他分享 >事件节流

事件节流

时间:2022-08-25 10:00:39浏览次数:63  
标签:节流 text 50% FF1177 事件 var resize

事件节流用于控制事件触发的最小间隔。

如一个事件 100 毫秒内只能触发一次。

如窗口缩放过程中对页面的元素大小重新调整,因为 resize 事件的触发是非常快的,用户虽然在频繁的变更窗口尺寸,但用户单位时间内能感知到的事情是有限的,也许一秒内执行100次尺寸计算和一秒钟内执行10次尺寸计算,感知上是没有太大区别的,而且事件内有太多的操作,又在频繁触发事件,这样很容易造成浏览器的卡顿。

<style>
  .outer { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background:rgb(0, 0, 0); }
  .outer .text { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: white; font-size: 100px; text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #FF1177, 0 0 35px #FF1177, 0 0 40px #FF1177, 0 0 50px #FF1177, 0 0 75px #FF1177; }
</style>

<div class="outer">
  <div class="text">100x200</div>
</div>

<script>
  var text = document.querySelector('.text');

  var resize = function() {
    var height = window.innerHeight;
    var width = window.innerWidth;

    text.innerText = width + 'x' + height;
  };

  window.addEventListener('resize', resize);

  resize();
</script>

可以看到,resize 事件的响应是非常快的,与之类似的还有 scroll 事件,即滚动条滚动时触发的事件。

这种情况下就可以使用节流的方式来优化事件。

<style>
  .outer { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background:rgb(0, 0, 0); }
  .outer .text { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: white; font-size: 100px; text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #FF1177, 0 0 35px #FF1177, 0 0 40px #FF1177, 0 0 50px #FF1177, 0 0 75px #FF1177; }
</style>

<div class="outer">
  <div class="text"></div>
</div>

<script>
  var text = document.querySelector('.text');
  var timer = false;

  var resize = function() {
    if (timer) return; // 判断是不是上一次事件执行完300毫秒内

    var height = window.innerHeight;
    var width = window.innerWidth;

    text.innerText = width + 'x' + height;

    timer = setTimeout(function () {
      timer = null;
    }, 300);
  };

  window.addEventListener('resize', resize);

  resize();
</script>

对例子做了一个简单的修改,增加了 timer 变量,用于存放定时器的标志值(定时器的返回值),每当事件触发时,给 timer 赋值,这个时候事件就会处于一个锁住的状态,直到 300 毫秒后,timer 再次被设置为 null,表示可以触发事件。

根据需求,业务逻辑执行的时机是在定时器内还是定时器外可以自由调配。

标签:节流,text,50%,FF1177,事件,var,resize
From: https://www.cnblogs.com/jinGang66/p/16623248.html

相关文章

  • SMB登录事件排查经验分享
    1.概述1.1案例先来看两张图:  看到这两张图的第一印象应该是这是一个成功的登陆,其类型为3,代表网络登陆,4624表示成功登陆,可能大部分人都是如此认为。那么实际上呢?这里面......
  • Java中字节流的总结及代码练习
    Java中的字节流在描述字节流时,先知道什么是流流可以分为:输入流和输出流输入流和输出流示意图:字节流读取内容:二进制,音频,视频优缺点:可以保证视频音频无损,效率低,没有缓......
  • Dom事件流
    DOM事件流描述了DOM时间响应的阶段、路径。DOM事件流也会被称为DOM事件模型。事件流阶段事件流有三个阶段:捕获阶段从window开始,寻找触发事件最深层的节点,过程......
  • 阻止冒泡事件 stopPropagation方法
    stopPropagation调用此方法就会阻止事件的冒泡,使用到的场景大多为某个父元素和元素本身绑定了相同事件时。<style>.list{width:300px;margin:0auto;......
  • 定制化JDK升级引发的离奇事件
    1、背景由于Oracle对外宣称OracleJDK停止免费用于商用。公司法务部门评估之后担心后续会惹上光司,于是就开始了JDK升级-将所有服务Oracle修改为OpenJDK。上周开始微服务JD......
  • vue3+ts使用bus事件总线
    1、在vue2中我是这样使用的//创建一个vueBus.jsimportBusfrom'vue';letinstall=function(Vue){Vue.prototype.$bus=newBus()}exportdefault{install};......
  • PowerShell教程 - 系统事件管理(System Event Management)
    更新记录转载请注明出处。2022年8月24日发布。2022年8月18日从笔记迁移到博客。系统事件管理(SystemEventManagement)显示事件管理器Show-EventLog获得事件条......
  • Echart选中事件-geoselectchanged |geoselected | geounselected
    geoselectchangedEventACTION: geoToggleSelectgeo 中地图区域切换选中状态的事件。用户点击选中会触发该事件。{type:'geoselectchanged',//系列ID......
  • js函数节流(Throttle)
    在浏览器DOM事件里面,有一些事件会随着用户的操作不间断触发。比如:重新调整浏览器窗口大小(resize),浏览器页面滚动(scroll),鼠标移动(mousemove),输入框监听(oninput)等。也就是说......
  • JavaScript基础回顾知识点记录6-操作元素样式和事件对象(介绍基本使用)
    js中操作元素样式通过js修改元素内联样式(设置和读取的都是内联样式)获取当前元素显示的样式<html> <head> <metacharset="utf-8"> <title></title> </head> <......