最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

在js中如何实现函数去抖(详细教程)

来源:懂视网 责编:小采 时间:2020-11-27 19:38:19
文档

在js中如何实现函数去抖(详细教程)

在js中如何实现函数去抖(详细教程):这篇文章主要介绍了angular.js和vue.js中实现函数去抖示例(debounce),现在分享给大家,也给大家做个参考。问题描述搜索输入框中,只当用户停止输入后,才进行后续的操作,比如发起Http请求等。学过电子电路的同学应该知道按键防抖。原理是一样的:就是说当
推荐度:
导读在js中如何实现函数去抖(详细教程):这篇文章主要介绍了angular.js和vue.js中实现函数去抖示例(debounce),现在分享给大家,也给大家做个参考。问题描述搜索输入框中,只当用户停止输入后,才进行后续的操作,比如发起Http请求等。学过电子电路的同学应该知道按键防抖。原理是一样的:就是说当

这篇文章主要介绍了angular.js和vue.js中实现函数去抖示例(debounce),现在分享给大家,也给大家做个参考。

问题描述

搜索输入框中,只当用户停止输入后,才进行后续的操作,比如发起Http请求等。

学过电子电路的同学应该知道按键防抖。原理是一样的:就是说当调用动作n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间。本文将分别探讨在angular.js和vue.js中如何实现对用户输入的防抖。

angular.js中解决方案

把去抖函数写成一个service,方便多处调用:

.factory('debounce', ['$timeout','$q', function($timeout, $q) {
 // The service is actually this function, which we call with the func
 // that should be debounced and how long to wait in between calls
 return function debounce(func, wait, immediate) {
 var timeout;
 // Create a deferred object that will be resolved when we need to
 // actually call the func
 var deferred = $q.defer();
 return function() {
 var context = this, args = arguments;
 var later = function() {
 timeout = null;
 if(!immediate) {
 deferred.resolve(func.apply(context, args));
 deferred = $q.defer();
 }
 };
 var callNow = immediate && !timeout;
 if ( timeout ) {
 $timeout.cancel(timeout);
 }
 timeout = $timeout(later, wait);
 if (callNow) {
 deferred.resolve(func.apply(context,args));
 deferred = $q.defer();
 }
 return deferred.promise;
 };
 };
 }])

调用方法,在需要使用该功能的controller/directive中注入debounce,也要注入$watch,然后:

$scope.$watch('searchText',debounce(function (newV, oldV) {
 console.log(newV, oldV);
 if (newV !== oldV) {
 $scope.getDatas(newV);
 }
}, 350));

大功告成!

Vue.js中的解决方案

首先在公共函数文件中注册debounce

export function debounce(func, delay) {
 let timer

 return function (...args) {
 if (timer) {
 clearTimeout(timer)
 }
 timer = setTimeout(() => {
 func.apply(this, args)
 }, delay)
 }
}

然后在需要使用的组件中引入debounce,并且在created生命周期内调用:

created() {
 this.$watch('searchText', debounce((newSearchText) => {
 this.getDatas(newSearchText)
 }, 200))
}

大功告成!

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

express搭建查询服务器

使用js自定义trim函数删除两端空格

JavaScript运行原理

vue中全选与反选

详解讲解使用jest测试react native组件

在vue中全选实现数据的绑定及获取

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

在js中如何实现函数去抖(详细教程)

在js中如何实现函数去抖(详细教程):这篇文章主要介绍了angular.js和vue.js中实现函数去抖示例(debounce),现在分享给大家,也给大家做个参考。问题描述搜索输入框中,只当用户停止输入后,才进行后续的操作,比如发起Http请求等。学过电子电路的同学应该知道按键防抖。原理是一样的:就是说当
推荐度:
标签: 实现 js 详细
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top