链接首次点击后,使链接无法点击,等待转换结束+ 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转换以降低速度。
更像是去抖动问题,如果您以前没有使用它,可能需要查看它,它将有助于您编写代码的设计。
对于以下示例,我将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);