Мое решение для запуска JavaScript в то же самое время, что и медиа-запросы (даже несмотря на причуды устройства или браузера, как показано здесь), состоит в том, чтобы вызвать мою window.resize
логику в ответ на изменение, сделанное медиа-запросом.Вот пример:
CSS
#my-div
{
width: 100px;
}
@media all and (max-width: 966px)
{
#my-div
{
width: 255px;
}
}
JavaScript
var myDivWidth;
$(document).ready(function() {
myDivWidth = $('#myDiv').width();
$(window).resize(function () {
if ($('#myDiv').width() != myDivWidth) {
//If the media query has been triggered
myDivWidth = $('#myDiv').width();
//Your resize logic here (the jQuery menu stuff in your case)
}
});
});
В этом примере всякий раз, когда #myDiv
изменяя размер (что произойдет, когда медиазапрос будет запущен), ваша логика изменения размера jQuery также будет запущена.
Для простоты я использовал ширину элемента, но вы можете легко использовать любое изменяемое свойство, например:body
background.
Другое преимущество этого подхода состоит в том, что он поддерживает функцию window.resize
максимально легкой, что всегда хорошо, потому что она вызывается каждый раз, когда размер окна изменяется на один пиксель.(в любом случае, в большинстве современных браузеров).
Ошибка, с которой вы столкнулись, кажется, как вы сказали, специфической для браузера проблемой.Хотя интуитивно это кажется неверным, Firefox (и другие браузеры с этой проблемой) на самом деле, кажется, соответствуют рекомендации W3C для медиа-запросов более близко, чем браузеры Webkit.В рекомендации говорится, что ширина области просмотра включает в себя полосы прокрутки, а ширина окна JavaScript, по-видимому, не включает полосы прокрутки, что приводит к расхождению.