jQuery проблема изменения размера

0

Я делаю простую анимацию, если width is > 800px экрана width is > 800px 800 width is > 800px и ничего не делать (просто оставайтесь со значением по умолчанию css), если оно <800, проблемы:

  1. с шириной окна> 800: обновляю страницу, если она не делает анимацию, если я не изменю размер, чтобы вызвать функцию изменения размера.

  2. с окном <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>&#8595;<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>
  • 0
    опубликовать свой HTML, а также пожалуйста
  • 0
    Если вам не требуется поддержка старых браузеров, я рекомендую использовать CSS 3 Media Queries and Transitions. Но ваше решение не работает так, как вы ожидаете, потому что $(window).resize срабатывает только при изменении размера окна. Поэтому, когда вы обновляете страницу, вы больше не видите анимацию. Кроме того, метод анимации jQuery, если я правильно помню, использует встроенные стили (например, <foo style="width: 300px;">...</foo> для изменения размера элементов).
Теги:
resize
animation

3 ответа

0

Если ваша страница запущена с> 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);
              });
          }
  })
  • 0
    Что-то должно быть не так. я только что реализовал unbind на 'else', и он ничего не делает, не знаю почему
  • 0
    добавлена ссылка JSFiddle для реализации
Показать ещё 10 комментариев
0

FIDDLE

$(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);
}

Я рекомендую вам взглянуть на этот вопрос, чтобы эффективно обрабатывать события изменения размера.

  • 0
    Почему необходимо разделить этот код на отдельный метод, а затем вызвать событие resize ? Я не нахожу разницы.
  • 0
    @Praveen, потому что он хочет вызывать одну и ту же функцию более одного раза .. один раз при загрузке страницы, а затем при каждом последующем событии изменения размера.
Показать ещё 10 комментариев
0

Во-первых: для запуска события изменения размера просто вызывается изменение размера после настройки обработчика:

Во-вторых: чтобы остановить анимацию, когда экран меньше, удалите обработчики событий, используя метод 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();
});
  • 0
    Вы можете опубликовать свою идею, используя мой код, пожалуйста?
  • 0
    Как только я доберусь до ПК. Я сейчас на своем мобильном, и не очень удобно отправлять код отсюда ;-)
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню