3

我需要你们的帮助。所以,这是我的条件。我有 4 个按钮来触发图像,当单击按钮时它们将处于活动状态(我很喜欢这个 - 但如果有更好的方法,请告诉我),

场景:
当我点击按钮 2 时,我希望出现“image2”(有 class="active")。
然后,如果我单击按钮 3,“image2”淡出(删除活动类)并将活动类添加到“image3”

可以说这是我的4 个按钮

<div id="button">
  <div class="trigger button-1" data-target="0"></div>
  <div class="trigger button-2" data-target="1"></div>
  <div class="trigger button-3" data-target="2"></div>
  <div class="trigger button-4" data-target="3"></div>
</div>

我还有另一个部分是这样包装的图像:

<div id="images-container">
  <img src="image-1" class="image1">
  <img src="image-2" class="image2">
  <img src="image-3" class="image3">
  <img src="image-4" class="image4">
</div>

我在想有什么办法可以使用数据元素在 jQuery 中获取图像?

我当前的 jQuery:

var img = $('#images-container img'),
    trigger = $('.trigger');

// click this, make active, other? no
trigger.on('click', function(){
    $(this).addClass('active');
    $(this).siblings().removeClass('active');

    // image that have the selected ID, active.
    // other images must remove active classes
    var a = $(this).data('target');
    $('#image-container').find('img').eq(a).addClass('active');

            // and help me from here guys!

我知道这可能很容易,但我不是 jQuery 专业人士。
每个解决方案都将受到赞赏,并为真正的解决方案 +1

4

2 回答 2

2

将数据属性添加到与相应图像类相关的 html... 和 addclass...

尝试这个

HTML

<div class="trigger button-1" data-target="0" data-imageclass="image1"></div>
<div class="trigger button-2" data-target="1"  data-imageclass="image2"></div>

查询

 var img = $('#images-container img'),
 trigger = $('.trigger');

 // click this, make active, other? no
trigger.on('click', function(){
  $(this).addClass('active');
  $(this).siblings().removeClass('active');

  $('#images-container img').removeClass('active');
  $('.'+$(this).data('imageclass')).addClass('active');
}); 

在这里摆弄

我不知道为什么会data-target这样,但如果你没有在你的代码中使用它..那么我想你可以使用它而不是创建新的数据属性..

$('.'+$(this).data('target')).addClass('active');
于 2013-05-02T13:36:41.680 回答
1

在您的简单情况下,我认为仅使用标签位置索引就足够了。通常,如果触发按钮和目标图像的编号相同,那么这应该可以工作,因为它们将共享相同的位置索引。

看一下这个:

var img = $('#images-container').find('img'),
    trigger = $('.trigger');

$('#button').on('click', '.trigger', function(e) {
    var self = $(this), // this trigger tag
        selfIndex = self.index(); // position of this trigger tag

    img.removeClass('active'); // remove class active from all img(s)
    img.eq(selfIndex).addClass('active'); // add class active just on this img

    trigger.removeClass('active'); //r emove class active from all trigger(s)
    self.addClass('active'); // add class active just on this trigger

    e.preventDefault();

});

但是,如果您想使用数据属性,请执行以下操作:为按钮的数据属性添加值,如下所示:

<div id="button">
  <div class="trigger button-1" data-target="image1"></div>
  <div class="trigger button-2" data-target="image2"></div>
  <div class="trigger button-3" data-target="image3"></div>
  <div class="trigger button-4" data-target="image4"></div>
</div>

然后在 JS/jQuery 中,执行以下操作:

var img = $('#images-container').find('img'),
    trigger = $('.trigger');

$('#button').on('click', '.trigger', function(e) {
    var self = $(this);

    img.removeClass('active'); // remove class active from all img(s)
    img.filter('.' + self.data('target')).addClass('active'); // add class active just on this img

    trigger.removeClass('active'); //r emove class active from all trigger(s)
    self.addClass('active'); // add class active just on this trigger

    e.preventDefault();

});
于 2013-05-02T14:05:26.920 回答