Я делаю простую анимацию, если width is > 800px
экрана width is > 800px
800 width is > 800px
и ничего не делать (просто оставайтесь со значением по умолчанию css), если оно <800, проблемы:
с шириной окна> 800: обновляю страницу, если она не делает анимацию, если я не изменю размер, чтобы вызвать функцию изменения размера.
с окном <800: если бы я сделал анимацию (> 800 пикселей), а затем изменил размер до <800, анимация по-прежнему продолжается, а не только уважает css и ничего больше. Какие-нибудь советы?
JS:
$(document).ready(function () {
$(window).resize(function () {
if ($(window).width() > 800) {
$('#upBar, nav').hover(function () {
$('#upBar, nav ul').stop(true).animate({
height: '60px'
}, 200);
});
$('#upBar, nav').mouseleave(function () {
$('#upBar, nav ul').stop(true).animate({
height: '45px'
}, 200);
});
} else {}
})
})
HTML:
<html lang="en" />
<head>
<meta charset="UTF-8">
<title>Intertrafego - Quem Somos</title>
<link rel="stylesheet" href="css/navBar.css">
<link rel="stylesheet" href="css/footer.css">
<link rel="stylesheet" href="css/stylesAboutUs.css">
<meta name="viewport" content="width=width-device, initial-scale=1.0" />
</head>
<body data-stellar-background-ratio="0.2">
<div id="upBar"></div>
<div id="middleBar"></div>
<div id="middleImg"></div>
<div id="missValBar"></div>
<div id="wrapper">
<header>
<nav> <a href="index.html"><img id="logo" src="imgs/logo.png"></a>
<a href="quem_somos.html"><div id="langMobile">EN<br>↓<br>Pt</div></a>
<div id="btnMobile">
<img src="imgs/mobileBtn.jpg">
</div>
<ul>
<li id="lang"><a id="PT" href="quem_somos.html">PT</a> / <a id="EN" href="#">EN</a>
</li> <a href="news.html"><li>News</li></a>
<a href="logistics.html"><li>Logistics</li></a>
<a href="services.html"><li>Services</li></a>
<a href="#"><li>About Us</li></a>
</ul>
</nav>
</header>
Если ваша страница запущена с> 800, события привязаны и не отключаются. вы должны добавить инструкцию unbinds в else. вот как выглядит JSFiddle:
else {
$('#upBar, nav').unbind("hover");
$('#upBar, nav').unbind("mouseleave");
}
вам также нужно запустить код на готовом документе
$(document).ready(function () {
if ($(window).width() > 800) {
$('#upBar, nav').hover(function () {
$('#upBar, nav ul').stop(true).animate({
height: '60px'
}, 200);
});
$('#upBar, nav').mouseleave(function () {
$('#upBar, nav ul').stop(true).animate({
height: '45px'
}, 200);
});
}
})
$(document).ready(function () {
doAnnimation();
$(window).resize(function () {
$('#upBar').off('mouseenter mouseleave', annimateNav);
doAnnimation();
});
});
function doAnnimation() {
if ($(window).width() > 800) {
$('#upBar').on('mouseenter mouseleave', annimateNav);
}
}
function annimateNav() {
var height = '60px';
if( $('#upBar').hasClass('animating') ) {
height = '45px';
}
$('#upBar').toggleClass('animating').stop(true).animate({
height: height
}, 200);
}
Я рекомендую вам взглянуть на этот вопрос, чтобы эффективно обрабатывать события изменения размера.
resize
? Я не нахожу разницы.
Во-первых: для запуска события изменения размера просто вызывается изменение размера после настройки обработчика:
Во-вторых: чтобы остановить анимацию, когда экран меньше, удалите обработчики событий, используя метод jQuery .off, вызываемый в обработчике изменения размера.
Весь код будет выглядеть примерно так:
$(document).ready(function () {
var hoverHandler = function() {
$('#upBar, nav ul').stop(true).animate({
height: '60px'
}, 200);
};
var mouseleaveHandler = function() {
$('#upBar, nav ul').stop(true).animate({
height: '45px'
}, 200);
};
var handlersAdded = false; // this prevents from multiple event binds
$(window).resize(function () {
var $hoverTarget = $('#upBar, nav');
if ($(window).width() > 800) {
if(!handlersAdded) {
$hoverTarget.hover(hoverHandler)
.mouseleave(mouseleaveHandler);
handlersAdded = true;
}
} else {
$hoverTarget.off('hover', hoverHandler)
.off('mouseleave', mouseleaveHandler);
$('#upBar, ul nav').stop(true).removeAttr('style');
handlersAdded = false;
}
}).resize();
});
$(window).resize
срабатывает только при изменении размера окна. Поэтому, когда вы обновляете страницу, вы больше не видите анимацию. Кроме того, метод анимации jQuery, если я правильно помню, использует встроенные стили (например,<foo style="width: 300px;">...</foo>
для изменения размера элементов).