Fancybox закрыть существующее всплывающее окно - PullRequest
0 голосов
/ 10 сентября 2018

Я использую Fancybox 3 , чтобы отобразить 3 элемента.Все они связаны друг с другом с помощью атрибута галереи, например:

<!-- Item 1 -->
<a data-fancybox="gallery" data-src="#gallery-1" href="javascript:;">
  Open Me
</a>

<div style="display: none;" id="gallery-1">
  <h2>Gallery 1</h2>
  <p>Content</p>
  <a data-fancybox data-src="signup" href="javascript:;">
</div>

<!-- Item 2 -->
<a data-fancybox="gallery" data-src="#gallery-2" href="javascript:;">
  Open Me
</a>

<div style="display: none;" id="gallery-2">
  <h2>Gallery 2</h2>
  <p>Content</p>
  <a data-fancybox data-src="signup" href="javascript:;">
</div>

<!-- Item 3 -->
<a data-fancybox="gallery" data-src="#gallery-3" href="javascript:;">
  Open Me
</a>

<div style="display: none;" id="gallery-3">
  <h2>Gallery 3</h2>
  <p>Content</p>
  <a data-fancybox data-src="#signup" href="javascript:;">
</div>

<!-- Signup -->
<div style="display: none;" id="signup">
  <h2>Signup</h2>
  <p>Sign up form goes here</h2>
</div>

Внутри каждого элемента есть ссылка для регистрации, которая ссылается на отдельное всплывающее окно.При нажатии открывается еще одно окно fancybox в уже открытом элементе галереи.Как закрыть предыдущий экземпляр перед запуском другого?Я бы предпочел, чтобы они не гнездились.

Я пробовал это в моем JS, но это не работает:

( function( $ ) {
    $('[data-fancybox]').fancybox({
        closeExisting: true,
        loop: true
    });
} )( jQuery )

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Базовое решение

Решение вашей проблемы заключается в следующем:

<div style="display: none;" id="gallery-1">
  <h2>Title 1 - Make this screen much bigger ****************************</h2>
  <p>  <a data-fancybox data-src="#signup" onclick='$.fancybox.close()' href='#'">Sign me up</a></p>
</div>

Ссылка: закрытие окна фантазии из функции из открытого 'fancybox'

Рабочий пример:

https://jsfiddle.net/euo4byj2/15/

Рабочий код:

<script src="//code.jquery.com/jquery-3.3.1.min.js"></script>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.4.1/jquery.fancybox.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.4.1/jquery.fancybox.min.js"></script>


<div style="display: none;" id="signup">
  <h2>SIGN UP 1</h2>
  <p>Content</p> 
</div>



<!-- Item 1 -->
<a data-fancybox="gallery" data-src="#gallery-1" href="javascript:;">
  Open Me
</a>

<div style="display: none;" id="gallery-1">
  <h2>Title 1 - Make this screen much bigger ****************************</h2>
  <p>  <a data-fancybox data-src="#signup" onclick='$.fancybox.close()' href='#'">Sign me up</a></p>
</div>

<!-- Item 2 -->
<a data-fancybox="gallery" data-src="#gallery-2" href="javascript:;">
  Open Me
</a>

<div style="display: none;" id="gallery-2">
  <h2>Title 2</h2>
  <p>Content</p>
  <a data-fancybox data-src="signup" href="javascript:;">
</div>

<!-- Item 3 -->
<a data-fancybox="gallery" data-src="#gallery-3" href="javascript:;">
  Open Me
</a>

<div style="display: none;" id="gallery-3">
  <h2>Title 3</h2>
  <p>Content</p>
  <a data-fancybox data-src="signup" href="javascript:;">
</div>

<!-- Signup -->
<div style="display: none;" id="signup">
  <h2>Signup</h2>
  <p>Sign up form goes here</h2>
</div>


<script>

/* ( function( $ ) {
    $('[data-fancybox]').fancybox({
        closeExisting: true,
        loop: true
    });
} )( jQuery );
 */

</script>
0 голосов
/ 10 сентября 2018

Ваш фрагмент работает нормально - https://codepen.io/anon/pen/oPEXQj?editors=1010

Просто убедитесь, что вы используете последнюю версию, потому что опция closeExisting доступна начиная с v3.4.0

кстати, вам следуетзамените data-src="signup" на data-src="#signup" для загрузки встроенного содержимого

...