Почему у меня не работает анимация scrollTo?

0

Я пытаюсь активировать кусок javascript, когда экран меньше определенной ширины страницы. Для этого я добавил немного медиа-запросов в скрипт:

 <script>
    var jmediaquery = window.matchMedia( "(max-width: 580px)" );
       if (jmediaquery.matches) {
       $("#navigation a").click(function() {
           var navigationId = $(this).attr("href");
           $("html, body").animate({scrollTop: $(navigationId).offset().top -60},"slow");
           return false;
       });
    }
</script>

Однако, когда я запускаю его, ни анимация не работает, ни медиазапись не работают. Почему это?

EDIT: JSFiddle

Чтобы развернуть "не работает", конечная цель состоит в том, чтобы функция scrollTo работала только тогда, когда размер экрана меньше указанной ширины. Если выше указанной ширины функция не применяется. Мой код выше, кажется, отключает анимацию и работает независимо от размера экрана.

EDIT 2: Добавлено ("html, body") как было предложено A.Wolf.

  • 0
    Возможно, ваш jmediaquery.matches пустой или нулевой. Можете ли вы создать демо на jsfiddle.net?
  • 0
    Также я бы определенно добавил console.log() чтобы проверить, каково это начальное значение смещения.
Показать ещё 6 комментариев
Теги:
media-queries

3 ответа

4

Закройте его в document.ready(). Возможно, элемент управления еще не загружен.

В качестве альтернативы вы можете попробовать что-то вроде этого:

$(document).ready(function () {
// scroll to error if present
if ($('div.error').length > 0) $("html, body").animate({ scrollTop: $(document).height() }, "fast");
});

EDIT: Я забыл добавить, что приведенный выше код предполагает, что сообщение об ошибке находится в нижней части страницы.

  • 0
    лол, хорошее предложение
0

Это сочетание всех ответов и предложений, которые решили мою проблему. Обратите внимание, что внизу находится страница внизу, </body>

<script type="text/javascript">
          $("#navigation a").click(function() {
       var jmediaquery = window.matchMedia( "(max-width: 480px)" );
       if (jmediaquery.matches) {
           var navigationId = $(this).attr("href");
           $("html, body").animate({scrollTop: $(navigationId).offset().top - 20},"slow");
           return false;
       } else {
           return false;
       }
   });
</script>
0

может захотеть запустить этот код, когда страница будет загружена.

$(function(){
      /*
        your code here
      */
});

Ещё вопросы

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