Подтвердить что ты не робот

Android Browser Triggers jQuery $(window).resize() при прокрутке

Недавно я столкнулся с чем-то довольно странным, я не уверен, может быть, я просто что-то пропустил, но не могу понять, почему это происходит.

У меня есть сайт, на котором работает следующий фрагмент jQuery:

$(window).resize(function(){
  alert("Resize fired!");
});

Когда я перехожу на сайт в браузере телефона Android и просто прокручиваю вверх и вниз по сайту, я вижу предупреждение.

Полосы прокрутки браузера Android (которые исчезают и исчезают) накладываются поверх всего сайта и, похоже, не изменяют размер окна, поэтому я предполагаю, что это событие не уволено ими.

Кто-нибудь знает, почему браузер Android запускает это событие при прокрутке?

Любая информация будет принята с благодарностью.

ИЗМЕНИТЬ:

Я попытался установить CSS для тела, установив overflow-y для прокрутки, чтобы увидеть, было ли это жизнеспособным решением, но событие все еще запущено при прокрутке на Android.

ИЗМЕНИТЬ № 2:

Я использую следующий метатег в своем HTML:

<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
4b9b3361

Ответ 1

У меня была такая же проблема, я решил проверить, действительно ли изменился размер окна, для этого мне нужно было сохранить ширину прошлого окна где-то в моем приложении. Код может быть примерно таким:

$(window).resize(function() {
  clearTimeout(app.resize.timer)
  app.resize.timer = setTimeout(function(){
     var window_changed = $(window).width() != app.size.window_width
     if(window_changed) console.log('Window size changed! resize site')
  }, 500)               
})

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

Ответ 2

У меня тоже такая же проблема!
проблема верна, потому что высота браузера в Android изменится, когда строка url скроется и покажется. Итак, мы должны сделать перезагрузку браузера, только когда размер ширины изменится.

я видел этот fooobar.com/questions/33786/..., покажите мне, как это сделать. И это jsfiddle.

      var doit;
      function resizedw(appwidth){
          var window_changed = $(window).width() != appwidth;
          if ($(window).width() != appwidth){
            ("body").append("did it"+appwidth+" ");
          }
          past_width = $(window).width();
      }

      var past_width = $(window).width();
      window.onresize = function() {
        clearTimeout(doit);
        doit = setTimeout(function() {
            resizedw(past_width);
        }, 100);
      };

Ответ 3

@john-mccollum верен в комментариях. Похоже, что исчезающий интерфейс браузера вызывает изменение высоты, которое вызывает событие изменения размера. Поэтому проверяйте изменение в ширине, особенно в вашей функции, если вы делаете отзывчивые элементы дизайна, где вы хотите проверить, была ли изменена ширина.

$(window).resize(function(){
    var w = $(window).width();
    if (typeof checkw == 'undefined') checkw = w;
    if (w!=checkw) {
        console.log("The width changed from "+checkw+" to "+w);

        // do your responsive magic!

        checkw = w;
    }
});

Не требуется выполнять эту работу, но это хорошо сочетается с методом "smartresize" Paul Irish/John Hann.