【问题标题】:jquery next/previous button for lightbox用于灯箱的 jquery 下一个/上一个按钮
【发布时间】:2013-03-07 01:01:55
【问题描述】:

我是一个初学者,我正在尝试使用 jquery 制作一个灯箱网络画廊。 这是一个基本的图库,当您单击列表中的图像(缩略图)时,jquery 会显示隐藏的灯箱 div,这会使背景变暗并显示带有白色边框的当前图像(全尺寸),带有下一个/上一个和关闭边框上的按钮。 我的下一个/上一个按钮只能工作一次,我不知道如何修复它。 (我没有用 prev 按钮做任何事情,所以这显然根本不起作用。) 有任何想法吗?代码如下:

html

<ul class="gallery">
        <li> <a href="img/gallery/fullsize/full_foto001.jpg" class="lightbox_trigger"> <img src="img/gallery/thumbnail/thumbnail_foto001.jpg"> </a> </li>
        <li> <a href="img/gallery/fullsize/full_foto002.jpg" class="lightbox_trigger"> <img src="img/gallery/thumbnail/thumbnail_foto002.jpg"> </a> </li>
        <li> <a href="img/gallery/fullsize/full_foto003.jpg" class="lightbox_trigger"> <img src="img/gallery/thumbnail/thumbnail_foto003.jpg"> </a> </li>
        <li> <a href="img/gallery/fullsize/full_foto004.jpg" class="lightbox_trigger"> <img src="img/gallery/thumbnail/thumbnail_foto004.jpg"> </a> </li>
        <li> <a href="img/gallery/fullsize/full_foto005.jpg" class="lightbox_trigger"> <img src="img/gallery/thumbnail/thumbnail_foto005.jpg"> </a> </li>
        <li> <a href="img/gallery/fullsize/full_foto006.jpg" class="lightbox_trigger"> <img src="img/gallery/thumbnail/thumbnail_foto006.jpg"> </a> </li>
        <li> <a href="img/gallery/fullsize/full_foto007.jpg" class="lightbox_trigger"> <img src="img/gallery/thumbnail/thumbnail_foto007.jpg"> </a> </li>
        <li> <a href="img/gallery/fullsize/full_foto008.jpg" class="lightbox_trigger"> <img src="img/gallery/thumbnail/thumbnail_foto008.jpg"> </a> </li>
        <li> <a href="img/gallery/fullsize/full_foto009.jpg" class="lightbox_trigger"> <img src="img/gallery/thumbnail/thumbnail_foto009.jpg"> </a> </li>
    </ul>

<div id="lightbox">

<div id="gallery_content">

</div>

jquery

 $('.lightbox_trigger').click(function(e) {
    //prevent default action (hyperlink)
    e.preventDefault();

    $('#lightbox').show('slow');

    var image_href = $(this).attr("href");

    var image_href2 = $(this).parent().next('li').children('a').attr("href");


   $('#gallery_content').html('<img src="' + image_href + '" />' + 
   '<div id="gallery_close"> <img src="img/gallery/lightbox/close.png"/> </div>' + 
   '<div id="gallery_next"> <img src="img/gallery/lightbox/next.png"/> </div>'+
   '<div id="gallery_prev"> <img src="img/gallery/lightbox/previous.png"/> </div>');

   //next
   $(document).on('click', '#gallery_next', function(){
        $('#gallery_content').html('<img src="' + image_href2 + '" />' +
        '<div id="gallery_close"> <img src="img/gallery/lightbox/close.png"/> </div>' + 
        '<div id="gallery_next"> <img src="img/gallery/lightbox/next.png"/> </div>'+
        '<div id="gallery_prev"> <img src="img/gallery/lightbox/previous.png"/> </div>');

   });


   //previous
   $('#gallery_prev').click(function(){

   });
});

【问题讨论】:

  • 你应该尝试将你的函数设置为lightbox_trigger.click
  • 如果我这样做,它根本不起作用。一次也没有。

标签: jquery button image-gallery next


【解决方案1】:

我想通了。我不知道它有多“优雅”,但它确实有效。 这里是:

$(document).ready(function() {
 $('.lightbox_trigger').click(function(e) {
        //prevent default action (hyperlink)
        e.preventDefault();

        $('#lightbox').show('slow');

        $(this).attr('class','this');

        var image_href = $(this).attr("href");

        var image_href2 = $('.this').parent().next('li').children('a').attr("href");


       $('#gallery_content').html('<img src="' + image_href + '" />' + 
       '<div id="gallery_close"> <img src="img/gallery/lightbox/close.png"/> </div>' + 
       '<div id="gallery_next"> <img src="img/gallery/lightbox/next.png"/> </div>'+
       '<div id="gallery_prev"> <img src="img/gallery/lightbox/previous.png"/> </div>');



 });



  //next
  $(document).on('click', '#gallery_next', function(){
            var image_href2 = $('.this').parent().next('li').children('a').attr("href");
            $('#gallery_content').html('<img src="' + image_href2 + '" />' +
            '<div id="gallery_close"> <img src="img/gallery/lightbox/close.png"/> </div>' + 
            '<div id="gallery_next"> <img src="img/gallery/lightbox/next.png"/> </div>'+
            '<div id="gallery_prev"> <img src="img/gallery/lightbox/previous.png"/> </div>');

            $('.this').attr('class', 'remove');
            $('.this').removeAttr('class', 'this');
            $('.remove').parent().next('li').children('a').attr('class', 'this');
            $('.remove').removeAttr('class', 'remove');

  });


  //previous


 //hide 
 $(document).on("click", "#gallery_close", function(event){
        $('.lightbox_trigger').removeAttr('class', 'this');
        $('.lightbox_trigger').removeAttr('class', 'remove');

        $('#lightbox').hide();

 });



});

【讨论】:

    【解决方案2】:

    我会说类似

    $('.lightbox_trigger').click(function(e) {
        //prevent default action (hyperlink)
        e.preventDefault();
    
        $('#lightbox').show('slow');
    
        var image_href = $(this).attr("href");
    
        var image_href2 = $(this).parent().next('li').children('a').attr("href");
    
    
       $('#gallery_content').html('<img src="' + image_href + '" />' + 
       '<div id="gallery_close"> <img src="img/gallery/lightbox/close.png"/> </div>' + 
       '<div id="gallery_next"> <img src="img/gallery/lightbox/next.png"/> </div>'+
       '<div id="gallery_prev"> <img src="img/gallery/lightbox/previous.png"/> </div>');
    });
    //next
        $('#gallery_next').live('click', function(){
             $('#gallery_content').html('<img src="' + image_href2 + '" />' +
             '<div id="gallery_close"> <img src="img/gallery/lightbox/close.png"/> </div>' + 
             '<div id="gallery_next"> <img src="img/gallery/lightbox/next.png"/> </div>'+
             '<div id="gallery_prev"> <img src="img/gallery/lightbox/previous.png"/> </div>');
        });
    // prev
        $('#gallery_prev').live('click', function() { ... });
    

    【讨论】:

    • "live()" 自 jQuery 1.7 起已弃用,因此 @levi 使用 "on()"。
    • 那行不通。我知道问题是什么。 “this”选择器指的是您单击的缩略图。因此,如果您向其添加“下一个”,它将选择下一个。但这仅适用于一个,因为单击的缩略图的下一个是紧邻它的那个。所以之后就不行了。
    【解决方案3】:

    您检查过 javascript 错误控制台吗?如果触发了错误,脚本将停止执行,这就是为什么某些东西只触发一次的常见原因。此外,我只会替换图像的 src,而不是该 div 中的整个 html。

    【讨论】:

    • 您将如何更改 src?我想出了问题所在。 “this”选择器指的是您单击的缩略图。因此,如果您在其中添加“下一个”,它将选择下一个。但这只能工作一次,因为单击的缩略图的下一个是紧邻它的缩略图。所以之后就不行了。
    • 只改变src,你需要使用这个:$('#gallery_content').find('img').attr('src', image_href2);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多