Skip to content

Commit 91d7964

Browse files
feat($Debounce): add Debounced Click directive
add `Debounced Click` directive BREAKING CHANGE: debounced click support.
1 parent 098378e commit 91d7964

File tree

4 files changed

+25
-3
lines changed

4 files changed

+25
-3
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/* eslint-disable no-unused-vars */
2+
import { DirectiveOptions } from 'vue'
3+
import _ from 'lodash'
4+
5+
const debouncedClickDirectiveOptions: DirectiveOptions = {
6+
inserted (el, directiveBinding) {
7+
const wait: number = directiveBinding.arg ? +directiveBinding.arg : 1000
8+
el.addEventListener('click', _.debounce(event => {
9+
directiveBinding.value.call(el, event)
10+
}, wait))
11+
}
12+
}
13+
14+
export default debouncedClickDirectiveOptions
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import Vue from 'vue'
2+
import debouncedClickDirectiveOptions from './debounced-click-directive-options'
3+
4+
Vue.directive('debounced-click', debouncedClickDirectiveOptions)

src/main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import vuetify from './plugins/vuetify'
66
import 'roboto-fontface/css/roboto/roboto-fontface.css'
77
import '@mdi/font/css/materialdesignicons.css'
88
import '@/directives/throttled-click'
9+
import '@/directives/debounced-click'
910
import { listenToColorScheme } from '@/plugins/adaptive-color-scheme'
1011

1112
Vue.config.productionTip = false

src/views/VuetifyDemo.vue

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
<v-list-item-avatar tile size="80" color="grey"/>
4040
</v-list-item>
4141
<v-card-actions>
42-
<v-btn text v-throttled-click:2000="handleThrottledClickButton">Button</v-btn>
43-
<v-btn text>Button</v-btn>
42+
<v-btn text v-throttled-click:2000="handleThrottledClickButton">Throttle</v-btn>
43+
<v-btn text v-debounced-click:2000="handleDebouncedClickButton">Debounce</v-btn>
4444
</v-card-actions>
4545
</v-card>
4646
<v-row align="center">
@@ -148,7 +148,10 @@ export default Vue.extend({
148148
},
149149
methods: {
150150
handleThrottledClickButton (event: Event) {
151-
console.log('handleThrottledClickButton', event)
151+
console.info('handleThrottledClickButton', event)
152+
},
153+
handleDebouncedClickButton (event: Event) {
154+
console.info('handleDebouncedClickButton', event)
152155
},
153156
onResize () {
154157
this.windowSize = { x: window.innerWidth, y: window.innerHeight }

0 commit comments

Comments
 (0)