|
15 | 15 |
|
16 | 16 | var innerns = 'vue-virtual-scroll-list' |
17 | 17 |
|
| 18 | + var _debounce = function (func, wait, immediate) { |
| 19 | + var timeout |
| 20 | + return function () { |
| 21 | + var context = this |
| 22 | + var args = arguments |
| 23 | + var later = function () { |
| 24 | + timeout = null |
| 25 | + if (!immediate) { |
| 26 | + func.apply(context, args) |
| 27 | + } |
| 28 | + } |
| 29 | + var callNow = immediate && !timeout |
| 30 | + clearTimeout(timeout) |
| 31 | + timeout = setTimeout(later, wait) |
| 32 | + if (callNow) { |
| 33 | + func.apply(context, args) |
| 34 | + } |
| 35 | + } |
| 36 | + } |
| 37 | + |
18 | 38 | return Vue2.component(innerns, { |
19 | 39 | props: { |
20 | 40 | size: { type: Number, required: true }, |
|
24 | 44 | wtag: { type: String, default: 'div' }, |
25 | 45 | wclass: { type: String, default: '' }, |
26 | 46 | start: { type: Number, default: 0 }, |
| 47 | + debounce: { type: Number, default: 0 }, |
27 | 48 | totop: Function, |
28 | 49 | tobottom: Function, |
29 | 50 | onscroll: Function |
|
207 | 228 | render: function (createElement) { |
208 | 229 | var showList = this.filter(this.$slots.default) |
209 | 230 | var delta = this.delta |
| 231 | + var dbc = this.debounce |
210 | 232 |
|
211 | 233 | return createElement(this.rtag, { |
212 | 234 | 'ref': 'container', |
|
216 | 238 | 'height': delta.viewHeight + 'px' |
217 | 239 | }, |
218 | 240 | 'on': { |
219 | | - 'scroll': this.handleScroll |
| 241 | + 'scroll': dbc ? _debounce(this.handleScroll.bind(this), dbc) : this.handleScroll |
220 | 242 | }, |
221 | 243 | 'class': this.rclass |
222 | 244 | }, [ |
|
0 commit comments