function changeDrop() {
var windowSize = $(window).width();
if (windowSize > 450) {
$('.menu-361').hover(
function() {
$('.menu-361 ul').show();
},
function() {
$('.menu-361 ul').hide();
});
console.log("screen width is greater than 450px");
}
else if (windowSize <= 450) {
$('.menu-361').on('hover', function () {
//mousehover
} , function(){
//mouseout
} );
$('#dropbutton').click(function() {
$('.menu-361 ul').toggle();
$('#dropbutton p').toggle();
});
console.log("screen width is less than 450px");
}
else {}
}
changeDrop();
$(window).resize(changeDrop);
После того, как значение if истинно, бит кода загружается в память, я думаю. И когда window.width составляет <= 450, код из состояния if или> 450 все еще работает. Любая идея, как сделать эту работу?
Ссылка в демо-версии на реальном сайте!
Если вам нужна скрипка, я могу обновить вопрос.
Как отмечали другие, вы не должны привязывать обработчики событий при каждом изменении. Этого должно быть достаточно:
$('.menu-361').hover(hoverInOut);
$('#dropbutton').click(function() {
$('.menu-361 ul').toggle();
$('#dropbutton p').toggle();
});
function hoverInOut(event) {
var windowSize = $(window).width();
if (windowSize > 450) {
if(event.type == "mouseenter")
$('.menu-361 ul').show();
else
$('.menu-361 ul').hide();
}
}
#dropbutton
может выйти из синхронизации, если открыть меню, изменить размер экрана и затем .menu-361
. Изменение размера окна вниз приведет к неправильному состоянию кнопки. Я считал, что это небольшая проблема, поэтому я не обработал сброс кнопки в hoverInOut()
Ну для начала, ваш код по существу, if A, else if not A, else
это лишнее. Просто, if A, else
все в порядке.
В остальном вы добавляете новый обработчик событий за каждый раз, когда ваш код работает. Это много обработчиков событий! Вы также никогда не отсоединяете своих обработчиков, вместо этого пытаетесь повторно добавить пустые.
Найдите минутку, чтобы узнать, как работают обработчики событий ^ _ ^
function changeDrop() {
var windowSize = $(window).width();
if (windowSize > 450) {
$('.menu-361').hover(
function() {
$('.menu-361 ul').show();
},
function() {
$('.menu-361 ul').hide();
});
console.log("screen width is greater than 450px");
}
else {
$('.menu-361').unbind('mouseenter mouseleave');
$('#dropbutton').click(function() {
$('.menu-361 ul').toggle();
$('#dropbutton p').toggle();
});
console.log("screen width is less than 450px");
}
}
changeDrop();
$(window).resize(changeDrop);
Я думаю, что я исправил проблему с добавлением unbind ("mouseenter mouseleave"), когда ширина меньше 450 пикселей, удалив функцию привязанного привязки.
Так ли это должно быть сделано?
changeDrop()
для изменения размера окна, вам нужно отменить привязку предыдущих обработчиков или лучше установить обработчик за пределами любого другого обработчика (кроме, возможно, готового) и фильтровать ширину вдовы внутри него. Кстати, ваше последнее заявление еще никогда не может быть достигнуто здесь