Я пытаюсь активировать кусок 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.
Закройте его в document.ready()
. Возможно, элемент управления еще не загружен.
В качестве альтернативы вы можете попробовать что-то вроде этого:
$(document).ready(function () {
// scroll to error if present
if ($('div.error').length > 0) $("html, body").animate({ scrollTop: $(document).height() }, "fast");
});
EDIT: Я забыл добавить, что приведенный выше код предполагает, что сообщение об ошибке находится в нижней части страницы.
Это сочетание всех ответов и предложений, которые решили мою проблему. Обратите внимание, что внизу находится страница внизу, </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>
может захотеть запустить этот код, когда страница будет загружена.
$(function(){
/*
your code here
*/
});
console.log()
чтобы проверить, каково это начальное значение смещения.