为轮播滑块创建动态宽度项

时间:2017-04-04 09:10:35

标签: javascript jquery html css

我目前处于中间,使我的旋转木马响应。到目前为止,只有当用户调整大小并刷新浏览器时,我才设法使其响应,然后才会以编程方式调整大小。如何在不刷新浏览器的情况下调整大小。

更新

我尝试过以下答案。目前,即使我调整浏览器大小,它也会保持固定值。在我的CSS内部没有固定值

enter image description here



$(document).ready(function() {
  var sliderWidth = 0;
  var sliderContainer = $('.slider-container');
  var slider = $('.slider-container .slider');
  var sliderItems = $('.slider li');
  var sliderContainerWidth = sliderContainer.width();

  sliderItems.width(sliderContainerWidth / 2);

  $('.slider-container ul.slider').children().each(function() {
    sliderWidth += $(this).outerWidth();
    slider.width(sliderWidth + 1000);
  });

  $('.btns .prev').on('click', function() {
    prevSlide();
  })

  function prevSlide() {
    var sliderItemsWidth = sliderItems.width();
    var leftIndent = parseInt($(sliderItems).css('left')) - sliderItemsWidth;

    function animate() {
      $('.slider-container .slider:not(:animated)').animate({
        'left': leftIndent
      }, 100)
    }
    animate();
  }
})

.wrapper {
  max-width: 1280px;
  margin: 0 auto;
  background-color: #ccc;
}

.wrapper .slider-container {
  float: left;
  position: relative;
  overflow: hidden;
  width: 100%;
  background-color: beige;
}

.wrapper .slider-container .slider {
  display: flex;
  flex-wrap: wrap;
  position: relative;
}

.wrapper .slider-container .slider li {
  height: 300px;
  background-color: #ccc;
  position: relative;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
  <div class="slider-container">
    <ul class="slider">
      <li>1</li>
      <li>2</li>
      <li>3</li>
    </ul>

    <ul class="btns">
      <li class="prev">prev</li>
      <li class="next">next</li>
    </ul>
  </div>
</div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

根据我的评论,您可以将调整大小的位放入一个函数中并在窗口调整大小时调用:

$(document).ready(function() {
  var sliderContainer = $('.slider-container');
  var slider = $('.slider-container .slider');
  var sliderItems = $('.slider li');
  
  function resize() {
      var sliderWidth = 0;
      var sliderContainerWidth = sliderContainer.width();
    
      sliderItems.width(sliderContainerWidth / 2);

      $('.slider-container ul.slider').children().each(function() {
        sliderWidth += $(this).outerWidth();
        slider.width(sliderWidth + 1000);
      });
  }
  

  $('.btns .prev').on('click', function() {
    prevSlide();
  })

  function prevSlide() {
    var sliderItemsWidth = sliderItems.width();
    var leftIndent = parseInt($(sliderItems).css('left')) - sliderItemsWidth;

    function animate() {
      $('.slider-container .slider:not(:animated)').animate({
        'left': leftIndent
      }, 100)
    }
    animate();
  }
  
  resize();  // call onload
  
  $(window).on('resize', function () {
      resize();  // call when browser is resized
  });
})