【发布时间】:2014-12-02 12:28:02
【问题描述】:
下面的滑入式菜单代码是我从头开始拼凑起来的。我正在尝试添加超时功能,以防止由于多次单击而导致过多的滑入和滑出。每 200 毫秒只有一次点击应该真正触发动画。我试了又试,但无法弄清楚。帮助! :)
var togglerWidth = $('#mobile-menu-toggler').css('min-width');
var slideLeft = function () {
var menuWidth = $('#mainmenu-mobile').width(); //get width of main menu
$('#mobile-menu-toggler').animate({
width: menuWidth
},
500,
'swing',
function () {
});
$('#mainmenu-mobile').animate({
right: "0px"
},
500,
'swing',
function () {
});
}
var slideRight = function () {
var menuWidth = $('#mainmenu-mobile').width();
$('#mobile-menu-toggler').animate({
width: togglerWidth
},
500,
'swing',
function () {
});
$('#mainmenu-mobile').animate({
right: -menuWidth
},
500,
'swing',
function () {
});
}
var activate = function () {
$('#mainmenu-mobile, #mobile-menu-toggler').addClass('active-menu');
}
var deactivate = function () {
$('#mainmenu-mobile, #mobile-menu-toggler').removeClass('active-menu').addClass('inactive-menu');
}
$("#mobile-menu-toggler").click(function () {
$(this).toggleClass('inactive-menu');
$('#mainmenu-mobile').toggleClass('inactive-menu');
if ($(this).hasClass('inactive-menu')) {
slideRight();
deactivate();
} else {
slideLeft();
activate();
}
});
$(document).mousedown(function (e) {
var container = $("#mobile-menu-wrap");
if (!container.is(e.target) && container.has(e.target).length === 0) {
slideRight();
deactivate();
}
});
【问题讨论】:
-
您可能想使用
.stop(true, true)。见:api.jquery.com/stop -
我以前试过。没关系,因为它可以防止过多的动画,但是如果您在短时间内不小心单击两次,它仍然会在您身上打开和关闭。
-
您要接受领先的点击吗?还是仅最后一次点击?,即当用户在 150 毫秒内再次点击按钮时,您是否希望它仅触发第一次并忽略第二次,反之亦然?
标签: javascript jquery animation delay settimeout