【问题标题】:<jQuery> bx slider custom pagers with controls<jQuery> bx 滑块自定义寻呼机与控件
【发布时间】:2018-05-09 12:56:58
【问题描述】:

我有自定义分页是图像文件。通常它们保持灰色,但一旦单击,被单击的对象将其颜色变为绿色。

当我点击我的 bx 滑块上的“下一步”按钮(控件)时,我想让 2 件事发生。

  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');
});

任何帮助将不胜感激!谢谢。

【问题讨论】:

  • 你能把你的代码的jQuery部分贴在你加载bxSlider的地方吗?
  • @zer00ne 我上传了 bxSlider 加载的 jQery 部分并链接了自定义寻呼机。

标签: jquery bxslider


【解决方案1】:

bxSlider API


pagerCustom: 字符串 - "{jQuery/CSS Selector}"

演示: pagerCustom: "#bx-pager"

指定自定义寻呼机的每个子元素(直接后代元素)都必须具有此data-* 属性:

data-slide-index="{Number}"

演示: &lt;a data-slide-index="0" href="#/" class='active'&gt;...

详见Demo中的cmets


onSlideBefore: 函数对象 - {functionName}

演示: onSlideBefore: bxMove

SlideBefore API 事件上调用的回调函数。此事件在幻灯片转换到目标幻灯片之前发生。

注意: functionName 值中的 () 已被省略。这是因为回调属性正在使用该函数(即bxMove())。如果需要functionreturn 值,则将使用functionName()

详见Demo中的cmets


goToSlide(): Number - {0-index count}

演示: bx.goToSlide({index})

给定索引号的 API 方法,它将执行到给定索引位置处的幻灯片的转换。 bxSliderObject 应该使用点符号调用:

{bxSliderObject}.goToSlide(2);

在加载插件时应该实例化bxSliderObject

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

详见Demo中的cmets


杂项

演示: &lt;a data-slide-index="0" href="#/" class='active'&gt;...

.active 类应用于 #bx-pager a 用于指示当前幻灯片索引位置的样式更改。

详见 Demo 中的 cmets


演示

/*~~~~~~
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>

【讨论】:

  • 谢谢,但我需要将寻呼机在点击后从灰色变为彩色,其余部分保持灰色。只有被选中的会变成颜色。在这种情况下,对于您的示例,它应该从原始颜色变为“灰色”。我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多