Until

作者: Tomatoro | 来源:发表于2019-05-30 11:34 被阅读0次

    debounce (防抖)函数

    $('textarea').on('keydown', debounce(ajaxAction, 2500));
    
    function debounce(fn, delay){
      var timer = null; // 声明计时器
      return function() {
        var context = this;
        var args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
          fn.apply(context, args);
        }, delay);
      };
    }
    

    上面代码中,只要在2500毫秒之内,用户再次击键,就会取消上一次的定时器,然后再新建一个定时器。这样就保证了回调函数之间的调用间隔,至少是2500毫秒。

    清除所有定时器

    setTimeout和setInterval函数,都返回一个整数值,表示计数器编号。将该整数传入clearTimeout和clearInterval函数,就可以取消对应的定时器。

    var id1 = setTimeout(f, 1000);
    var id2 = setInterval(f, 1000);
    
    clearTimeout(id1);
    clearInterval(id2);
    

    上面代码中,回调函数 f 不会再执行了,因为两个定时器都被取消了。

    setTimeout和setInterval返回的整数值是连续的,也就是说,第二个setTimeout方法返回的整数值,将比第一个的整数值大1。

    function f() {}
    setTimeout(f, 1000) // 10
    setTimeout(f, 1000) // 11
    setTimeout(f, 1000) // 12
    

    上面代码中,连续调用三次setTimeout,返回值都比上一次大了1。

    利用这一点,可以写一个函数,取消当前所有的setTimeout定时器。

    (function() {
      // 每轮事件循环检查一次
      var gid = setInterval(clearAllTimeouts, 0);
    
      function clearAllTimeouts() {
        var id = setTimeout(function() {}, 0);
        while (id > 0) {
          if (id !== gid) {
            clearTimeout(id);
          }
          id--;
        }
      }
    })();
    

    上面代码中,先调用setTimeout,得到一个计算器编号,然后把编号比它小的计数器全部取消。

    生成随机ID

    // 生成长度为11的随机字母数字字符串
    Math.random().toString(36).substring(2);
    // hg7znok52x
    

    获取URL的查询参数

    // 获取URL的查询参数
    q={};location.search.replace(/([^?&=]+)=([^&]+)/g,(_,k,v)=>q[k]=v);q;
    // ?foo=bar&baz=bing => {foo: bar, baz: bing}
    

    数组混淆

    随机更改数组元素顺序,混淆数组
    
    // 随机更改数组元素顺序,混淆数组
    (arr) => arr.slice().sort(() => Math.random() - 0.5)
    /* 
    let a = (arr) => arr.slice().sort(() => Math.random() - 0.5)
    let b = a([1,2,3,4,5])
    console.log(b)
    */
    

    生成随机十六进制代码(生成随机颜色)

    使用JavaScript简洁代码生成随机十六进制代码
    
    // 生成随机十六进制代码 如:'#c618b2'
    '#' + Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0');
    

    数组去重

    这是一个原生的JS函数但是非常简洁,Set接受任何可迭代对象,如数组[1,2,3,3],并删除重复项
    
    // 数组去重
    [...new Set(arr)]
    

    创建特定大小的数组

    [...Array(3).keys()]
    // [0, 1, 2]
    

    返回一个键盘(惊呆了)

    这是一个很难看懂的简洁代码,但是运行后你会惊呆的,他竟然返回一个图形键盘
    
    // 用字符串返回一个键盘图形
    (_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["BS","TAB","CAPS","ENTER"][p++]||'SHIFT',p])}\\|`,m+=y+(x+'    ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join`
    `)()
    " ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
    ||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS    ||
    ||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
    |/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
     ________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
    ||TAB   |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
    ||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
    |/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
     _________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
    ||CAPS   |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
    ||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
    |/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
     ___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
    ||SHIFT    |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT    ||
    ||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
    |/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|"
    

    相关文章

      网友评论

        本文标题:Until

        本文链接:https://www.haomeiwen.com/subject/clctbqtx.html