JS执行控制之节流模式实例分析


Posted in Javascript onDecember 21, 2018

本文实例讲述了JS执行控制之节流模式。分享给大家供大家参考,具体如下:

节流模式:对重复的业务逻辑进行控制,执行最后一次操作,并取消其他操作,以提高性能。

重复的业务逻辑真的很让人讨厌的,但其中往往蕴含着可被优化的空间。

比如我们经常碰到的一种情况:当鼠标移进容器的时候,改变容器的颜色;当鼠标移出去的时候,恢复默认颜色。

但是有时候是用户不小心移进来的,或者是不小心移出去的,但是效果却消失了。这样用户的体验效果是非常不好的,这时候,我们就可以利用节流模式。

节流模式的核心思想是创造计时器,延迟程序的执行。这也使得计时器中的回调函数的操作异步执行,

源代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>3water.com 节流器试用——huansky</title>
</head>
<body>
  <div id="ttt">
    <p id="t1">我只有在鼠标放置两秒后才改变背景色,移出超过两秒才恢复</p>
      <br>
    <p id="t2">我是正常的,只要鼠标移进来就改变背景色,移出就恢复</p>
    <br>
    <p id="t3">我只有在鼠标放置两秒后才改变背景色,移出超过两秒才恢复</p>
  </div>
</body>
<script>
  /** 节流器
   *  @param isclear 获取传入的第一个参数
   * @param fn    第二个参数,表示函数
   **/
  var throttle=function () {
    var isclear=arguments[0],fn;
    if (typeof isclear==="boolean"){
      fn=arguments[1];
      //函数的计时句柄存在,就清除函数
      fn._throttleID && clearTimeout(fn._throttleID);
      if(fn._throttleI){
        console.log(fn._throttleID);
      }
    }
    else{
      fn=isclear;
      param=arguments[1];
      var p={
        context:null,
        args:[],
        time:800,
      };
      //清除执行句柄函数
      arguments.callee(true,fn);
      //为函数绑定计时器的句柄,延迟执行函数
      fn._throttleID=setTimeout(function(){
        //console.log(fn._throttleID);
        fn.apply(p.context,p.args);
      },p.time)
    }
  }
  var dom=document.getElementsByTagName("p");
  var Entefn1=function(){ dom[0].style.cssText="background-color:yellow";};
  var Entefn2=function(){ dom[1].style.cssText="background-color:blue";};
  var Entefn3=function(){ dom[2].style.cssText="background-color:red";};
  var Entefn11=function(){ dom[0].style.cssText="background-color:#fff";};
  var Entefn22=function(){ dom[1].style.cssText="background-color:#fff";};
  var Entefn33=function(){ dom[2].style.cssText="background-color:#fff";};
  dom[0].addEventListener("mouseover",function(){
    throttle(true,Entefn11);
    throttle(Entefn1);
  },false);
  dom[1].addEventListener("mouseover",Entefn2,false);
  dom[2].addEventListener("mouseover",function(){
    throttle(true,Entefn33);
    throttle(Entefn3);
  },false);
  dom[0].addEventListener("mouseout",function(){
    throttle(Entefn11);
    throttle(true,Entefn1);
  },false);
  dom[1].addEventListener("mouseout",Entefn22,false);
  dom[2].addEventListener("mouseout",function(){
    throttle(Entefn33);
    throttle(true,Entefn3);
  },false);
</script>
</html>

这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,运行效果如下:

JS执行控制之节流模式实例分析

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript词法作用域与调用对象深入理解
Nov 29 Javascript
C++中的string类的用法小结
Aug 07 Javascript
js实现当前输入框高亮显示的方法
Aug 19 Javascript
原生js实现数字字母混合验证码的简单实例
Dec 10 Javascript
javascript实现方法调用与方法触发小结
Mar 26 Javascript
使用jquery实现的循环连续可停顿滚动实例
Nov 23 Javascript
通过命令行生成vue项目框架的方法
Jul 12 Javascript
node.js基于express使用websocket的方法
Nov 09 Javascript
vue-music关于Player播放器组件详解
Nov 28 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
May 08 Javascript
vue2.0实现音乐/视频播放进度条组件
Jun 06 Javascript
openlayers实现地图弹窗
Sep 25 Javascript
vue favicon设置以及动态修改favicon的方法
Dec 21 #Javascript
微信小程序自定义键盘 内部虚拟支付
Dec 20 #Javascript
微信小程序实现随机验证码功能
Dec 20 #Javascript
微信小程序实现发送验证码按钮效果
Dec 20 #Javascript
使用puppeteer爬取网站并抓出404无效链接
Dec 20 #Javascript
详解如何使用node.js的开发框架express创建一个web应用
Dec 20 #Javascript
js canvas实现橡皮擦效果
Dec 20 #Javascript
You might like
ajax 的post方法实例(带循环)
2011/07/04 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
python两种遍历字典(dict)的方法比较
2014/05/29 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
python基础教程之匿名函数lambda
2017/01/17 Python
Python如何生成树形图案
2018/01/03 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
运动会解说词200字
2014/02/06 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
书香家庭事迹材料
2014/05/09 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
七个Python必备的GUI库
2021/04/27 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python