2015-11-06 43 views
-1

所以我用这个代码: http://jsfiddle.net/xSmNs/如何让这个jquery弹出函数可重用?

$(document).ready(function() { 

     $('#lightbox_button').click(function() { 
      $('#lightbox').fadeIn('slow'); 
      $('#lightbox_panel').fadeIn('slow'); 
     }); 

     $('#close_lightbox').click(function() { 
      $('#lightbox').fadeOut('slow'); 
      $('#lightbox_panel').fadeOut('slow'); 
     }); 

    }); 

要上的链接的点击弹出窗口。我想要多个链接输出不同的div。我只是做了这个代码的多个实例(改变ID,以便按钮打开它们相应的div),但我想知道是否有更有效的方法使用此代码

+3

如果你已经多个弹出窗口使用他们共同的阶级和绑定的类的事件。还使用'data- *'属性来存储相关信息。检查[Demo](http://jsfiddle.net/tusharj/xSmNs/23/) – Tushar

+1

你真的在使用jQuery 1.4.4吗?这已经过了将近6年了! –

回答

0

您可以使用$ .fn.lightbox作为函数本身并将其应用于DOM对象。

http://jsfiddle.net/7rfpwctm/2/

$(document).ready(function() { 
 

 
    $.fn.lightbox = function(){ 
 
     $(this).click(function() { 
 
     $('#lightbox').fadeIn('slow'); 
 
     $('#lightbox_panel').fadeIn('slow'); 
 
    }); 
 

 
    $('#close_lightbox').click(function() { 
 
     $('#lightbox').fadeOut('slow'); 
 
     $('#lightbox_panel').fadeOut('slow'); 
 
    }); 
 
     
 
    }; 
 

 
    
 
    $('#lightbox_button').lightbox(); 
 
    $('#another_lightbox_button').lightbox(); 
 

 
     
 
});
#lightbox_panel 
 
{ 
 
    position: relative; 
 
    z-index: 99; 
 
    width: 500px; 
 
    height: 100px; 
 
    margin: 30px auto 0; 
 
    background-color: #CCC; 
 
    display: none; 
 
    padding: 10px; 
 
} 
 

 
#lightbox 
 
{ 
 
    z-index: 90; 
 
    position: absolute; 
 
    background-color: #000; 
 
    opacity: 0.8; 
 
    filter: alpha(opacity=80); 
 
    width: 100%; 
 
    height: 100%; 
 
    display: none; 
 
    top: 0; 
 
} 
 

 

 

 
#close_lightbox 
 
{ 
 
    
 
} 
 
#lightbox_button{ 
 
    position:absolute; 
 
    left:0; 
 
    top:100%; 
 
    width:200px; 
 
} 
 

 
#another_lightbox_button{ 
 
    position:absolute; 
 
    right:0; 
 
    top:100%; 
 
    width:400px; 
 
} 
 

 
.button 
 
{ 
 
    position: absolute; 
 
    text-decoration: none; 
 
    padding: 2px 10px; 
 
    border: 1px solid #000; 
 
    display: inline-block; 
 
    bottom: 10px; 
 
    left: 50%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="wrapper"> 
 
    
 
    
 
    
 
    <a href="#" id="lightbox_button"> 
 
     <div class="button">button</div> 
 
    </a> 
 
     
 
     <a href="#" id="another_lightbox_button"> 
 
     <div class="button">another button</div> 
 
    </a> 
 
     
 
    
 
    <div id="lightbox_panel"> 
 
     
 
     <h1>lightbox panel</h1> 
 
    
 
     <a href="#" id="close_lightbox"> 
 
      <div class="button">close</div> 
 
     </a> 
 
    
 
    </div> 
 
    
 
</div> 
 

 
<div id="lightbox"></div>

像这样帮助?

0

给灯箱按钮2个数据属性,这些数据属性指向在点击时需要弹出的div。对所有灯箱按钮也使用普通的类。

<a href="#" class="lightbox_button" data-box="#lightbox" data-panel="#lightbox_panel"> 
     <div class="button" >button</div> 
    </a> 

然后你就可以重新使用的代码一样,

$('.lightbox_button').click(function() { 
    $($(this).data("box")).fadeIn("slow"); 
    $($(this).data("panel")).fadeIn("slow"); 
}); 

Fiddle

0

您可以使用此功能:

function doModal(boxid,show) { 
    if (show) { 
     $('#'+boxid).fadeIn('slow'); 
     $('#'+boxid+'_panel').fadeIn('slow'); 
    } else { 
     $('#'+boxid).fadeOut('slow'); 
     $('#'+boxid+'_panel').fadeOut('slow'); 
    } 
} 

,然后在你的按钮或链接:

<span onclick="doModal('Box1',true)">Open Box 1</span> 
<span onclick="doModal('Box2',true)">Open Box 2</span> 

为了闭合箱:

<span onclick="doModal('Box1',false)">Close Box 1</span> 
<span onclick="doModal('Box2',false)">Close Box 2</span>