zhangxiaoxu123456
2021-12-06 f32f7d699607bb159d25dcf441942370aba2c968
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<template>
    <view class="u-demo">
        <view class="u-demo-wrap">
            <view class="u-demo-title">演示效果</view>
            <view class="u-demo-area">
                <view class="no-mode-here">
                    选择节流或者防抖模式,点击按钮,将会执行回调并显示在下方:
                </view>
                <view class="u-demo-result-line" v-if="result.length">
                    <view v-for="(item, index) in result" :key="index">{{(index >= 1) ? '-' : ''}}回调</view>
                </view>
            </view>
        </view>
        <view class="u-config-wrap">
            <view class="u-button" hover-class="u-button--hover" hover-stay-time="150" @tap="btnClick">
                点击触发
            </view>
            <view class="u-config-title u-border-bottom">
                参数配置
            </view>
            <view class="u-config-item">
                <view class="u-item-title">模式</view>
                <u-subsection :list="['节流', '防抖']" @change="modeChange"></u-subsection>
            </view>
            <view class="u-config-item">
                <view class="u-item-title">时间间隔</view>
                <u-subsection current="1" :list="['500ms', '1000ms', '2000ms']" @change="timeoutChange"></u-subsection>
            </view>
            <view class="u-config-item">
                <view class="u-item-title">执行时机</view>
                <u-subsection :list="['开始处', '结束处']" @change="immediateChange"></u-subsection>
            </view>
        </view>
    </view>
</template>
 
<script>
    export default {
        data() {
            return {
                result: [],
                timeout: 1000,
                immediate: true,
                mode: 'throttle'
            }
        },
        methods: {
            modeChange(index) {
                this.mode = index ? 'debouncd' : 'throttle';
            },
            timeoutChange(index) {
                this.timeout = [500, 1000, 2000][index];
            },
            immediateChange(index) {
                this.immediate = !index;
            },
            getResult() {
                if(this.result.length >= 6) this.result = [];
                this.result.push(0);
            },
            btnClick() {
                if(this.mode == 'throttle') {
                    this.$u.throttle(this.getResult, this.timeout, this.immediate);
                } else {
                    this.$u.debounce(this.getResult, this.timeout, this.immediate);
                }
            }
        }
    }
</script>
 
<style lang="scss" scoped>
    .u-button {
        margin-top: 50rpx;
        margin-bottom: 50rpx;
        display: flex;
        justify-content: center;
        align-items: center;
        height: 80rpx;
        border-radius: 6rpx;
        border: 1px solid $u-type-primary;
        color: $u-type-primary;
    }
    
    .u-button--hover {
        color: #fff;
        background-color: $u-type-primary;
    }
    
    .u-demo-result-line {
        display: flex;
        justify-content: center;
    }
</style>