мобільний chrome fires змінює розмір події на прокрутці -


79

Я використовую мобільний браузер chrome на galaxy s4, android 4.2.2, і чомусь кожного разу, коли я прокручую сторінку вниз, він запускає подію зміни розміру, підтверджену масштабуванням зображень із слайд-шоу jquery.cycle2.

Будь-яка ідея, чому це може відбуватися?


1
Врешті-решт це була проблема із подією зміни розміру, але оскільки для моєї висоти елемента було встановлено 100% області перегляду, вона перераховувалася під час прокрутки.
KobeBryant

Відповіді:


48

Просто для цікавості, я намагався відтворити його, і якщо я правильно, це викликано навігаційною хромованою панеллю.

Коли ви прокручуєте вниз і chrome приховує панель навігації браузера, він створює розмір вікна, але це правильно, оскільки після цього ми маємо більший розмір вікна через вільний простір, який залишилася панель навігації браузера.

Пов’язана стаття: https://developers.google.com/web/updates/2016/12/url-bar-resizing


3
Незалежно від того, чи це задумана поведінка, чи ні, ми не хочемо, щоб вона запускала функцію зміни розміру. Отже, яке рішення тут, не рухаючись шляхом затяжного коду, який пропонують інші відповіді?
Studocwho,

До моєї відповіді я додав посилання, що містить більше інформації про те, як боротися з цією поведінкою в Chrome для мобільних пристроїв.
AlbertoFdzM

Найпростіший підхід - порівняти висоту та ширину після того, як прослуховувач вашого вікна перегляду запустився. Якщо змінилася лише висота, то, швидше за все, панель інструментів власного браузера впливає на висоту області перегляду. Якщо є випадок, що користувач впливає на розміри вікна перегляду лише за висотою, тоді ви можете пройти далі та проаналізувати відстань та час, щоб визначити, чи це вхід користувача або вхід системи, який змінює область перегляду.
MarsAndBack

72

Це звучить дивно, але я бачив це в інших браузерах. Ви можете обійти це так.

var width = $(window).width(), height = $(window).height();

тоді у вашому обробнику подій зміни розміру ви можете це зробити.

if($(window).width() != width || $(window).height() != height){
  //Do something
}

Я не знаю сферу ваших функцій і все таке, але вам слід зрозуміти суть цього.


5
Врятував мій день! Мені потрібно лише перевірити ширину
Юрій Кварцяний

14
Проблема викликана тим, що смуга прокрутки приховується або відображається, внаслідок чого змінюється висота екрана, отже, викликаючи $(window).resize(). Я запропонував редагування.
Сандер Коедуд,

3
Просто хотів додати, що ми також спостерігали подібну поведінку з iOS Safari.
Kris Krause

4
оскільки саме висота змінює умову if, слід перевіряти лише зміну ширини. Також умова не запускається, поки не зміниться ширина та висота. що трапляється не завжди, але майже всі зміни розміру екрану передбачають зміну ширини, тому я пропоную не використовувати висоту. if($(window).width() != width){ }
Імран Буджо

7
це повинно бути || замість &&
Maysam Torabi

5

Не знаю, все ще цікаво, але моє рішення:)

var document_width, document_height;

$(document).ready(function()
{
	document_width=$(document).width(); document_height=$(document).height();
    // Do something
}

$(window).resize(function()
{
    if(document_width!=$(document).width() || document_height!=$(document).height()) 
    {
        document_width=$(document).width(); document_height=$(document).height();
        // Do something
    }
}	


2
Я думаю, вам слід використовувати $ (window) .height (), не $ (document) .height (), а width.
Тарек Ель-Малла

1

На запитання вже було дано відповідь, але оскільки це питання не порушує питання адаптивних сайтів, я хотів би додати деяку інформацію щодо цього.

Я зіткнувся з цією проблемою в Chrome на Android під час розробки адаптивного веб-сайту. При зміні розміру вікна я хочу приховати меню (через деякі елементи дизайну, які потребують належного позиціонування), але Chrome для поведінки Android для активації події зміни розміру на прокрутці зробив це дещо складним ..

Переключення на початок використання onOrientationChange було неможливим, оскільки це адаптивний веб-сайт, настільний ПК не змінює орієнтацію, але мені все одно потрібен код для роботи як на звичайному ПК: планшетах, так і на смартфонах.

Я міг би почати нюхати браузер і таке інше, але поки що мені вдалося цього уникнути ..

Я намагався реалізувати рішення, запропоноване CWitty, але оскільки прокрутка вгору або вниз фактично викликає зміну висоти, яка теж не спрацювала.

У підсумку я додав умову, яка приховує меню лише при зміні ширини, а не при зміні висоти. У моєму випадку це працює, оскільки мені потрібно переписати меню лише при зміні ширини.


1
моя пропозиція полягала б у тому, щоб опустити перевірку висоти та перевірити лише ширину.
bertie

Прийнята відповідь все ще застосовується; Ви повинні продовжувати логіку відповідно до своїх потреб. Зрештою, ви самі це виявили, і це має бути лише коментарем під прийняту відповідь.
MarsAndBack

1

Браузери в мобільних пристроях часто приховують свою горизонтальну верхню панель навігації, коли хтось прокручує вниз, і показують її знову при прокручуванні вгору. Ця поведінка впливає на розмір клієнта, запускаючи подію зміни розміру. Вам просто потрібно контролювати невиконання коду через зміну висоти або, принаймні, через цю зміну висоти.


0

Це копія події зміни розміру Javascript на мобільному пристрої для прокрутки

Щоб виправити це, використовуйте onOrientationChange та властивість window.orientation. Дивіться відповідну відповідь: тут


Невірно. Це питання стосується події зміни розміру, яка несподівано запускається у мобільному браузері.
користувач2867288

5
Насправді це не обов'язково неправильно. використання onOrientationChange є законним обхідним шляхом, оскільки на мобільному пристрої саме тоді ви, найімовірніше, побачите, як екран зменшує розмір події. Ця відповідь чудова. Я не голосую за це просто тому, що є інший випадок, який цього не зачепить - і саме тоді хроми браузера з’являються / зникають, викликаючи події зміни розміру (що є моєю проблемою в банкоматі). Інакше це було б чудовим рішенням.
dudewad

Припустимо, вам слід ловити події зміни розміру для коригування елементів на екрані; ви відкриваєте свої інструменти розробника, і все працює нормально із зміною розміру вікна, ви навіть можете прокручувати вгору-вниз! Тепер ви вирішили відкрити сторінку на планшеті, прокрутити вгору-вниз і все переналаштовується, даючи землетруси на екрані! Вам все одно потрібно обробляти події зміни розміру вікна, хоча на вашому ПК! Отже, це не правильна відповідь!
centurian

Я використовував window.resize для відстеження зміни орієнтації. Таким чином стикаючись з цим питанням. Це чудова ідея.
AMNBandara

У відповіді чи навіть у зв’язаній відповіді немає належного зразка коду, а зовнішні посилання мертві. У будь-якому випадку, питання OP стосується базової прокрутки, без зміни орієнтації, де ініціюється подія зміни розміру незалежно від орієнтації. Проста перевірка на зміну висоти є найбільш ефективною універсальною справою. onOrientationChangeкорисний деінде ..
MarsAndBack

0

Виявляється, є багато речей, які можуть запускатися resizeв різних мобільних браузерах.

Я знаю, що не ідеально посилатися на зовнішній ресурс, але QuirksMode має читабельну таблицю, яку я не хочу дублювати (або підтримувати) тут: http://www.quirksmode.org/dom/events/resize_mobile.html

Тільки для наведення прикладу, того, який нас дістав: очевидно, у багатьох браузерах відкриття програмної клавіатури запускає подію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.