【问题标题】:jQuery manually slider in two rowsjQuery手动滑动两行
【发布时间】:2019-04-25 17:43:42
【问题描述】:

通过构建滑块来学习 jQuery。我的意图是制作两行图片,它们将根据按钮单击在左侧或右侧滑动一张图片的宽度。另外,我希望滑块是无止境的。

这是 jsfiddle:http://jsfiddle.net/L590q2ct/7/(注意:使用“下一步”按钮)

我的 jQuery 如下:

$('#next').click(function() {
var first = $('.slide').eq(0);
var count = $('.slide').length;
var last = $('.slide').eq(count-1);
var width = $('.slide').width();

first.addClass('active');

var slide = function() {
    target = $('.active').index();
    target === last.index() ? target = 0 : target = target+1; //target won't increse
    nextSlide(target);
    console.log(target)
}

var nextSlide = function(target) {
    $('#top').animate({'left': '-' + width + 'px'},300);  //moving target picture to the left
    $('.slide').removeClass('active').eq(target).addClass('active');
}

slide();
});

我面临这些问题:

  1. 目标幻灯片不会增加,因此我无法将“活动”类添加到下一张
  2. 不知道如何在单击按钮时将第一张图片放在最后一个位置。

欢迎任何建议,谢谢!

【问题讨论】:

    标签: jquery html


    【解决方案1】:

    您正在做的主要问题是,您每次单击下一个按钮时都将first 元素设置为active,这就是目标永远不会改变的原因。

    第二件事是您每次都将margin-left设置为图像的宽度,而您应该将其移动target*width以匹配应显示的元素。

    var first = $('.slide').eq(0);
    var count = $('.slide').length;
    var last = $('.slide').eq(count - 1);
    var width = $('.slide').width();
    first.addClass('active');
    
    $('#next').click(function() {
      var slide = function() {
        target = $('.active').index();
        target = target === count-1 ?  0 : target + 1;      
        nextSlide(target);
            console.log(target)
      }
    
      var nextSlide = function(target) {
        $('#top').animate({
          'margin-left': '-' + target*width + 'px'
        }, 300);
        $('.slide').removeClass('active').eq(target).addClass('active');
      }
    
      slide();
    
    });
    

    这是Working example

    【讨论】:

    • 谢谢,但是如何才能将超出视口的图片设置在行尾?换句话说,打算进行无休止的滑动,以便在发生滑动时没有“空白”。
    • 空幻灯片的问题是因为您将所有.slide元素都计数为9并且仅将位置更改为top div,为什么将图像分隔在2个不同的div中?
    • 第一个想法是一键滑动两个 div。所以我把它分成了两部分。现在当你说的时候,我会考虑将所有 imgs 放在一个 div 中并使用 flex-wrap。建议?谢谢阿雅!
    • 我仍然不确定你为什么要它在 2 行或更多行中?通常,滑块每次应该显示 1 张图像,并且您不需要将图像放回行中,因为您已经设置了从头开始的条件,一旦它到达最后一个元素。这是我的意思的演示,但不确定这是否正是您需要做的jsfiddle.net/Aya_Salama/9km5obwa
    • 这是一个不同方法的演示,所以这里它从 div 中删除当前元素,将其附加到末尾并将下一个元素设置为活动元素,在这种情况下,你不需要需要更改左边距,因为您已经重新排列了元素,因此所需的元素将位于开头,也无需检查这是否是最后一个元素(因为它永远不会)。 jsfiddle.net/Aya_Salama/ajqty6n8
    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多