vue에서 떨림 방지 함수 구성 요소 작업 사용하기
1. 먼저 떨림 방지 함수를 쓴다
/**
* @desc
* @param { } func
* @param { } wait
* @param { } immediate
*/
export function debounce(func, wait, immediate) {
let timeout
return function(...args) {
let context = this
if (timeout) clearTimeout(timeout)
if (immediate) {
let callNow = !timeout
timeout = setTimeout(function() {
timeout = null
}, wait)
if (callNow) func.apply(context, args)
} else {
timeout = setTimeout(function() {
func.apply(context, args)
}, wait)
}
}
}
2. 그리고 사용할 구성 요소에 import 들어오기
import { debounce } from 'xxx'
export default {
data: {
return {
vm: this
}
},
methods: {
toDoSth: debounce((vm) => {
//
// 、
// , , 。
},
500,
true
)
}
}
3. 구성 요소 방법에서 사용template:
고급
위의 작법은 이미 문제를 해결할 수 있지만, 아무래도 미관이 부족하다고 느낀다.
인터넷에서 한 번 검색해 보니 어떤 형들이 떨림 방지 봉투를 하나의 구성 요소로 포장하는 것을 보았는데, 과연 내가 생각한 것과 같다.그러나 이 형들은 상하문을 매개 변수로 직접 전송했다. 내가 전체 실례를 전송한 것보다 뛰어나다. 나는 이를 바탕으로immediate의 기능을 추가했고 기본적으로 이벤트 매개 변수를 전송하지 않는 상황 처리를 추가했다.
debounce.js 파일:
import Vue from 'vue'
const debounce = (func, time, ctx, immediate) => {
let timer
const rtn = (...params) => {
clearTimeout(timer)
if (immediate) {
let callNow = !timer
timer = setTimeout(() => {
timer = null
}, time)
if (callNow) func.apply(ctx, params)
} else {
timer = setTimeout(() => {
func.apply(ctx, params)
}, time)
}
}
return rtn
}
Vue.component('Debounce', {
abstract: true,
props: ['time', 'events', 'immediate'],
created() {
this.eventKeys = this.events && this.events.split(',')
},
render() {
const vnode = this.$slots.default[0]
// events,
if (!this.eventKeys) {
this.eventKeys = Object.keys(vnode.data.on)
}
this.eventKeys.forEach(key => {
vnode.data.on[key] = debounce(
vnode.data.on[key],
this.time,
vnode,
this.immediate
)
})
return vnode
}
})
사용 방법:1. debounce 도입.js 파일
import 'xxx/debounce.js'
export default {
methods: {
toDoSth(e) {
//
}
}
}
2. 모형에서 사용한다.여기서 time은 필수 매개 변수입니다.이벤트와immediate 매개 변수는 모두 선택할 수 있는 매개 변수입니다.
구성 요소 아래에 여러 개의 이벤트가 연결되어 있다면, 이벤트는 떨림 방지 처리가 필요한 이벤트를 사용자 정의할 수 있습니다.
즉시 실행이 필요하다면immediate 매개 변수를true로 설정할 수 있습니다.
<Debounce :time="500" event="click" :immediate="true">
<button @click="toDoSth($event, 1)">click me</button>
</Debounce>
이렇게 하면 Debounce 구성 요소의 패키지가 한 번 완성됩니다.보충 지식: vue 떨림 방지 함수, 폭력 클릭 피하기
1.vue 프로젝트/src/components/directive/clickAgain.js
import Vue from 'vue'
const clickAgain = Vue.directive('clickAgain',{
//
bind(el, binding, vnode, oldVnode) {
// this
let self = vnode.context;
el.onclick = function (e) {
if (self._is_click) {
return false;
}
/* */
self[binding.expression]()
self._is_click=true;
setTimeout(()=>{
self._is_click=false;
},2000)
};
}
});
export default clickAgain
2. 메인에서js 도입import clickAgain from './components/directive/clickAgain.js'
/* 폭력적인 더블 클릭을 피하기 위해 도입 */
Vue.use(clickAgain);
3. 사용
<a-button key="submit" type="primary" :loading="false" v-clickAgain="handleOk">
</a-button>
상기 vue에서 떨림 방지 함수 구성 요소를 사용한 조작은 여러분께 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.