【问题标题】:Using jQuery Data to detect a active slide and run function使用 jQuery Data 检测活动幻灯片并运行函数
【发布时间】:2016-03-07 23:06:59
【问题描述】:

您好,我正在使用 jQuery 进行自定义导航,但我不知道如何检测活动幻灯片并将活动状态应用于该幻灯片的按钮。

我设置了一个 jsfiddle 以更好地显示我正在尝试做的事情,基本上与滑块中的点/分页器功能相同,但在按钮 1 2 和 3 上。

我不熟悉 jQuery 的 .data 部分:P

http://jsfiddle.net/unknown601/yxErC/17/

<div class="number" id="" data-slider="0">
  Button 1
</div>
<div class="number" id="" data-slider="1">
  Button 2
</div>
<div class="number" id="" data-slider="2">
  Button 3
</div>

<ul class="slider">
  <li data-current="1">
    <img src="http://placehold.it/350x150">
    <p>Slider-1</p>
  </li>

  <li data-current="2">
    <img src="http://placehold.it/350x150">
    <p>Slide 2</p>
  </li>

  <li data-current="3">
    <img src="http://placehold.it/350x150">
    <p> Slide 3</p>
  </li>

</ul>



   #current {
  color: red;
  font-weight: bold;
}

.number:hover {
  color: blue;
  cursor: pointer;
}

有按钮来控制滑块:)

var Slider;

$(document).ready(function() {
  Slider = $('.slider').bxSlider({
    pager: true
  });
  $('.number').on('click', function(e) {
    e.preventDefault();
    var index = $(this).attr('data-slider');
    Slider.goToSlide(index);
  });
});

【问题讨论】:

  • 我正在尝试解决如何使用 data-current="1"> 将当前类添加到按钮 1 等等

标签: javascript jquery html css


【解决方案1】:

Working fiddle.

您可以为单击的按钮添加类并将其从单击事件中的其他按钮中删除:

$('.number').on('click', function(e) {
    e.preventDefault();
    var index = $(this).attr('data-slider');

    $('.number').removeClass('active'); //Remove class active from all buttons
    $(this).addClass('active'); //Add active class to the clicked one

    Slider.goToSlide(index);
});

因为您正试图让与幻灯片相关的按钮处于活动状态,所以您可以使用 onSlideBefore() 回调到基于 data-slider 的按钮的活动类 add/remove :

Slider = $('.slider').bxSlider({
  pager: true,
  onSlideBefore: function($slideElement, oldIndex, newIndex) {
      $('.number').removeClass('active');
      $('.number[data-slider="'+newIndex+'"]').addClass('active');
  }
});

希望这会有所帮助。

【讨论】:

  • :-/ 我想到了,但是当你像点一样使用滑块控件时它不会激活和改变
  • 我试图让我的按钮像点一样激活
  • 不确定是什么问题,但请查看bxslider.com/options#onSlideBefore 了解更多信息。
  • 你的意思是告诉我你的工作我在 3 小时前更新了我的答案和小提琴,它正在工作jsfiddle.net/yxErC/23。
  • 对不起! @Zakaria Acharki 我错过了!!
【解决方案2】:

您要自定义“上一页/下一页”按钮吗?如果是这样,您可以通过调用getCurrentSlide() 获取当前(“活动”)页面。查看http://bxslider.com/option 上的文档以获取详细信息。 如果您只想在幻灯片之外进行导航控制,bxslider 页面上有一个示例:http://bxslider.com/examples/custom-next-prev-selectors

【讨论】:

  • 啊不,如果你看到小提琴,每张幻灯片都有一个按钮
  • 那么您可以使用 onSlideBefore() / onSlideAfter() 回调来检测幻灯片过渡。(在bxslider.com/options 中有描述)该函数在参数中有 oldIndex / newIndex。
【解决方案3】:

试试:

var Slider;
var minState = 0;
var maxState = 2;
var currState = 0;

$(document).ready(function() {
  Slider = $('.slider').bxSlider({
    pager: true
  });

  var changeActiveLink = function() {
    $('.active').removeClass('active');
    $('.number[data-slider='+currState+']').addClass('active');
  }
  $('.number').on('click', function(e) {
    e.preventDefault();
    var index = $(this).attr('data-slider');
    Slider.goToSlide(index);
    currState = index;
    changeActiveLink();
  });
  $('.bx-pager-link').on('click', function(e){
    e.preventDefault();
    var activeButton = $(this).data('slide-index');
    currState = activeButton;
    changeActiveLink();
  });
  $('.bx-next').on('click', function(e){
    e.preventDefault();
    if(currState == maxState) {
        currState = 0;
    } else {
        currState++;
    }
    changeActiveLink();
  });
  $('.bx-prev').on('click', function(e){
    e.preventDefault();
    if(currState == 0) {
        currState = maxState;
    } else {
        currState--;
    }
    changeActiveLink();
  })

});

http://jsfiddle.net/yxErC/32/

【讨论】:

  • :D 可以,几乎除了当我使用自定义导航时,我想我可以通过 L:D 解决这个问题
  • 哦,你厌倦了滑块控件:D @Brendan Quinn
  • 是的,所有导航方法现在都应该与所有其他导航方法通信
  • 谢谢!效果很好 :),嗯,需要更多地查看您的代码,我不确定如何添加更多幻灯片?
  • 基本上,完全按照以前的方式添加幻灯片,添加遵循相同模式的自定义链接(data-slider=3、4 等),然后将 var maxState = 2 更改为最终的幻灯片数量 -1 是,应该这样做。
猜你喜欢
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多