javascript - CSS 过渡以在单击时将点分页移动到左/右

标签 javascript jquery css animation

我正在尝试实现某种转换(或转换)CSS 分页的行为。

我有 5 个点,我想在用户单击相应按钮(向左或向右)时触发动画。

  • 当用户点击左侧时,点应该向左移动。
  • 当用户点击右侧时,点应该向右移动。

中间的点应该始终居中并且应该始终有 5 个点可见并且整个分页的位置不应该改变。

因此,如果您单击“向右”按钮:第四个点应向左滑动以显示它已成为事件点,反之亦然。

我试图表明当用户向左或向右单击时分页已经移动,这就是我正在努力的地方。请看下面的代码:

$('.left').click(function(e) {
  e.preventDefault();
  // some animation should happen here to show the pagination has been updated
});

$('.right').click(function(e) {
  e.preventDefault();
  // some animation should happen here to show the pagination has been updated
});
.left,
.right {
  display: inline-block;
  background: #000;
  color: #fff;
  width: 100px;
  text-align: center;
  margin-bottom: 20px;
}

.pagination {
  display: block;
  margin-bottom: 30px;
}

.dot {
  display: inline-block;
  height: 10px;
  width: 10px;
  background: #ccc;
  margin: 4px;
  vertical-align: middle;
  border-radius: 10px;
}

.dot:nth-child(even) {
  width: 8px;
  height: 8px;
}

.dot:nth-child(odd) {
  width: 6px;
  height: 6px;
}

.dot.active {
  background: #333;
  width: 10px;
  height: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="pagination">
  <div class="dot"></div>
  <div class="dot"></div>
  <div class="dot active"></div>
  <div class="dot"></div>
  <div class="dot"></div>
</div>

<a href="#" class="left">
left
</a>

<a href="#" class="right">
right
</a>

最佳答案

运行这个片段,根据你给我的例子,我想这就是你想要的。

解释:

现在分页有 2 个 div:一个外面的 div,把它想象成一个窗口,总是在相同的位置,宽度足以看到 5 个点。 (overflow:none 非常重要,因为窗口只显示 5 个点并隐藏任何不适合它的东西)。以及一个包含所有点的内部 div,我们将向左和向右移动。

var currentPage = 2;
processDotPosition();

$('.left' ).click(function() { currentPage -= 1; });
$('.right').click(function() { currentPage += 1; });

$('.left, .right').click(function(e) {
  e.preventDefault();
  processDotPosition();
});


function processDotPosition(){
  //settings
  var firstNavigableDot = 2;
  var lastNavigableDot = $('.dot').length-3;

  //don't allow going out of range
  if (currentPage<firstNavigableDot) currentPage=lastNavigableDot;
  if (currentPage>lastNavigableDot)  currentPage=firstNavigableDot;
  
  //manage "active" class
  $('.dot').removeClass('active').removeClass('nearActive');
  $('.dot').eq(currentPage).addClass('active');
  $('.dot').eq(currentPage+1).addClass('nearActive');
  $('.dot').eq(currentPage-1).addClass('nearActive');
  
  //slide the inner div (the +35 is for centering the active dot)
  var newPosition = -(currentPage-2)*19;
  $('.paginationInner').finish().animate({left: newPosition});

}
.left,
.right {
  display: inline-block;
  background: #000;
  color: #fff;
  width: 100px;
  text-align: center;
  margin-bottom: 20px;
}

.paginationOutter {
  display: block;
  margin-bottom: 30px;
  margin-left:50px;
  width: 100px; /* only show 5 dots */
  overflow: hidden;
  height:18px;
  position: relative;
  
}

.paginationInner{
  position:absolute;
}

.dot {
  display: inline-block;
  background: #ccc;
  margin: 4px;
  vertical-align: middle;
  border-radius: 10px;
  transition: height width 1s ease;
}


/* 1st and 5th */
.dot {
  width: 6px;
  height: 6px;
}

/* 2nd and 4th */
.dot.nearActive {
  width: 8px;
  height: 8px;
}


/* 3rd */
.dot.active {
  background: #333;
  width: 10px;
  height: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="paginationOutter">
  <div class="paginationInner">
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>
    <div class="dot"></div>    
  </div>
</div>

<a href="#" class="left">
left
</a>

<a href="#" class="right">
right
</a>

关于javascript - CSS 过渡以在单击时将点分页移动到左/右,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52273557/

相关文章:

javascript - 从 JS 的 ID 列表创建 var

javascript - JQuery - 获取li元素的ID属性

javascript - 子菜单消失

javascript - 更改 CSS 的颜色处理程序

javascript - 使用 JavaScript 允许数字字段中的小数

javascript - 无法绑定(bind)到 document.ready 上的 JPlayer 事件

jquery - Bootstrap Bootbox 在加载警报框后删除浏览器滚动条

jquery - 当鼠标距离该 div 一定距离时隐藏该 div

html - 从右到左打印表格单元格

javascript - 如何更改数据表中每页值的结果