Anti-shake и throttling используются во vue.

внешний интерфейс Vue.js

Стабилизатор

определение

Частая операция для предотвращения джиттера, отсутствие операции в течение n секунд после операции, событие будет запущено, и если операция продолжится, время будет пересчитано

сцены, которые будут использоваться

  1. поле ввода
  2. изменить размер масштаба

код

// utils.js
// immediate 是否开始立即执行
function debounce(func, delay = 300, immediate = false) {
    let timer = null
    return function() {
        if (timer) {
            clearTimeout(timer)
        }
        if (immediate && !timer) {
            func.apply(this, arguments)
        }
        timer = setTimeout(() => {
         func.apply(this, arguments)
        }, delay)
    }
}

использовать в vue

Способ 1: написать и внедрить в общедоступные методы utils

import { debounce } from 'utils'
methods: {
    appSearch:debounce(function(e.target.value){
        this.handleSearch(value)
    }, 1000),
    handleSearch(value) {
        console.log(value)
    }
}

Способ 2: запись в текущий файл vue

data: () => {
  return {
    debounceInput: () => {}
  }
},
methods: {
  showApp(value) {
    console.log('value', value)
  },
  debounce(func, delay = 300, immediate = false) {
    let timer = null
    return function() {
        if (timer) {
            clearTimeout(timer)
        }
        if (immediate && !timer) {
            func.apply(this, arguments)
        }
        timer = setTimeout(() => {
         func.apply(this, arguments)
        }, delay)
    }
  }
},
mounted() {
  this.debounceInput = this.debounce(this.showApp, 1000)      
},

дросселирование

определение

Разбавленная частая работа, выполнение функции, частая работа, срабатывает раз в n секунд

сцены, которые будут использоваться

  1. Щелчок мышью, mousedown, mousemove выполняются только один раз в единицу времени
  2. События прокрутки, отложенная загрузка, загрузка прокрутки, загрузка еще или прослушивание положения полосы прокрутки
  3. Предотвратите отправку высокочастотных кликов и предотвратите повторную отправку формы

код

// utils.js
function throttle (func, delay = 300) {    
    let prev = 0
    return function() {
        let now = Date.now()
        if ((now - prev) >= delay) {
            func.apply(this, arguments)
            prev = Date.now()
        }
    }
}

использовать в vue

Метод использования такой же, как анти-встряска