JavaScript防抖动与节流处理

JavaScript中防抖动和节流是常用的优化技术,用于优化页面交互和性能,下面将详细介绍防抖动和节流的实现原理以及应用场景。

什么是防抖动

在JavaScript处理页面事件时,比如按钮点击事件,如果用户频繁点击,则会导致事件的重复执行,从而浪费资源并影响用户体验。防抖动的作用是将这些重复的事件的执行合并为一次执行,从而优化页面性能。

实现原理:防抖动的原理是,设置一个定时器,延迟一段时间执行事件处理函数,如果该事件在延迟时间内再次触发,就重新设置定时器,直到延迟时间到达后,执行一次事件处理函数。

以下是一个简单的防抖动实现代码:

function debounce(fn, delay) {
  let timer = null;
  return function(...args) {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

上述代码使用闭包保存定时器,每次执行事件处理函数前先清除之前设置的定时器,再设置一个新的定时器。这样当连续触发事件时,只有最后一次触发事件会执行事件处理函数。

下面是一个例子,用防抖动优化用户搜索输入框:

<input id="searchInput" type="text">

<script>
const searchInput = document.getElementById('searchInput');

function debounce(fn, delay) {
  let timer = null;
  return function(...args) {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

function search() {
  console.log('search');
}

searchInput.addEventListener('input', debounce(search, 500));
</script>

上述代码中,将search函数使用防抖动函数包装,用户在输入搜索内容时,只有在输入停止500毫秒后才会执行搜索功能。这样可以优化用户体验以及减少不必要的请求。

什么是节流

在JavaScript处理页面事件时,比如滚动事件,如果处理函数非常耗费资源,如果在每次事件触发时都执行事件处理函数,会造成浏览器卡顿或崩溃。而节流的作用是,限制事件处理函数的执行频率,从而优化页面性能。

实现原理:节流的原理是,设置一个定时器,在规定时间内只执行一次事件处理函数,如果成功执行该次事件,则继续执行下一次任务,否则等待下一次触发事件的时间到达时执行事件处理函数。

以下是一个简单的节流实现代码:

function throttle(fn, delay) {
  let timer = null;
  return function(...args) {
    if (!timer) {
      timer = setTimeout(() => {
        fn.apply(this, args);
        timer = null; 
      }, delay);
    }
  };
}

上述代码使用闭包保存定时器,每次执行事件处理函数前先检查是否存在未执行的定时器,如果存在则返回,如果不存在则执行事件处理函数,并设置一个定时器,以延迟执行下一个任务。

下面是一个例子,使用节流优化用户滚动事件:

<div id="scrollBox">
  <p>Scroll down to see the effect.</p>
  <ul id="list">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
    <li>Item 6</li>
    <li>Item 7</li>
    <li>Item 8</li>
    <li>Item 9</li>
    <li>Item 10</li>
  </ul>
</div>

<script>
const scrollBox = document.getElementById('scrollBox');
const list = document.getElementById('list');

function throttle(fn, delay) {
  let timer = null;
  return function(...args) {
    if (!timer) {
      timer = setTimeout(() => {
        fn.apply(this, args);
        timer = null; 
      }, delay);
    }
  };
}

function handleScroll() {
  console.log('scroll');
}

scrollBox.addEventListener('scroll', throttle(handleScroll, 200));
</script>

上述代码中,将handleScroll函数使用节流函数包装,用户滚动时,只有在200毫秒内执行一次滚动事件,这样可以减少浏览器负担,提高用户体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript防抖动与节流处理 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript 使用正则表达式进行表单验证的示例代码

    表单验证是 web 开发中非常常见的需求。在 JavaScript 中使用正则表达式可以快速地进行表单验证。下面是使用正则表达式进行表单验证的示例代码。 具体步骤 第一步:获取表单元素和表单的值 在进行表单验证之前,需要获取表单元素以及表单元素的值。可以使用document.querySelector方法获取元素,使用value属性获取元素值。 const …

    JavaScript 2023年6月10日
    00
  • 精通Javascript系列之数据类型 字符串

    精通Javascript系列之数据类型 字符串 字符串是什么? 在Javascript中,字符串是一种基本的数据类型,用于表示文本数据。字符串由一串连续的字符组成,可以使用单引号(‘)、双引号(“)、反斜杠(`)包围。 定义字符串 可以使用以下三种方式定义字符串: 使用单引号: let str1 = ‘hello’; 使用双引号: let str2 = &q…

    JavaScript 2023年5月28日
    00
  • 数据类型和Json格式分析小结

    好的!关于“数据类型和Json格式分析小结”的攻略,我可以为你详细讲解,主要包括以下几个方面: 数据类型的概念 在计算机科学中,数据类型即数据的种类,通常被指定为指令集和编程语言的一部分。常见的数据类型包括整数、浮点数、字符等。不同的数据类型有不同的数据存储方式、运算规则和支持的操作等特点。 在编程中,合理使用数据类型能够有效地提高程序的效率和性能,同时可以…

    JavaScript 2023年5月27日
    00
  • DIV常见任务(下) —变身为编辑器及div的各种diy应用

    DIV常见任务(下) —变身为编辑器及div的各种diy应用 简介 在网页开发中,DIV是使用最多的元素之一,除了常规的布局外,DIV还可以通过一些diy的方式实现更多的功能,如编辑器、拖拽、手势识别等。本文将介绍DIV的一些diy应用,供读者学习参考。 DIV变身为编辑器 通过一些技巧和库,我们可以将DIV变身为一个简单的富文本编辑器,而无需使用第三方的J…

    JavaScript 2023年6月11日
    00
  • JavaScript html5利用FileReader实现上传功能

    这里提供一个简单的JavaScript HTML5利用FileReader实现上传文件的攻略。 前言 很多时候我们需要上传文件到服务器。HTML5中提供了<input type=”file”>标签来实现文件上传。但是这种方法有一个限制:无法对文件进行预览或处理。为了解决这个问题,我们可以使用FileReader API。FileReader AP…

    JavaScript 2023年5月27日
    00
  • javascript简写常用的12个技巧(可以大大减少你的js代码量)

    以下是Javascript简写常用的12个技巧的完整攻略: 1.使用三元运算符 使用三元运算符可以简化if语句的书写,并且可以减少代码量。 // if语句 if (x > 10) { y = 20; } else { y = 30; } // 三元运算符 y = x > 10 ? 20 : 30; 2.使用模板字面量 使用模板字面量可以将变量插入…

    JavaScript 2023年5月18日
    00
  • 手写TypeScript 时很多人常犯的几个错误

    当我们手写TypeScript时,很容易会犯一些常见的错误。在这里,我来分享一些常见的错误,并提供一些示例说明和解决方案。 1. 类型声明不正确 在TypeScript中,类型声明非常重要,而类型声明不正确则会导致代码中的错误。例如: function add(num1, num2) { return num1 + num2; } let result = …

    JavaScript 2023年6月10日
    00
  • 又一款js时钟!transform实现时钟效果

    下面就是关于“又一款js时钟!transform实现时钟效果”的完整攻略。 1. 理解transform 在使用transform实现时钟效果之前,我们需要先理解transform。transform是CSS3的一个属性,可以用于改变元素的形状、尺寸、位置和方向等,常见的transform属性有: translate:平移 rotate:旋转 scale:缩…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部