文本滑块在每次迭代后增加从左侧偏移

Text slider increases offset from the left after each iteration

本文关键字:增加 迭代 文本      更新时间:2023-09-26

我基本上是将现有滑块从现有站点转移到新站点,我不想浪费额外的时间弄清楚如何从头开始创建文本滑块,因为客户希望在他的新站点上做同样的事情。

我找到了代码并对其进行了一些修改以在新网站上工作。除非它并没有真正正常工作。滑块如下所示:

var counter = 1;
var total_width = 0;
function slider_total_width() {
  $('.items a').each(function() {
    total_width += parseInt($(this).width(), 10);
  });
  $('.items').width(total_width);
}
slider_total_width();
function job_slider(wrapper) {
  var first_link = $('#active');
  var width = first_link.width();
  $(wrapper + ' a').each(function() {
    total_width += $(this).width() + 50;
  });
  first_link.removeAttr('id');
  $(wrapper).animate({
    left: '-=' + width
  }, 1000, function() {
    $(first_link).clone().appendTo(wrapper);
    $(first_link).css('color', 'transparent');
    var links = $(wrapper + ' a');
    var new_first_link = links[counter];
    counter++;
    $(new_first_link).attr('id', 'active');
    $(wrapper).width(total_width);
    total_width = 0;
  });
}
var activate = function() {
  job_slider('.items');
};
var interval = setInterval(activate, 5000);
$('.items').hover(function() {
  clearInterval(interval);
}, function() {
  interval = setInterval(activate, 5000);
});
.container {
  margin: 0 auto;
  width: 700px;
}
a {
  text-decoration: none;
}
#ads_scroller .container {
  font-size: 0;
  position: relative;
}
#ads_scroller .icon_holder {
  display: inline-block;
  width: 3%;
  margin-top: 8px;
}
#ads_scroller .icon_holder i {
  font-size: 22px;
  color: #fe9700;
}
#ads_scroller .scroller_container {
  display: inline-block;
  overflow: hidden;
  vertical-align: top;
  width: 97%;
  height: 31px;
  position: relative;
}
#ads_scroller .scroller_container .items {
  position: relative;
  display: block;
}
#ads_scroller .scrollable_title {
  position: relative;
  color: #727272;
  font-size: 14px;
  font-weight: 400;
  line-height: 41px;
  display: inline;
  white-space: nowrap;
  padding: 0 0 0 2px;
  box-sizing: border-box;
}
#ads_scroller .scrollable_title:last-of-type {
  margin-right: 0;
}
#ads_scroller #active.scrollable_title {
  color: #1a171b;
}
#ads_scroller .scrollable_title:hover {
  color: #555;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<div id="ads_scroller">
  <div class="container">
    <div class="icon_holder"><i class="fa fa-bell-o"></i>
    </div>
    <div class="scroller_container">
      <div class="items" style="width: 2642px;">
        <a href="#" class="scrollable_title" id="active">Lorem ipsum dolor sit amet  – </a>
        <a href="#" class="scrollable_title">Consectetur adipisicing elit – </a>
        <a href="#" class="scrollable_title">Incidunt tempore explicabo ea autem, eligendi excepturi – </a>
        <a href="#" class="scrollable_title">Sapiente sint officiis non minima ex – </a>
        <a href="#" class="scrollable_title">Tenetur provident, ipsum dignissimos autem earum nobis dolor – </a>
        <a href="#" class="scrollable_title">Obcaecati iste animi cumque culpa – </a>
        <a href="#" class="scrollable_title">Vero asperiores illum rerum – </a>
        <a href="#" class="scrollable_title">Test to see how announcements look – </a>
      </div>
    </div>
  </div>
</div>

现在我想我知道问题是什么,但我不知道如何解决它。出于某种原因,我的.items包装器如果没有设置宽度,就不会将所有链接都放在一行中,所以过了一段时间,我将没有任何链接可以滚动。

奇怪的是,这不是在客户端设置的,我无法弄清楚他们使用什么 css 规则可以允许这样做(无限向左移动而不设置宽度)。因此,为了规避这一点,我正在计算总宽度,然后在每次滑块克隆通过的元素时对其进行设置。

但是这样做(至少这是我的猜测)是,一段时间后,.items包装器从左侧开始(图标所在的位置)与滑入的链接之间的间隙逐渐变大。大约一分钟后,差距变得非常大。

那么有没有办法防止这种情况呢?我在这里做错了什么?:''

嗨,

试试这个样本,希望它对你有所帮助

<html>
  <head>
    <title>Demo Slider</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.1/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.1/css/bootstrap.min.css" />
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <div class="container">
    <div  class="carousel slide carousel-fade" data-ride="carousel">
        <div class="carousel-inner">
          <div class="item active" >
            <div class="caption">
              <a href="#" class="scrollable_title" id="active">Lorem ipsum dolor sit amet  – </a>
        <a href="#" class="scrollable_title">Consectetur adipisicing elit – </a>
        <a href="#" class="scrollable_title">Incidunt tempore explicabo ea autem, eligendi excepturi – </a>
        <a href="#" class="scrollable_title">Sapiente sint officiis non minima ex – </a>
        <a href="#" class="scrollable_title">Tenetur provident, ipsum dignissimos autem earum nobis dolor – </a>
        <a href="#" class="scrollable_title">Obcaecati iste animi cumque culpa – </a>
        <a href="#" class="scrollable_title">Vero asperiores illum rerum – </a>
        <a href="#" class="scrollable_title">Test to see how announcements look – </a>
            </div>
          </div>
          <div class="item " >
            <div class="caption">
              <a href="#" class="scrollable_title" id="active">Lorem ipsum dolor sit amet  – </a>
        <a href="#" class="scrollable_title">Consectetur adipisicing elit – </a>
        <a href="#" class="scrollable_title">Incidunt tempore explicabo ea autem, eligendi excepturi – </a>
        <a href="#" class="scrollable_title">Sapiente sint officiis non minima ex – </a>
        <a href="#" class="scrollable_title">Tenetur provident, ipsum dignissimos autem earum nobis dolor – </a>
        <a href="#" class="scrollable_title">Obcaecati iste animi cumque culpa – </a>
        <a href="#" class="scrollable_title">Vero asperiores illum rerum – </a>
        <a href="#" class="scrollable_title">Test to see how announcements look – </a>
            </div>
          </div>
          <div class="item" >
            <div class="caption">
              <a href="#" class="scrollable_title" id="active">Lorem ipsum dolor sit amet  – </a>
        <a href="#" class="scrollable_title">Consectetur adipisicing elit – </a>
        <a href="#" class="scrollable_title">Incidunt tempore explicabo ea autem, eligendi excepturi – </a>
        <a href="#" class="scrollable_title">Sapiente sint officiis non minima ex – </a>
        <a href="#" class="scrollable_title">Tenetur provident, ipsum dignissimos autem earum nobis dolor – </a>
        <a href="#" class="scrollable_title">Obcaecati iste animi cumque culpa – </a>
        <a href="#" class="scrollable_title">Vero asperiores illum rerum – </a>
        <a href="#" class="scrollable_title">Test to see how announcements look – </a>
            </div>
          </div>
        </div>

      </div>
    </div>
  </body>
</html>

您可以尝试 outerwidth() 而不是 width(),因为我认为解决方案是在宽度上添加 +2px,这实际上是每个锚项目的左边填充。

var counter = 1;
var total_width = 0;
function slider_total_width() {
  $('.items a').each(function() {
    total_width += parseInt($(this).outerWidth(), 10);
  });
  $('.items').width(total_width);
}
slider_total_width();
function job_slider(wrapper) {
  var first_link = $('#active');
  var width = first_link.outerWidth();
  $(wrapper + ' a').each(function() {
    total_width += $(this).width() + 50;
  });
  first_link.removeAttr('id');
  $(wrapper).animate({
    left: '-=' + width
  }, 1000, function() {
    $(first_link).clone().appendTo(wrapper);
    $(first_link).css('color', 'transparent');
    var links = $(wrapper + ' a');
    var new_first_link = links[counter];
    counter++;
    $(new_first_link).attr('id', 'active');
    $(wrapper).width(total_width);
    total_width = 0;
  });
}
var activate = function() {
  job_slider('.items');
};
var interval = setInterval(activate, 5000);
$('.items').hover(function() {
  clearInterval(interval);
}, function() {
  interval = setInterval(activate, 5000);
});
.container {
  margin: 0 auto;
  width: 700px;
}
a {
  text-decoration: none;
}
#ads_scroller .container {
  font-size: 0;
  position: relative;
}
#ads_scroller .icon_holder {
  display: inline-block;
  width: 3%;
  margin-top: 8px;
}
#ads_scroller .icon_holder i {
  font-size: 22px;
  color: #fe9700;
}
#ads_scroller .scroller_container {
  display: inline-block;
  overflow: hidden;
  vertical-align: top;
  width: 97%;
  height: 31px;
  position: relative;
}
#ads_scroller .scroller_container .items {
  position: relative;
  display: block;
}
#ads_scroller .scrollable_title {
  position: relative;
  color: #727272;
  font-size: 14px;
  font-weight: 400;
  line-height: 41px;
  display: inline;
  white-space: nowrap;
  padding: 0 0 0 2px;
  box-sizing: border-box;
}
#ads_scroller .scrollable_title:last-of-type {
  margin-right: 0;
}
#ads_scroller #active.scrollable_title {
  color: #1a171b;
}
#ads_scroller .scrollable_title:hover {
  color: #555;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<div id="ads_scroller">
  <div class="container">
    <div class="icon_holder"><i class="fa fa-bell-o"></i>
    </div>
    <div class="scroller_container">
      <div class="items" style="width: 2642px;">
        <a href="#" class="scrollable_title" id="active">Lorem ipsum dolor sit amet  – </a>
        <a href="#" class="scrollable_title">Consectetur adipisicing elit – </a>
        <a href="#" class="scrollable_title">Incidunt tempore explicabo ea autem, eligendi excepturi – </a>
        <a href="#" class="scrollable_title">Sapiente sint officiis non minima ex – </a>
        <a href="#" class="scrollable_title">Tenetur provident, ipsum dignissimos autem earum nobis dolor – </a>
        <a href="#" class="scrollable_title">Obcaecati iste animi cumque culpa – </a>
        <a href="#" class="scrollable_title">Vero asperiores illum rerum – </a>
        <a href="#" class="scrollable_title">Test to see how announcements look – </a>
      </div>
    </div>
  </div>
</div>