【问题标题】:Sync flex Sliders - flex-direction-nav(Arrows)同步 flex 滑块 - flex-direction-nav(箭头)
【发布时间】:2018-10-02 06:34:45
【问题描述】:

我正在使用 flex-slider 开发滑块。我有一个想法,将两个 flexslider 同步为一个,就像我们对 Owl-carousel 所做的那样。由于 flex 标题与图像一起动画,我必须使用两个 flexslider,因为我希望 flex-caption 动画与图像动画不同。我已经在 Answer 的帮助下同步了它们 但现在我被困在两点:

1) 我也希望箭头同步。正如你在我的代码中看到的,我已经对 flex-direction-navs 进行了分组。现在我想在单击按钮时更改两张幻灯片,但这不起作用,因为它上面有分层。

2) 我希望自定义定位按钮根据活动幻灯片处于活动状态。例如,我在第三张幻灯片上,我希望第三个定位锚标记处于活动状态,例如改变颜色等。

希望我清楚地解释了我的问题。如果您需要任何进一步的信息,请在下方评论。

这是Codepen 链接。后跟代码。

jQuery(document).ready(function($) {

  $('#main-slider').flexslider({
    animation: "slide",
    slideToStart: 0,
    start: function(slider) {
      $('a.slide_thumb').click(function() {
        $('.flexslider').show();
        var slideTo = $(this).attr("rel") //Grab rel value from link;
        var slideToInt = parseInt(slideTo) //Make sure that this value is an integer;
        if (slider.currentSlide != slideToInt) {
          slider.flexAnimate(slideToInt) //move the slider to the correct slide (Unless the slider is also already showing the slide we want);
        }
      });
    }

  });

  $('#secondary-slider').flexslider({
    animation: "slide",
    slideToStart: 0,
    start: function(slider) {
      $('a.slide_thumb').click(function() {
        $('.flexslider').show();
        var slideTo = $(this).attr("rel") //Grab rel value from link;
        var slideToInt = parseInt(slideTo) //Make sure that this value is an integer;
        if (slider.currentSlide != slideToInt) {
          slider.flexAnimate(slideToInt) //move the slider to the correct slide (Unless the slider is also already showing the slide we want);
        }
      });
    }

  });

});
.slider-wrap {
  position: relative;
  width: 700px;
  margin: 0 auto
}

#secondary-slider {
  position: absolute;
  top: 0;
  right: 0;
  width: 50%;
}

.flex-direction-nav .flex-prev,
.flexslider:hover .flex-direction-nav .flex-prev,
.flexslider:hover .flex-direction-nav .flex-next,
.flex-direction-nav .flex-next {
  top: unset;
  left: unset;
  right: unset;
  bottom: unset;
}

.flexslider:hover .flex-direction-nav .flex-prev:hover,
.flexslider:hover .flex-direction-nav .flex-prev:hover {
  opacity: 1;
}

#main-slider .flex-direction-nav .flex-prev,
#secondary-slider .flex-direction-nav .flex-prev {
  position: absolute;
  top: 20px !important;
  right: 0 !important;
  opacity: 1;
}

#main-slider .flex-direction-nav .flex-next,
#secondary-slider .flex-direction-nav .flex-next {
  position: absolute;
  top: 120px !important;
  right: 0;
  opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/flexslider/2.7.1/jquery.flexslider.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/flexslider/2.7.1/flexslider.css" rel="stylesheet" />
<div class="slider-wrap">
  <div id="main-slider" class="flexslider">
    <ul class="slides">
      <li>
        <img src="https://via.placeholder.com/350x150" />
      </li>
      <li>
        <img src="https://via.placeholder.com/350x150" />
      </li>
      <li>
        <img src="https://via.placeholder.com/350x150" />
      </li>
      <li>
        <img src="https://via.placeholder.com/350x150" />
      </li>
    </ul>
  </div>

  <div id="secondary-slider" class="flexslider">
    <ul class="slides">
      <li>
        <p>Text 1</p>
      </li>
      <li>
        <p>Text 2</p>
      </li>
      <li>
        <p>Text 3</p>
      </li>
      <li>
        <p>Text 4</p>
      </li>
    </ul>
  </div>
  <a rel="0" class="slide_thumb" href="#">slide link 1</a>
  <a rel="1" class="slide_thumb" href="#">slide link 2</a>
  <a rel="2" class="slide_thumb" href="#">slide link 3</a>
  <a rel="3" class="slide_thumb" href="#">slide link 3</a>

【问题讨论】:

    标签: javascript jquery html flexslider


    【解决方案1】:

    您可以通过创建自己的箭头来应用您为链接创建的相同逻辑。您删除默认的,然后添加您自己的侦听器来移动滑块。

    对于活动链接,只需添加更多 JS 即可切换类。

    这是一个示例,您可以轻松地使用 CSS 来调整您想要的位置:

    jQuery(document).ready(function($) {
    
      $('#main-slider').flexslider({
        animation: "slide",
        slideToStart: 0,
        start: function(slider) {
          $('a.slide_thumb').click(function() {
            $('.active').removeClass('active');
            $(this).addClass('active');
            $('.flexslider').show();
            var slideTo = $(this).attr("rel") //Grab rel value from link;
            var slideToInt = parseInt(slideTo) //Make sure that this value is an integer;
            if (slider.currentSlide != slideToInt) {
              slider.flexAnimate(slideToInt) //move the slider to the correct slide (Unless the slider is also already showing the slide we want);
            }
          });
          $('.flex-prev').click(function(e) {
            e.preventDefault();
            $('.active').removeClass('active');
            $('.flexslider').show();
            var c = slider.currentSlide;
            if(c!=0) {
              c--;
              slider.flexAnimate(c);
              $('.slide_thumb[rel='+c+']').addClass('active');
            } else {
              slider.flexAnimate(3);
              $('.slide_thumb[rel=3]').addClass('active');
            }
          })
           $('.flex-next').click(function(e) {
           e.preventDefault();
            $('.active').removeClass('active');
           $('.flexslider').show();
            var c = slider.currentSlide;
            if(c!=3) {
              c++;
              slider.flexAnimate(c);
              $('.slide_thumb[rel='+c+']').addClass('active');
            } else {
              slider.flexAnimate(0);
              $('.slide_thumb[rel=0]').addClass('active');
            }
          })
        }
    
      });
    
      $('#secondary-slider').flexslider({
        animation: "slide",
        slideToStart: 0,
        start: function(slider) {
          $('a.slide_thumb').click(function() {
          $('.active').removeClass('active');
            $(this).addClass('active');
            $('.flexslider').show();
            var slideTo = $(this).attr("rel") //Grab rel value from link;
            var slideToInt = parseInt(slideTo) //Make sure that this value is an integer;
            if (slider.currentSlide != slideToInt) {
              slider.flexAnimate(slideToInt) //move the slider to the correct slide (Unless the slider is also already showing the slide we want);
            }
          });
          $('.flex-prev').click(function(e) {
          e.preventDefault();
            $('.active').removeClass('active');
          $('.flexslider').show();
            var c = slider.currentSlide;
            if(c!=0) {
              c--;
              slider.flexAnimate(c);
              $('.slide_thumb[rel='+c+']').addClass('active');
            } else {
              slider.flexAnimate(3);
              $('.slide_thumb[rel=3]').addClass('active');
            }
          })
           $('.flex-next').click(function(e) {
           e.preventDefault();
            $('.active').removeClass('active');
           $('.flexslider').show();
            var c = slider.currentSlide;
            if(c!=3) {
              c++;
              slider.flexAnimate(c);
              $('.slide_thumb[rel='+c+']').addClass('active');
            } else {
              slider.flexAnimate(0);
              $('.slide_thumb[rel=0]').addClass('active');
            }
          })
        }
    
      });
    
    });
    .slider-wrap {
      position: relative;
      width: 700px;
      margin: 0 auto
    }
    
    #secondary-slider {
      position: absolute;
      top: 0;
      right: 0;
      width: 50%;
    }
    .flexslider .flex-direction-nav {
     display:none;
    }
    
    .active {
      color:red;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/flexslider/2.7.1/jquery.flexslider.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/flexslider/2.7.1/flexslider.css" rel="stylesheet" />
    <div class="slider-wrap">
      <div id="main-slider" class="flexslider">
        <ul class="slides">
          <li>
            <img src="https://via.placeholder.com/350x150" />
          </li>
          <li>
            <img src="https://via.placeholder.com/350x150" />
          </li>
          <li>
            <img src="https://via.placeholder.com/350x150" />
          </li>
          <li>
            <img src="https://via.placeholder.com/350x150" />
          </li>
        </ul>
      </div>
    
      <div id="secondary-slider" class="flexslider">
        <ul class="slides">
          <li>
            <p>Text 1</p>
          </li>
          <li>
            <p>Text 2</p>
          </li>
          <li>
            <p>Text 3</p>
          </li>
          <li>
            <p>Text 4</p>
          </li>
        </ul>
      </div>
      <ul class="flex-direction-nav"><li class="flex-nav-prev"><a class="flex-prev" href="#">Previous</a></li><li class="flex-nav-next"><a class="flex-next" href="#">Next</a></li></ul>
      <a rel="0" class="slide_thumb" href="#">slide link 1</a>
      <a rel="1" class="slide_thumb" href="#">slide link 2</a>
      <a rel="2" class="slide_thumb" href="#">slide link 3</a>
      <a rel="3" class="slide_thumb" href="#">slide link 3</a>

    【讨论】:

    • 这就像一个魅力。正如预期的那样。只剩下一件事,自定义导航点没有获得活动链接。
    • 最后一件事是当我点击箭头时,自定义导航没有改变,因为它应该转到下一个或上一个。
    • 慢慢来吧。
    • @MohammedWahedKhan 现在应该没问题了,箭头与自定义导航链接
    猜你喜欢
    • 2019-02-25
    • 2015-12-05
    • 2018-07-21
    • 1970-01-01
    • 2017-08-03
    • 2016-11-19
    • 2019-11-18
    • 2019-07-23
    • 2014-07-23
    相关资源
    最近更新 更多