国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript函數節流的兩種寫法

2019-11-19 16:54:15
字體:
來源:轉載
供稿:網友

最近看了函數節流的相關內容,具體什么是節流我不討論了,網上很多,這里總結下兩個方法,我只認可其中一個。另一個貌似也能達到節流的效果但是感覺不是很正規。

方法一:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>函數節流</title> <style> div{  font-size:40px;  color:red;  text-align: center; } </style></head><body><div>0</div> <script>var a=0; var oDiv=document.getElementsByTagName('div')[0]; var throttle=function(fn,wait){ var startTime=new Date(); return function(){  var arg=arguments;  var context=this;  var curTime=new Date();  // 如果達到了規定的觸發時間間隔,觸發 handler  var remaing=wait-(curTime-startTime)  if(remaing<=0||remaing>wait){//按理說remaing足夠證明已經到了時間間隔,但是為了防止客戶端修改了時間所以加個條件(為什么這么加我也不懂)  fn.apply(context,arg);  startTime=curTime;  } }; }; window.onmousemove=throttle(function(){  a++;  oDiv.innerText=a+""; },2000); </script></body></html>

我比較認可這個方法,另外這是簡潔版,還有一種可以是這樣子的

function throttle(fun, delay, time) {  var timeout,    startTime = new Date();  return function() {    var context = this,      args = arguments,      curTime = new Date();    clearTimeout(timeout);    // 如果達到了規定的觸發時間間隔,觸發 handler    if (curTime - startTime >= time) {      fun.apply(context, args);      startTime = curTime;      // 沒達到觸發間隔,重新設定定時器    } else {      timeout = setTimeout(function(){       fun.apply(context, args);      }, delay);    }  };};

就是在判斷完時間間隔后再加個計時器來延遲,這個我覺得加不加都行,加了也沒錯跟時間判斷互補,不加也能實現節流的效果。

第二類寫法:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>函數節流</title> <style> div{  font-size:40px;  color:red;  text-align: center; } </style></head><body><div>0</div> <script> var a=0; var oDiv=document.getElementsByTagName('div')[0]; var throttle=function(fn,time){  var timer=null;  return function(){  var arg=arguments;  var context=this;  if(timer){   return false;  }  else{  timer=setTimeout(function(){   clearTimeout(timer);   timer=null;   fn.apply(context,arg);  },time);  } }; }; window.onmousemove=throttle(function(){   a++; oDiv.innerText=a+"";  },2000); </script></body></html>

這種寫法通過判斷是否存在正在進行的計時器來決定是否執行函數,存在就結束運行函數,但是那個計時器仍在隊列里進行實踐一到還會執行,通過運行也能達到節流,也就是間隔固定的時間觸發函數,但是我就是不太喜歡這種寫法。可能是這種方法沒第一種直接吧。 

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 惠来县| 洱源县| 策勒县| 比如县| 大名县| 海口市| 东辽县| 景谷| 津南区| 灌阳县| 武陟县| 新巴尔虎左旗| 化隆| 台中县| 荥经县| 北宁市| 剑河县| 望奎县| 个旧市| 新沂市| 铜鼓县| 南充市| 长春市| 时尚| 普兰店市| 宁波市| 泌阳县| 南靖县| 黄陵县| 雅江县| 芦溪县| 杭锦旗| 杭锦后旗| 建平县| 大理市| 新闻| 安国市| 鲁山县| 胶州市| 政和县| 黄冈市|