2014-10-14 2 views
1

У меня есть очень простой код:IOS 8 глюка осуществления Изменить размер окно

$(function() { 
    $(window).resize(function() { 
     if ($(window).width() < 500) { 
      $("#foo").show(); $("#foo2").hide(); 
     } else if ($(window).width() > 501) { 
      $("#foo2").show(); $("#foo").hide(); 
     } 
    }).resize(); 
}); 

Все работает отлично на рабочем столе (все основные браузеры) и мобильный (как многие, как я могу проверить), до 8 прошивки вышел. Теперь, когда пользователи прокручиваются в Safari, javascript возвращается к «else if», создавая «foo2» и скрывая «foo», несмотря на то, что браузер не изменяет размер. Это для меню, так что меню закрывается, если пользователь прокручивает, что не должно происходить.

Если я удаляю функцию изменения размера окна, все работает так, как должно, однако меню не обновляется в реальном времени, если пользователь изменяет размер окна браузера.

Есть ли альтернатива изменению размера окна, которую я могу использовать для достижения такого же эффекта?

+0

какая точка останова 500px? – scooterlord

+0

Ширина необходима для конкретного требования клиента. В любом случае вы можете считать его переменной X. Это происходит в нескольких точках разрыва. – Dan382

ответ

1

... так, учитывая, что я получаю проблему, как вы описали, вы можете избежать яваскрипт и сделать это с помощью чистого CSS и медиа-запросы:

@media (max-width:500px) { 
    #foo { 
    display:block; 
    } 
    #foo2 { 
    display:none; 
    } 
} 
@media (min-width:501px) { 
    #foo2 { 
    display:block; 
    } 
    #foo { 
    display:none; 
    } 
} 

редактировать: ..выполняется, безусловно, есть не имеет ничего общего с прокруткой и, безусловно, будет быстрее и чище.

+0

Да, это действительно так, но мой код упрощен для демонстрации этой проблемы. В этом случае были развернуты другие причины. Просто щелкнули, что при просмотре пользователями в iOS 8 появляется всплывающее окно со дна сафари (страница закладок/ссылка на отправку и т. Д.), А поле URL в верхней части меняет форму. Это должно вызывать функцию изменения размера окна, создавая странное поведение. Итак, теперь мне нужно только знать, как использовать функцию изменения размера окна, которая смотрит только на ось x. – Dan382

+1

Хм, вы пробовали использовать тег meta viewport, чтобы узнать, не имеет значения? Я работаю и теперь не имею доступа к своим устройствам ios, но попробуйте это и посмотрите, все еще запущено изменение размера: scooterlord

+0

Хорошая идея, но, к сожалению, она не работала ... или по крайней мере не лучше, чем ', который я уже использовал. – Dan382

0

Это может быть немного запоздалым, но я бы сохранил ширину окна при загрузке, а затем проверил против этого на размер, чтобы обеспечить фактическое изменение размера горизонтально. Это обеспечило бы, чтобы код запускался только при изменении размера браузера по оси x.

var windowWidth = $(window).width(); 
$(window).resize(function(){ 
    if (windowWidth !== $(window).width()) 
    { 
     windowWidth = $(window).width(); 
     // rest of your code goes here 
    } 
}); 

Помните, что событие изменения размера может стрелять довольно много, а кто-то изменение размера, так что вы можете ограничить все это с помощью setInterval, но это отдельный разговор.