|
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