【问题标题】:Getting the next image and previous image from an gallery从图库中获取下一张图片和上一张图片
【发布时间】:2013-07-27 12:22:15
【问题描述】:

我正在尝试使用 html css jquery 编写我自己的图片库。我有一个模式窗口来显示点击的图像。在我的模态窗口中,我有一个上一个和下一个按钮。

我的问题是当有人单击该按钮时,我如何显示上一张或下一张图像。

这是我的jsFiddle

jquery 代码我用来显示点击的图像。

$(function(){
$('.gallery a').click(function(evt) {
    evt.preventDefault( );
    var imgPath = $(this).attr('href');
    $('.gallery-overlay').show()
    .find('.gallery-image').attr('src',imgPath);
    return false;
    });

});

【问题讨论】:

  • 下一个和上一个按钮在模态窗口中。要出现模式窗口,请单击第一张图片
  • 检查我的答案...!!

标签: javascript jquery


【解决方案1】:

将此添加到您的 jQuery 中。

在您的函数中声明一个变量当前图像,并将当前图像保存在该变量中。每当当前图像更改时更新变量。

Updated jsfiddle

点击图片中的第二张图片,然后查看上一张和下一张图片。

$('.gallery-control-previous').click(function(){
        var imgPath = current_img.prev().attr('href');
        current_img = current_img.prev();
        $('.gallery-overlay').show().find('.gallery-image').attr('src',imgPath);
});
$('.gallery-control-next').click(function(){
        var imgPath = current_img.next().attr('href');
        current_img = current_img.next();
        $('.gallery-overlay').show().find('.gallery-image').attr('src',imgPath);
});

如果您已经理解了这个答案,请在接下来显示的代码中添加检查,仅当它们存在时才会出现前一个元素。

你可以找到如何做到这一点,

here..

已更新。

获取下一行的第一个子元素,并传递它。

$('.gallery-control-next').click(function(){

        if(current_img.next().length){
            current_img = current_img.next();
        }else{
            current_img = current_img.parents(".row").next(".row").find("a:first");
        }
        var imgPath = current_img.attr('href');
        $('.gallery-overlay').show().find('.gallery-image').attr('src',imgPath);
    });

【讨论】:

  • 它存在某种错误。检查这个小提琴。我在所有链接中添加了图片链接。单击 3 次后,下一个按钮不起作用。 jsfiddle.net/TSc8E/12
  • @Shubendra 这就是我更新答案的原因。您需要检查下一个和上一个元素是否存在。 3次点击后,所有的图片都显示出来了,所以导致了这个bug。您会看到一排只有 3 张图片。
  • 点击三下后第一行的图片结束。它应该显示底行的图像
  • 检查我的答案...!!
  • @OptimusPrime 还有一个问题,有没有更好的方法来完成这一切?就像目前我将所有图像放在一个文件夹中并提供图像的 url。如果我将图像存储在数据库中并从数据库中检索图像会更好吗?我想要一个更好的技术,以便我的网页加载速度非常快
【解决方案2】:

我在每个标签中添加了img_no,以识别当前活动图像并获取下一张或上一张图像

Working Demo

$(function () {
    $('.gallery a').click(function (evt) {
        evt.preventDefault();
        var imgPath = $(this).attr('href');
        var img_no = $(this).attr('img_no');
        $('.gallery-overlay').show()
            .find('.gallery-image').attr('src', imgPath).attr('img_no', img_no);
        return false;
    });
});
i = 1;
$('.row a img').each(function () {
    $(this).attr('img_no', i);
    $(this).parents('a').attr('img_no', i);
    i++;
});
images_length = i - 1;
console.log(images_length);
$('.gallery-control-next').click(function () {
    var img_no = $(this).parent().parent().find('.gallery-image').attr('img_no');
    img_no++;
    if (img_no > images_length) {
        img_no = 1;
    }
    $('.row a').each(function () {
        if ($(this).attr('img_no') == img_no) {
            imgPath = $(this).attr('href');
        }
    });
    $('.gallery-imagebox img').attr('src', imgPath).attr('img_no', img_no);
});
$('.gallery-control-previous').click(function(){
    var img_no = $(this).parent().parent().find('.gallery-image').attr('img_no');
    img_no--;
    if (img_no <= 0) {
        img_no = images_length;
    }
    $('.row a').each(function () {
        if ($(this).attr('img_no') == img_no) {
            imgPath = $(this).attr('href');
        }
    });
    $('.gallery-imagebox img').attr('src', imgPath).attr('img_no', img_no);
});

【讨论】:

  • 感谢图沙尔。它工作正常。我还有一个问题。图像大小将足够大。并且浏览器可能需要一些时间来下载下一个和上一个图像。我想在浏览器加载图像时显示一些 .gif 图像。完成加载后,我想显示最终图像。你能告诉我如何实现这一目标
  • 还有一个问题,有没有更好的方法来完成这一切?就像目前我将所有图像放在一个文件夹中并提供图像的 url。如果我将图像存储在数据库中并从数据库中检索图像会更好吗?我想要一个更好的技术,以便我的网页加载速度非常快。
  • 好吧,我的更短更容易理解。 :) 但是为你 +1。 ;)
猜你喜欢
  • 2011-11-08
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
相关资源
最近更新 更多