bx-slider выдвигает за пределы изображения подписи вместе с изображением

Я пытаюсь понять, как перемещать пользовательские подписи вне класса bx-slider. Я нашел только ответы, подобные этому здесь, где используется атрибут изображения, но моя проблема в том, что я хочу иметь возможность перемещать заголовок вместе с изображением внутри div, отдельно от bx-слайдера, если это возможно.

Пока у меня это:

HTML:

<!--image slider desktop-->
<div id="hero">
   <ul class="bxslider">
      <li>
         <a href="www.google.com">
           <img src="http://placehold.it/350x150" class="slider-img-responsive">
         </a>
       </li>
       <li>
         <a href="www.google.com">
          <img src="http://placehold.it/350x150" class="slider-img-responsive">
         </a>
       </li>
    </ul>
</div>
<!-- slider text-->
<div class="mobile-homepage-header">
    <!-- TODO: slide text relative to image slider-->
    <ul id="slider-text" style="list-style-type:none;padding:0;">
        <li>
            <h1>Lorem ipsum 1</h1>
            <h2>Lorem ipsum dolor sit 1</h2>
            <a href="www.google.com">Button 1</a>
        </li>
        <li>
            <h1>Lorem ipsum 2.</h1>
            <h2>Lorem ipsum dolor sit 2</h2>
            <a href="www.google.com">Button 2</a>
        </li>
    </ul>
</div>

JQuery:

$('#hero .bxslider').bxSlider({
   auto: true,
   infiniteLoop: true,
   pager: false,
   controls: true,
   pause: 5000,
   onSliderLoad: function(currentIndex) {
       $('#slider-text li').html($('.bxslider li').eq(currentIndex)); // select the current index of the slider
   },
   onSlideBefore: function($slideElement, oldIndex, newIndex) {
       $('#slider-text li').html($slideElement); // slide text along with image
   }
});

person TheAmazingKnight    schedule 18.02.2016    source источник


Ответы (1)


Похоже, что это поле с надписью, которое вы хотите, имеет те же функции, что и слайдер. Я сделал 2 bxSlider:

  • .bxslider is modified as follows:
    • Referenced by var bx
    • Удален обратный вызов onSliderLoad()
    • Обратный вызов onSlideBefore() изменен на новую функцию syncTextSlider
  • #slider-text is modified as follows:
    • Instantiated to a bxSlider
    • Ссылка на var cx
    • Примечание: controls: false
  • Defined a new function syncTextSlider
    • Before .bxslider moves to a new slide, syncSliderText is called.
    • Затем эта функция использует метод API bxSlider goToSlide() на #slider-text
  • Поскольку движения #slider-text зависят от движений .bxslider, я удалил элементы управления #slider-text.
  • Стилизованные элементы управления .bxslider между обоими ползунками, если вы предпочитаете их в исходном положении, просто удалите стиль, расположенный в блоке <style> внутри блока <head>.

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
  <title>35486338</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/bxslider/4.2.5/jquery.bxslider.css">
  <style>
    /* Remove style to relocate controls to original position */
    .bx-controls-direction a {
      top: 125% !important;
    }
  </style>
</head>

<body>
  <!--image slider desktop-->
  <div id="hero">
    <ul class="bxslider">
      <li>
        <a href="www.google.com">
          <img src="http://placehold.it/350x150/000/0ff/?text=1" class="slider-img-responsive">
        </a>
      </li>
      <li>
        <a href="www.google.com">
          <img src="http://placehold.it/350x150/000/fff/?text=2" class="slider-img-responsive">
        </a>
      </li>
      <li>
        <a href="www.google.com">
          <img src="http://placehold.it/350x150/000/e00/?text=3" class="slider-img-responsive">
        </a>
      </li>
      <li>
        <a href="www.google.com">
          <img src="http://placehold.it/350x150/000/f3f/?text=4" class="slider-img-responsive">
        </a>
      </li>
      <li>
        <a href="www.google.com">
          <img src="http://placehold.it/350x150/000/3f3/?text=5" class="slider-img-responsive">
        </a>
      </li>
    </ul>
  </div>
  <!-- slider text-->
  <div class="mobile-homepage-header">
    <ul id="slider-text">
      <li>
        <h1>Title 1</h1>
        <h2>Byline 1</h2>
        <a href="www.google.com">Button 1</a>
      </li>
      <li>
        <h1>Title 2</h1>
        <h2>Byline 2</h2>
        <a href="www.google.com">Button 2</a>
      </li>
      <li>
        <h1>Title 3</h1>
        <h2>Byline 3</h2>
        <a href="www.google.com">Button 3</a>
      </li>
      <li>
        <h1>Title 4</h1>
        <h2>Byline 4</h2>
        <a href="www.google.com">Button 4</a>
      </li>
      <li>
        <h1>Title 5</h1>
        <h2>Byline 5</h2>
        <a href="www.google.com">Button 5</a>
      </li>
    </ul>
  </div>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
  <script src="https://cdn.jsdelivr.net/bxslider/4.2.5/jquery.bxslider.min.js"></script>
  <script>
    var bx = $('.bxslider').bxSlider({
      auto: true,
      infiniteLoop: true,
      pager: false,
      controls: true,
      pause: 5000,
      onSlideBefore: syncTextSlider
    });

    var cx = $("#slider-text").bxSlider({
      infiniteLoop: true,
      pager: false,
      controls: false
    });

    function syncTextSlider($ele, from, to) {
      cx.goToSlide(to);
    }
  </script>
</body>

</html>

person zer00ne    schedule 19.02.2016
comment
Большое вам спасибо за вашу помощь! Я заметил, что последний слайд, возвращающийся к первому слайду, меняет направление с переходом влево, а не вправо, как изображение. Простое решение — заменить goToSlide(to) на goToNextSlide(to) для тех из вас, кто хочет, чтобы ползунок и заголовок оставались в одном и том же направлении перехода друг к другу (особенно на слайде с последнего на первый). - person TheAmazingKnight; 22.02.2016
comment
Никаких проблем, сэр. Спасибо, за ваш другой подход к теме, это должным образом отмечено. Это небольшие дополнения, которые являются шагами к лучшему решению. :-) - person zer00ne; 22.02.2016