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>

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

  • 相关阅读:
    php的冒泡算法
    mysql 处理重复数据
    Ehcache配置详解及CacheManager使用
    JFinal常见问题和知识点笔记
    JFinal连接数据库配置说明
    innerHTML和innerText区分
    方法$.data()和$.('#test').on()的使用
    input text的所有事件
    jQuery操作Select
    在js或css后加?v= 版本号不让浏览器缓存
  • 原文地址:https://www.cnblogs.com/superSmile/p/15355897.html
Copyright © 2011-2022 走看看