Стабилизатор
определение
Частая операция для предотвращения джиттера, отсутствие операции в течение n секунд после операции, событие будет запущено, и если операция продолжится, время будет пересчитано
сцены, которые будут использоваться
- поле ввода
- изменить размер масштаба
код
// 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 секунд
сцены, которые будут использоваться
- Щелчок мышью, mousedown, mousemove выполняются только один раз в единицу времени
- События прокрутки, отложенная загрузка, загрузка прокрутки, загрузка еще или прослушивание положения полосы прокрутки
- Предотвратите отправку высокочастотных кликов и предотвратите повторную отправку формы
код
// 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
Метод использования такой же, как анти-встряска