Hallo, ich versuche, eine Funktion zum Ändern der Fenstergröße und zum Bereitstellen von Dokumenten auszuführen. Da die Größenänderung durch das mobile Scrollen ausgelöst wird, muss überprüft werden, ob sich die Höhe nicht geändert hat. Dieser Code funktioniert für die Größenänderung, jedoch nicht beim Laden. Kann jemand erklären, warum die Funktion nicht für Dokumente ausgeführt wird? Danke im Voraus.

    //CLOSE EXPANDED ELEMENTS FOR MOBILE

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


var callback = function () {



        if($(window).width() != width){

            if ($window.width() < 756) {
            $(".content_lower.collapse").removeClass('in');
          }
            else {
              $(".content_lower.collapse").addClass('in');
            }

        }

};

$(document).ready(callback);
$(window).resize(callback);
console.log(callback.toString());
1
Robaggs 19 Aug. 2015 im 13:31

3 Antworten

Beste Antwort

Wenn das Dokument fertig ist, wird das Dokument gerade geladen und die Variable $(window).width() entspricht der Variablen width.

Die Funktion callback wird also aufgerufen, während width = $(window).width(), sodass sie nicht in die if-Bedingung eingeht und innerhalb der Funktion nichts passiert.

Wenn Sie versuchen, etwas an der Konsole zu protokollieren oder eine Nachricht zu Beginn Ihrer Funktion zu warnen, werden Sie feststellen, dass sie ausgeführt wird:

var callback = function() {
  console.log("Callback entered !!!");

  if ($(window).width() != width) {
    if ($window.width() < 756) {
      $(".content_lower.collapse").removeClass('in');
    } else {
      $(".content_lower.collapse").addClass('in');
    }
  }
};

BEARBEITEN:

Wenn Sie es dennoch beim Laden von Dokumenten ausführen möchten, können Sie ein boolesches Flag hinzufügen, das mit false initialisiert wurde, und es auf true setzen, wenn die Fenstergröße einmal geändert wurde, und dann damit testen:

var $window = $(window);
var width = $(window).width();
var called = false;

var callback = function() {
  console.log("callback entered !!!");
  if ($(window).width() != width || !called) {

    if ($window.width() < 756) {
      $(".content_lower.collapse").removeClass('in');
    } else {
      $(".content_lower.collapse").addClass('in');
    }

  }
  called = true;
};

$(document).ready(callback);
$(window).resize(callback);
console.log(callback.toString());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="content_lower.collapse">the div</div>

BEARBEITEN 2:

Ein besserer Ansatz besteht darin, das boolesche Flag als Parameter der Funktion callback zu verwenden und es beim Laden des Dokuments mit false und beim Ändern der Fenstergröße mit true aufzurufen:

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

    var callback = function(resized) {

      if ($(window).width() != width || !resized) {
        if ($window.width() < 756) {
          $(".content_lower.collapse").removeClass('in');
        } else {
          $(".content_lower.collapse").addClass('in');
        }
      }
    };

    $(document).ready(callback(false));
    $(window).resize(callback(true));
1
cнŝdk 19 Aug. 2015 im 12:04

Dies ergab den gewünschten Effekt. Panzer für die Helfer.

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


var callback = function () {
  if ($window.width() < 756) {
  $(".content_lower.collapse").removeClass('in');
  }
  else {
    $(".content_lower.collapse").addClass('in');
  }
};

$(document).ready(callback);
$( window ).resize(function() {
  if($(window).width() != width){
    callback();
  }
});
1
Robaggs 19 Aug. 2015 im 11:31

Wenn das Dokument geladen wird, wird die Variable width auf Ihre Fensterbreite eingestellt (sagen wir 500px). Dann wird geprüft, ob die aktuelle Fensterbreite (also 500px) der width var (500 !== 500) entspricht. Dies gibt false zurück, sodass Ihr Code nicht ausgeführt wird. Sie können dies stattdessen tun:

var callback = function() {
  if ($(window).width() < 756) {
    $('body').text($(window).width() + " - if");
  } else {
    $('body').text($(window).width() + " - else");
  }
};

$(document).ready(callback);
$(window).resize(callback);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
0
Patrick2607 19 Aug. 2015 im 10:43