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 相关文章推荐
jQuery TextBox自动完成条
Jul 22 Javascript
js获取元素在浏览器中的绝对位置
Jul 24 Javascript
深入探究使JavaScript动画流畅的一些方法
Jun 30 Javascript
js随机生成字母数字组合的字符串 随机动画数字
Sep 02 Javascript
不得不分享的JavaScript常用方法函数集(上)
Dec 23 Javascript
获取input标签的所有属性的方法
Jun 28 Javascript
es6学习笔记之Async函数基本教程
May 11 Javascript
JavaScript事件冒泡与事件捕获实例分析
Aug 01 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
Aug 19 Javascript
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 Javascript
Vue实现简单购物车功能
Dec 13 Vue.js
JS轻量级函数式编程实现XDM二
Jun 16 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
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
Python struct模块解析
2014/06/12 Python
详解Python当中的字符串和编码
2015/04/25 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
python+django+rest框架配置创建方法
2019/08/31 Python
python中的逆序遍历实例
2019/12/25 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
python 实现图片批量压缩的示例
2020/12/18 Python
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
英国日常交易网站:Wowcher
2018/09/04 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
大学生收银员求职信分享
2014/01/02 职场文书
网络编辑岗位职责
2014/03/18 职场文书
校长寄语大全
2014/04/09 职场文书
售房协议书范本2014
2014/10/23 职场文书
nginx配置指令之server_name的具体使用
2022/08/14 Servers
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS