<jQuery> пользовательские пейджеры bx slider - PullRequest
0 голосов
/ 02 мая 2018

У меня есть пользовательские нумерации страниц, которые являются файлами изображений. Обычно они остаются серыми, но после щелчка один из них меняет цвет на зеленый.

Я бы хотел, чтобы 2 вещи происходили , когда я нажимаю кнопку «Далее» (элемент управления) на моем bx-слайдере.

  1. слайд перемещается на следующую страницу.
  2. соответствующий значок пейджера отображаемого слайда превращается в зеленый , в то время как другие значки остаются серыми.

Связать элементы управления с помощью bx-slide было легко, но я не могу связать пользовательскую нумерацию страниц с элементами управления. Пользовательский пейджер работает хорошо, когда на него нажимают, и нумерация страниц работает хорошо, когда на него нажимают. Но я не могу соединить эти два устройства для одновременной работы.

Я пробовал 2 кода jQuery для решения этой задачи, но ни один не работает. Пожалуйста, смотрите ниже.

jQuery # 1
Здесь происходит событие click . После нажатия кнопки «Далее» я хочу найти индексный номер отображаемого слайда, сохранить его в переменной idx и щелкнуть дочерний элемент (тег) пейджера с соответствующим индексным номером.

$('.bx-next').on('click', function(){
    var idx=$('.benefit-slider li').find("[aria-hidden='false']").index(this);
    $('#slidePager li').eq(idx).children().on('click');
};

jQuery # 2
В этом коде событие меняет атрибут пейджера . При нажатии кнопки «Далее» я хочу сохранить индексный номер слайда, отображаемого в переменной idx2. Затем, если порядковый номер отображаемого слайда совпадает с 0, соответствующее изображение становится цветным (обратите внимание, что цветной значок заканчивается на -c, а серый значок заканчивается на -g).

$('.bx-next').on('click', function(){
    var idx2 = $('.benefit-container li').index(this);

    if($('.benefit-container li').eq(idx2)==0){
        $('.b-cost').attr('src','/img/benefit-lowcost-c.png');
        $('.b-location').attr('src','/img/benefit-location-g.png');
        $('.b-logistic').attr('src','/img/benefit-logistic-g.png');
        $('.b-cs').attr('src','/img/benefit-cs-g.png');
    };
    else if($('.benefit-container li').eq(idx2)==1){
        $('.b-cost').attr('src','/img/benefit-lowcost-g.png');
        $('.b-location').attr('src','/img/benefit-location-c.png');
        $('.b-logistic').attr('src','/img/benefit-logistic-g.png');
        $('.b-cs').attr('src','/img/benefit-cs-g.png');
    };
    else if($('.benefit-container li').eq(idx2)==2){
        $('.b-cost').attr('src','/img/benefit-lowcost-g.png');
        $('.b-location').attr('src','/img/benefit-location-g.png');
        $('.b-logistic').attr('src','/img/benefit-logistic-c.png');
        $('.b-cs').attr('src','/img/benefit-cs-g.png');
    };
    else if($('.benefit-container li').eq(idx2)==3){
        $('.b-cost').attr('src','/img/benefit-lowcost-g.png');
        $('.b-location').attr('src','/img/benefit-location-g.png');
        $('.b-logistic').attr('src','/img/benefit-logistic-g.png');
        $('.b-cs').attr('src','/img/benefit-cs-c.png');
    };
});

HTML

<!-- CUSTOM PAGER -->

<div class="benefit-container-wrap">
    <ul id="slidePager">
        <li class="b-conts1">
            <a href="#">
                <img src="img/benefit-lowcost-c.png" class="b-cost">
            </a>
        </li>
        <li class="b-conts2">
             <a href="#">
                 <img src="img/benefit-location-g.png" class="b-location">
             </a>
        </li>
        <li class="b-conts3">
             <a href="#">
                 <img src="img/benefit-logistic-g.png" class="b-logistic">
             </a>
        </li>
        <li class="b-conts4">
             <a href="#">
                  <img src="img/benefit-cs-g.png" class="b-cs">
             </a>
        </li>                
    </ul>                    
</div>


<!-- BX SLIDER -->

<div class="benefit-container col-sm-7 col-md-6">
    <ul class="benefit-slider">
        <li>
            <h3 class="b-cost">Competitive Price</h3>
        </li>
        <li>
             <h3 class="b-location">Optimal Location</h3>
        </li>
        <li>
             <h3 class="b-logistic">Total Logistic Solution</h3>
        </li>
        <li>
             <h3 class="b-customer">Outstanding Customer Services</h3>
        </li>
    </ul>
</div>

Загрузить Bx-Slider jQuery

// load bx-slider//
$('.benefit-slider').bxSlider({
    pagerCustom:'#slidePager',
    controls: true
});


//BxSlider custom pager //
$('.b-conts1').on('click',function(e){
    e.preventDefault();

    $('.b-cost').attr('src','/img/benefit-lowcost-c.png');
    $('.b-location').attr('src','/img/benefit-location-g.png');
    $('.b-logistic').attr('src','/img/benefit-logistic-g.png');
    $('.b-cs').attr('src','/img/benefit-cs-g.png');
});
$('.b-conts2').on('click',function(e){
    e.preventDefault();

    $('.b-cost').attr('src','/img/benefit-lowcost-g.png');
    $('.b-location').attr('src','/img/benefit-location-c.png');
    $('.b-logistic').attr('src','/img/benefit-logistic-g.png');
    $('.b-cs').attr('src','/img/benefit-cs-g.png');
});
$('.b-conts3').on('click',function(e){
    e.preventDefault();

    $('.b-cost').attr('src','/img/benefit-lowcost-g.png');
    $('.b-location').attr('src','/img/benefit-location-g.png');
    $('.b-logistic').attr('src','/img/benefit-logistic-c.png');
    $('.b-cs').attr('src','/img/benefit-cs-g.png');
});
$('.b-conts4').on('click',function(e){
    e.preventDefault();

    $('.b-cost').attr('src','/img/benefit-lowcost-g.png');
    $('.b-location').attr('src','/img/benefit-location-g.png');
    $('.b-logistic').attr('src','/img/benefit-logistic-g.png');
    $('.b-cs').attr('src','/img/benefit-cs-c.png');
});

Любая помощь будет принята с благодарностью! Спасибо.

1 Ответ

0 голосов
/ 05 мая 2018

API bxSlider


pagerCustom: String - "{jQuery/CSS Selector}"

Демо: pagerCustom: "#bx-pager"

Каждый дочерний элемент (элемент прямого потомка) назначенного пользовательского пейджера должен иметь этот атрибут data-*:

data-slide-index="{Number}"

Демо: <a data-slide-index="0" href="#/" class='active'>...

Подробнее см. В демоверсии


onSlideBefore: Объект функции - {functionName}

Демо: onSlideBefore: bxMove

Функция обратного вызова, вызываемая для SlideBefore события API. Это событие происходит до перехода слайда к целевому слайду.

Примечание: значение () из значения functionName опущено. Это потому, что свойство обратного вызова использует функцию (т.е. bxMove()). Если бы потребовалось значение return для function, тогда вместо него использовалось бы functionName().

Подробнее см. В демоверсии


goToSlide (): Число - {0-index count}

Демо: bx.goToSlide({index})

Метод API, которому присвоен индексный номер, он выполнит переход к слайду, который находится в данной индексированной позиции. bxSliderObject должен вызываться с использованием точечной нотации:

{bxSliderObject}.goToSlide(2);

При загрузке плагина должен быть создан экземпляр bxSliderObject:

var/const {bxSliderObject} = $("{selector}").bxSlider(...

Подробнее см. Комментарии в демоверсии


Разное

Демо: <a data-slide-index="0" href="#/" class='active'>...

Класс .active применяется к #bx-pager a для изменений стиля, которые указывают текущую позицию указателя слайда.

Подробнее см. В демоверсии


Демо

/*~~~~~~
line no#
|08| Store bxSlider instance in a variable
|10| Callback function bxMove() invoked on SlideBefore event
*/ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$(function() {
  const bx = $('#bx-slider').bxSlider({
    pagerCustom: '#bx-pager',
    onSlideBefore: bxMove
  });

  /*~~~~~~
  line no#
  |24| [API Callback][onSlideBefore] has default parameters.
  ==== $ele: jQuery Object of the destination element.
  ==== from: index number of departing position. (Not used)
  ==== to..: index number of destination position.
  |25| [API Method][goToSlide()] Pass index, it will jump to it. 
  |26| Remove .active class from all pager links.
  |27| Add .active class to the destination slide element.
  */ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  function bxMove($ele, from, to) {
    bx.goToSlide(to);
    $('#bx-pager a').removeClass('active');
    $ele.addClass('active');
  }
});
img {
  display: block;
  margin: 0 auto;
}

#bx-pager {
  display: table;
  margin: 0 auto .75em
}


/* Apply greyscale to all img in pager */

#bx-pager img {
  -webkit-filter: grayscale(100%);
  filter: grayscale(100%);
}

#bx-pager a {
  display: table-cell;
}

#bx-pager a.active {
  outline: 3px ridge tomato;
}


/* Decrease greyscale to 0% to the img nested within active link */

#bx-pager a.active img {
  -webkit-filter: grayscale(0%);
  filter: grayscale(0%);
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>SO50136244</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bxslider/4.2.15/jquery.bxslider.min.css" />

</head>

<body>
  <!-- [API Pager][pagerCustom]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> On a custom pager, each link element of the designated pager...
  pagerCustom: "#bx-pager"
  LINK: $("#bx-pager a")
  
>...must have a special data-* attribute:
  data-slide-index="${Number}"
  
> Add .active class to the first pager link. 

< See line no# 26, 28, 30, 32, 34, 36 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
  <nav id="bx-pager">
    <a data-slide-index="0" href="#/" class='active'>
      <img src="https://placeimg.com/200/200/people/31" width="50" /></a>
    <a data-slide-index="1" href="#/">
      <img src="https://placeimg.com/200/200/people/32" width="50" /></a>
    <a data-slide-index="2" href="#/">
      <img src="https://placeimg.com/200/200/people/33" width="50" /></a>
    <a data-slide-index="3" href="#/">
      <img src="https://placeimg.com/200/200/people/134" width="50" /></a>
    <a data-slide-index="4" href="#/">
      <img src="https://placeimg.com/200/200/people/351" width="50" /></a>
    <a data-slide-index="5" href="#/">
      <img src="https://placeimg.com/200/200/people/15" width="50" /></a>
  </nav>

  <ul id="bx-slider">
    <li>
      <img src="https://placeimg.com/200/200/people/31" />
    </li>
    <li>
      <img src="https://placeimg.com/200/200/people/32" />
    </li>
    <li>
      <img src="https://placeimg.com/200/200/people/33" />
    </li>
    <li>
      <img src="https://placeimg.com/200/200/people/134" />
    </li>
    <li>
      <img src="https://placeimg.com/200/200/people/351" />
    </li>
    <li>
      <img src="https://placeimg.com/200/200/people/15" />
    </li>
  </ul>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/bxslider/4.2.15/jquery.bxslider.min.js"></script>
...