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最基本的函数汇总

    本文将分享JavaScript最基本的函数汇总,包含函数的定义、调用和返回值等内容。 函数的定义 JavaScript中定义函数非常简单,使用function关键字,并指定函数名、参数列表和函数体。 示例代码: function sayHello(name) { console.log("Hello, " + name); } 上述代码定…

    JavaScript 2023年5月18日
    00
  • js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】

    当网页中所有的元素都被加载之后,我们可以使用JS中的文档就绪函数来动态改变页面内容。其中,innerHTML和innerText是两个用于改变元素内容的函数。下面详细介绍如何使用这两个函数实现动态改变页面内容的效果。 1. 文档就绪函数 JavaScript提供了两种文档就绪函数: window.onload: 当整个页面(包括图片、样式文件等)都加载完毕之…

    JavaScript 2023年6月10日
    00
  • JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)

    JavaScript是一种广泛使用的编程语言,Web开发中使用JavaScript将会发挥重要作用。而输出信息是开发中的一个重要部分,下面将对JavaScript中输出信息的三种方法进行详细讲解: 信息确认框 信息确认框是在需要用户进行确认或者操作之前给予用户的提示窗口。JavaScript提供了一个窗口对象来进行交互,该对象中的confirm方法可以用于生…

    JavaScript 2023年5月28日
    00
  • JavaScript利用canvas实现炫酷的碎片切图效果

    JavaScript利用canvas实现炫酷的碎片切图效果是一种非常流行的前端动画效果。下面是该攻略的详细步骤: 1. 准备工作 首先,需要在HTML文件中引入一个canvas元素,并为其指定宽度和高度。然后,在JavaScript文件中获取canvas元素,以便后续操作。 <canvas id="canvas" width=&qu…

    JavaScript 2023年6月11日
    00
  • JS实现日期时间动态显示的方法

    实现日期时间动态显示的方法可以使用JavaScript代码来实现,JavaScript 提供了一些可以使用的函数和对象,我们可以通过这些函数和对象来完成这一过程。 步骤一:获取日期时间对象 在JavaScript中获取日期时间对象可以使用内置对象 Date 。Date 对象同时包含了日期和时间,可以通过这个对象获取当前的日期时间。 var now = new…

    JavaScript 2023年5月27日
    00
  • JavaScript阻止表单提交方法(附代码)

    下面是详细讲解JavaScript阻止表单提交方法的完整攻略。 文章目录 为什么需要阻止表单提交? 阻止表单默认行为的方法 jQuery实现方法 原生JavaScript实现方法 如何测试表单是否成功被阻止? 总结 为什么需要阻止表单提交? 在网页应用中,表单是极其重要的组件之一。但在表单提交时,可能会出现一些问题,例如: 用户没有填写必填字段或填写格式错误…

    JavaScript 2023年6月10日
    00
  • JavaScript中ahooks 处理 DOM 的方法

    下面是详细讲解 JavaScript 中 ahooks 处理 DOM 的方法的攻略: 简介 ahooks 是经过封装的钩子库,在 React 开发中经常会使用到。其中包含了一些与 DOM 有关的操作,比如 useClickAway 可以监听用户在页面其他区域的点击事件等。在 ahooks 中使用这些钩子能够更加方便地进行 DOM 操作。 安装 在命令行中输入…

    JavaScript 2023年6月10日
    00
  • javascript实现10个球随机运动、碰撞实例详解

    很高兴能够为你介绍 “JavaScript实现10个球随机运动、碰撞实例详解” 的完整攻略。该攻略详细介绍了如何使用JavaScript实现10个球的随机运动和碰撞效果。下面我们来一步步详细讲解该攻略的实现过程。 HTML文件 首先,我们需要在HTML文件中创建一个 <canvas> 元素用于绘制球的运动轨迹。代码如下: <!DOCTYPE…

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