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 相关文章推荐
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
Jan 29 Javascript
Prototype PeriodicalExecuter对象 学习
Jul 19 Javascript
利用JS自动打开页面上链接的实现代码
Sep 25 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
May 28 Javascript
分享十五款 jQuery 社交网络分享插件
May 16 Javascript
js实现文字闪烁特效的方法
Dec 17 Javascript
angular中使用Socket.io实例代码
Jun 03 Javascript
Javascript 一些需要注意的细节(必看篇)
Jul 08 Javascript
React-Router如何进行页面权限管理的方法
Dec 06 Javascript
打通前后端构建一个Vue+Express的开发环境
Jul 17 Javascript
Vue中实现回车键切换焦点的方法
Feb 19 Javascript
分享一个vue实现的记事本功能案例
Apr 11 Vue.js
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
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
Three.js的使用及绘制基础3D图形详解
2017/04/27 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
八大排序算法的Python实现
2021/01/28 Python
Python解析树及树的遍历
2016/02/03 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
python获取当前目录路径和上级路径的实例
2018/04/26 Python
Python3实现二叉树的最大深度
2019/09/30 Python
python flask中动态URL规则详解
2019/11/22 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
Python如何用filter函数筛选数据
2020/03/05 Python
Python 里最强的地图绘制神器
2021/03/01 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
商务主管岗位职责
2013/12/08 职场文书
先进个人事迹材料
2014/01/25 职场文书
网站出售协议书范文
2014/10/10 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
税务会计岗位职责
2015/04/02 职场文书
党员承诺书格式范文
2015/04/28 职场文书
python自动计算图像数据集的RGB均值
2021/06/18 Python
Pandas-DataFrame知识点汇总
2022/03/16 Python