代码之家  ›  专栏  ›  技术社区  ›  Sam JvdBerg

Fancybox关闭现有弹出窗口

  •  0
  • Sam JvdBerg  · 技术社区  · 6 年前

    Fancybox 3 显示3个项目。它们都使用gallery属性链接在一起,如下所示:

    <!-- 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 回复  |  直到 6 年前
        1
  •  1
  •   Janis    6 年前

    你的代码片段工作正常- https://codepen.io/anon/pen/oPEXQj?editors=1010

    closeExisting 选项从v3.4.0开始提供

    顺便说一句,你应该 data-src="signup" 具有 data-src="#signup" 加载内联内容

        2
  •  1
  •   Menelaos    6 年前

    碱性溶液

    解决问题的方法是:

    <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>
    

    参考文献: close fancy box from function from within open '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>