链接首次点击后,使链接无法点击,等待转换结束+ 1s,然后再次点击链接

我有一个主菜单。
当点击任何有孩子的PARENT

  • 的链接时,子菜单打开。
    此时,将一个类moves-out添加到主菜单中,并启动CSS转换。
    转换结束后,显示子菜单。
    子菜单包含单击的
  • (如果再次单击将带我们返回主菜单)并且它是子项。
    在这里,我的目标是禁用父
  • 上的click事件1秒钟,
    然后在这1秒后给它回复点击的能力,这样我们就可以回到主菜单了。
    导航的一个例子是:

       

    对我有用的唯一方法是在主菜单添加了moves-out类时隐藏/显示PARENT,如下所示:

     $('.subnav-trigger').on('click', function(event) { event.preventDefault(); if ($('.main-nav').hasClass('moves-out')) { var $this = $(this); $this.hide(); setTimeout(function(){ $this.show(); }, 1000); } } 

    我尝试了很多东西,这是唯一接近我的目标的东西。
    取而代之的是$this.hide()$this.off('click')正在运行
    但是在setTimeout内部我要做的就是重新获得点击不起作用。
    任何帮助将不胜感激。
    注意:我希望这可以防止快速点击/重新点击。 不要忘记过渡;)
    再次感谢您的帮助。
    SYA 🙂

    尝试在li标签上设置pointer-events ,并在1秒后重置它。

     $('.subnav-trigger').on('click', function(event) { event.preventDefault(); var $this = $(this); $this.parent().css("pointer-events","none"); if ($('.main-nav').hasClass('moves-out')) { $this.hide(); setTimeout(function(){ $this.show(); $this.parent().css("pointer-events","auto"); }, 1000); } }); 

    这是一种使用递归函数的方法,该函数启用了click处理程序,在click禁用它,启用transitionend事件,添加启用转换的类,然后重新启用该函数。 为示例启用3s转换以降低速度。

     var $lis = $('li'), clicker = function() { $lis.on('click', function() { $lis.off('click'); $(this).on('transitionend', function() { clicker(); }).addClass('color'); }); } clicker(); 
     li { transition: background 3s; } li.color { background: red; } 
       

    更像是去抖动问题,如果您以前没有使用它,可能需要查看它,它将有助于您编写代码的设计。

    对于以下示例,我将moves-out添加到ul进行测试,您可以检查console.log以查看结果。 要在您的应用中使用,请不要忘记从删除它( moves-out

     function debounce() { if ($('.main-nav').hasClass('moves-out')) { console.log("Clicked - click event Disabled.."); $(this).off('click'); setTimeout(function() { $(".subnav-trigger").on('click', debounce); console.log("click event enabled!"); }.bind(this), 1000); } }; $(".subnav-trigger").on('click', debounce);