SOURCE

console 命令行工具 X clear

                    
>
console
window.vm = new Vue({
    el:'#app',
    data:{
        searchval:'',
        activeTab:1,//导航
        totalReqCount:0,//接口请求计数器
    },
    watch:{
        'searchval':base.debounce(function(){
            //判断非空
            if(!this.searchval) return;
            console.log('watch----'+this.searchval)
        },500),
    },
    methods:{
        // tab按钮点击
        tabBtn:function(curTab){
            console.log('tab======')
            this.activeTab = curTab;
            this.getTabList(curTab);
        },
        // 请求数据
        getTabList:base.throttle(function(curTab){
            console.log('请求数据----'+curTab)
            this.totalReqCount++;
            let curReqCount = this.totalReqCount;
            //模拟请求时间
            let time = 1000*Math.random()*10;
            setTimeout(()=>{
                console.log(curReqCount,this.totalReqCount,time,this.activeTab);
                if(curReqCount != this.totalReqCount) return;
                console.log('请求结果list赋值处理=====');
            },time)
        },2000,{leading:true,trailing:true}),


        // 搜索 
        // search:base.debounce(function(){
        //     if(!this.searchval) return;
        //     console.log(this.searchval)
        // },500),

        searchInput(){
            console.log('searchInput--'+this.searchval)
        },
        search(){
            // console.log('searchKeyUp--'+this.searchval)
        },

        
        // 触发一次
        clickOnce:base.throttle(function(){
            console.log('触发一次 - 3000ms节流')
        },3000),
        
        //触发多次 -- 回调函数需要写函数名称
        clickRepeat:base.throttle(function clickRepeat(){
            console.log('触发多次 - 1000ms节流');
            setTimeout(()=>{
                clickRepeat.cancel();
                // arguments.callee.cancel();
            },20)
        },1000),



      



        
        
    
    
    }
})
  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document测试</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-size: 20px;
        }
        [v-cloak]{
            display: none;
        }
        .box{
            margin:20px;
            /* border-bottom: 1px solid palevioletred; */
        }
        .title,.active{
            color:red;
        }
       
       
       

       

    </style>
    
</head>
<body>
    <div id="app" v-cloak>

        <div class="box">
            <p>1、Tab 切换示例:</p>
            <span v-for="n in 5" @click="tabBtn(n)" :class="{'active':n == activeTab}" style="padding: 0 20px;"> tab{{n}} </span>
        </div>
        <div class="box">
            <p> 2、搜索- 500ms防抖</p>
            <input type="text" v-model="searchval"  @keyup="search" @input="searchInput"/>
        </div>

        <div class="box">
            <p> 3、只触发一次- 3000ms节流</p>
            <button @click="clickOnce"> 按钮</button>
        </div>

        <div class="box">
            <p> 4、触发多次 - 1000ms节流 </p>
            <button @click="clickRepeat"> 按钮</button>
        </div>
         
     </div> 
      
    <script type="text/javascript"  src="https://mscjs.51vv.com/wx/m/vv-base/js/source/??vue-2.6.11.min.js,axios.min.js,vue-i18n-8.28.2.min.js"></script>
    <script type="text/javascript"  src="https://mscjs.51vv.com/wx/m/vv-base/js/??vvlib/pic-cdn-cs.js,base.js,jsbridge_proxy_report.min.js,utils/report.js,vvlib/vv_kibana.min.js?v=123"></script>


</body>
</html>