zoukankan      html  css  js  c++  java
  • 浅谈vue中使用防抖与节流

    一、防抖

      防抖(debounce):触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间。

      使用场景:频繁触发、输入框搜索等。

      具体方法如下:

    export const debounce = (fn, t) => {
        let delay = t || 500;
        let timer;
        return function() {
            let args = arguments;
            if (timer) {
                clearTimeout(timer);
            }
            timer = setTimeout(() => {
                timer = null;
                fn.apply(this, args);
            }, delay);
        };
    };

     

    二、节流

      节流(thorttle):高频事件触发,但在 n 秒内只会执行一次,所以节流会稀释函数的执行频率。

      使用场景:使用场景:频繁触发、onrize,onscroll滚动条,抢购按钮高频点击。

    export const Throttle = (fn, t) => {
        let last;
        let timer;
        let interval = t || 500;
        return function() {
            let args = arguments;
            let now = + new Date();
            if (last && now - last < interval) {
                clearTimeout(timer);
                timer = setTimeout(() => {
                    last = now;
                    fn.apply(this, args);
                }, interval);
            } else {
                last = now;
                fn.apply(this, args);
            }
        };
    };

    三、实现案例

    <template>
        <div>
            <div>防抖</div>
            <input type='text' @keydown="hangleChange">
            <div>{{value}}</div>
            <div>节流</div>
            <input type='text' @keydown="hangleChange1">
            <div>{{value1}}</div>
        </div>
    </template>
    
    <script>
        import { debounce,Throttle } from '@/plugins/debounceThorttle.js'
        export default {
            name: 'test',
            data() {
                return {
                    value: '',
                    value1: ''
                }
            },
            methods: {
                hangleChange: debounce(function(e){
                    this.value = e.target.value
                }),
                hangleChange1: Throttle(function(e) {
                    this.value1 = e.target.value
                })
            }
        }
    </script>
    
    <style>
    </style>

    四、区别:防抖动是将多次执行变为最后一次执行,节流是将多次执行变成每隔一段时间执行。

  • 相关阅读:
    python 访问对象的属性与方法
    python 使用类实列化对象
    python 第一个Python类(创建类)
    python 安装第三方模块
    Redux其实很简单(原理篇)
    JavaScript、ES5和ES6的介绍和区别
    Yes,I know the way to learn Ens !
    移动游戏加载性能和内存管理全解析 学习
    内存耗用:VSS/RSS/PSS/USS
    Android性能测试-内存
  • 原文地址:https://www.cnblogs.com/superSmile/p/15355897.html
Copyright © 2011-2022 走看看