【发布时间】:2023-03-24 16:01:01
【问题描述】:
我创建了一个带有动画效果的基本滑块,
我正在使用transform: translate3d 向左或向右移动滑块,但在如何使其循环并无限向左或向右滑动时遇到了问题并且有点迷失。
我正在努力做到这一点,当您单击左或右时,它会不断显示和旋转图像。
我也想用 z-index 平滑过渡,但似乎不可能。
这是我完成的工作的 jsFiddle https://jsfiddle.net/wo67h4n9/
这是 HTML 代码
<div class="vs-slider">
<div class="vss-wrap">
<div class="item active"><img src="http://lorempixel.com/430/280/sports" alt="Slider Item" width="430" height="280"></div>
<div class="item"><img src="http://lorempixel.com/430/280/animals" alt="Slider Item" width="430" height="280"></div>
<div class="item"><img src="http://lorempixel.com/430/280/nature" alt="Slider Item" width="430" height="280"></div>
</div>
<ul class="vss-nav">
<li class="prev"><</li>
<li class="next">></li>
</ul>
</div>
jQuery
;( function($) {
$(document).ready(function() {
$('.vs-slider .item').each( function() {
$(this).css('z-index', $('.vs-slider .item').length - $('.vs-slider .item').index(this));
});
$('.vss-nav').on('click', '.prev, .next', function() {
var active = $(this).closest('.vs-slider').find('.item.active');
if ( $(this).hasClass('next') ) {
vss_moveleft($('.vs-slider'));
active.next().addClass('active');
} else {
vss_moveleft( $('.vs-slider'), 'right');
active.prev().addClass('active');
}
active.removeClass('active');
});
function vss_moveleft( slider, type = 'left' ) {
var itemWidth = slider.find('.item').outerWidth() - 299,
itemTotal = slider.find('.item').length,
currentOff = slider.find('.vss-wrap').position().left,
movemVal = type === 'left' ? currentOff - itemWidth : currentOff + itemWidth;
slider.find('.vss-wrap').css('transform', 'translate3d('+ movemVal +'px, 0px, 0px)');
}
});
})(jQuery);
CSS
body {
background: #222
}
.vs-slider {
position: relative;
overflow: hidden;
max-height: 290px;
max-width: 500px;
}
.vs-slider img {
margin: 0;
vertical-align: top;
}
.vs-slider .vss-wrap {
min-width: 90VW;
transform: translate3d(0px, 0px, 0px);
transition: all 0.5s ease 0s;
}
.vs-slider .vss-wrap::after {
clear: both;
width: 100%;
display: block;
content: "";
}
.vs-slider .item {
float: left;
border: 1px solid #fff;
transform: scale(.7);
position: relative;
z-index: 1;
transition: all 1s ease 0s;
margin-right: -299px;
}
.vs-slider .item.active {
transform: scale(1);
z-index: 20 !important;
}
.vs-slider .item:not(.active) {
z-index: 0;
cursor: pointer;
}
.vss-nav {
position: absolute;
margin: 0;
padding: 0;
right: 5px;
bottom: 0;
}
.vss-nav li {
display: inline-block;
color: #fff;
margin: 0 5px;
cursor: pointer;
}
不胜感激。
谢谢
【问题讨论】:
标签: javascript jquery css-animations