2016-06-16 18 views
0

Ich versuche, Dmitry Semenovs PhotoSwipe() mit dem Ajax Type seines Magnific Popup (link) zu kombinieren. Genauer gesagt, habe ich einen Link auf meine index.html Datei. Wenn Sie darauf klicken, wird ein Ajax Type Magnific Popup angezeigt, das den Inhalt von other.html anzeigt. In diesem Popup (d. H. Innerhalb der Datei other.html) befindet sich eine PhotoSwipe-Galerie von Bildern. Wenn ich auf die Bilder klicke, wird die PhotoSwipe-Galerie wie erwartet angezeigt und es funktioniert einwandfrei. Wenn ich jedoch auf die Schaltfläche zum Schließen (das Symbol "x") klicke oder die ESC-Taste drücke, werden sowohl PhotoSwipe als auch Magnific Popup geschlossen. Wie kann ich dieses Verhalten ändern, sodass nur das PhotoSwipe-Popup geschlossen wird? Gibt es eine Möglichkeit, das Magnific Popup zu "deaktivieren", während das PhotoSwipe-Popup angezeigt wird, sodass das Magnific Popup nicht auf Klicks oder das Drücken von Tasten reagiert, bis das PhotoSwipe geschlossen ist?Kombinieren PhotoSwipe mit Magnific Popup (Ajax Typ)

Ich habe nur ein sehr grundlegendes Wissen über JavaScript, also würde ich wirklich einen "Hand-Holding" -Ansatz für die Antwort schätzen.

Antwort

1

Ich habe etwas ähnliches mit der Kombination von Magnific und Colorbox getan. Magnific hat die Fähigkeit, einige Teile seines Codes zu überschreiben, ohne die Quelle zu ändern, wie documented in the FAQ. In meinem Fall sah es wie folgt aus:

// Prevent "Escape" from closing Magnific popup when Colorbox popup is open 
$.magnificPopup.instance.close = function() { 
    if ($("#colorbox").is(":visible")) { 
    // Don't do anything with Magnific if Colorbox is doing its thing 
    return false; 
    } else { 
    // Do what it would normally do 
    $.magnificPopup.proto.close.call(this); 
    } 
}; 

Sie würden Ihr if Test etwas PhotoSwipe spezifische haben ändern. Vielleicht würde das Ersetzen dieser Zeile mit if ($(".pswp--open").length > 0) { funktionieren. (Das JavaScript zählt (über jQuery) die Anzahl der Elemente mit der Klasse pswp--open, die zumindest aus der PhotoSwipe-Demo als Klasse angezeigt wird, die zum Markup hinzugefügt wird, wenn sie geöffnet wird.)

+0

Danke, das funktioniert tatsächlich! Dies hat mich jedoch dazu gebracht, ein weiteres Problem zu entdecken: Magnific fügt seiner "Schließen" -Schaltfläche in der oberen rechten Ecke des PhotoSwipe-Popup-Fensters hinzu und verhindert, dass ich auf die Schließen-Schaltfläche von PhotoSwipe klicken kann. Das führt mich zu der Frage: Gibt es eine Möglichkeit, alle Magnific-Funktionen zu deaktivieren, solange PhotoSwipe initiiert wurde? – Alarik

+1

Sie sollten in der Lage sein, die Platzierung des "x" entweder über die Option closeBtnInside in Magnific anzupassen (unsicher, ob es in PhotoSwipe etwas Ähnliches gibt) oder CSS für '.button.mfp-close' anzupassen. Eine andere Möglichkeit, wenn es in Ihrem Fall funktioniert, könnte sein, das Magnific-Popup zu schließen, wenn Sie PhotoSwipe öffnen, und es dann wieder zu öffnen, wenn das PhotoSwipe-Close-Ereignis aufgerufen wird. Jemand hat das in dieser Geige gemacht, außer mit zwei Instanzen von Magnific: https://jsfiddle.net/matthieuG/zt4coq8f/1/ –

+0

Ich habe versucht, das "x" loszuwerden, indem ich '$ ('. Mfp-close') hinzugefügt habe .css ('visibility', 'hidden'); 'zu dem Skript, das PhotoSwipe initiiert. Dies entfernt sowohl das "x" auf dem PhotoSwipe als auch das auf dem Magnific. Ich möchte die 'Sichtbarkeit' wieder auf' sichtbar' setzen, wenn PhotoSwipe geschlossen wird, aber ich kann es nicht zum Laufen bringen. Warum wird 'var el = document.getElementsByClassName ('mfp-close') nicht hinzugefügt? \t \t el.style.visibility = "visible"; 'um die' close' Funktion zu arbeiten? Gibt es eine Möglichkeit, dies auf diese Weise zu tun? – Alarik