我需要一个带点定时器分页的滑块,例如http://www.apple.com。我用了slick.js
。我需要制作一个进度条而不是点。
如何用进度条替换分页按钮?
$(document).ready(function () {
$('.slider').slick({
infinite: true,
autoplay:true,
dots: true,
arrows: false,
autoplaySpeed: 3000,
slidesToShow: 1,
slidesToScroll: 1
});
});
.slider .slick-dots {
padding: 0;
}
.slider .slick-dots li {
position: relative;
display: inline-block;
width: 19%;
height: 15px;
margin: 0 2px 0 0;
padding: 0;
cursor: pointer;
background: #ccbdb6;
transition: width 5s ease-out 0s;
}
.slider .slick-dots li:last-child {
margin-right: 0;
}
.slider .slick-dots li:hover,
.slider .slick-dots li.slick-active {
background: #a08a7f;
}
.slider .slick-dots li button {
display: none !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick.css"/>
<div class="slider">
<div>
<h3>1</h3>
</div>
<div>
<h3>2</h3>
</div>
<div>
<h3>3</h3>
</div>
<div>
<h3>4</h3>
</div>
<div>
<h3>5</h3>
</div>
</div>
<script type="text/javascript" src="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick.min.js"></script>
答案 0 :(得分:5)
昨天必须为我的公司做这件事。 它有点棘手,因为光滑在我们的网站上实现了2个转换:如果我们使用鼠标就滑动,如果我们不使用则会消失..
无论如何,我昨天在挖掘时记得你的帖子,所以我在这里做得更简单。
$(".slider").slick({
infinite: true,
arrows: false,
dots: false,
autoplay: false,
speed: 800,
slidesToShow: 1,
slidesToScroll: 1,
});
//ticking machine
var percentTime;
var tick;
var time = 1;
var progressBarIndex = 0;
$('.progressBarContainer .progressBar').each(function(index) {
var progress = "<div class='inProgress inProgress" + index + "'></div>";
$(this).html(progress);
});
function startProgressbar() {
resetProgressbar();
percentTime = 0;
tick = setInterval(interval, 10);
}
function interval() {
if (($('.slider .slick-track div[data-slick-index="' + progressBarIndex + '"]').attr("aria-hidden")) === "true") {
progressBarIndex = $('.slider .slick-track div[aria-hidden="false"]').data("slickIndex");
startProgressbar();
} else {
percentTime += 1 / (time + 5);
$('.inProgress' + progressBarIndex).css({
width: percentTime + "%"
});
if (percentTime >= 100) {
$('.single-item').slick('slickNext');
progressBarIndex++;
if (progressBarIndex > 2) {
progressBarIndex = 0;
}
startProgressbar();
}
}
}
function resetProgressbar() {
$('.inProgress').css({
width: 0 + '%'
});
clearInterval(tick);
}
startProgressbar();
// End ticking machine
$('.progressBarContainer div').click(function () {
clearInterval(tick);
var goToThisIndex = $(this).find("span").data("slickIndex");
$('.single-item').slick('slickGoTo', goToThisIndex, false);
startProgressbar();
});
&#13;
h3 {
margin:5px 0;
}
.sliderContainer {
position: relative;
}
.slider {
width: 500px;
margin: 30px 50px 50px;
}
.slick-slide {
background: #3a8999;
color: white;
padding: 80px 0 120px;
font-size: 30px;
font-family: "Arial", "Helvetica";
text-align: center;
}
.slick-prev:before,
.slick-next:before {
color: black;
}
.slick-dots {
bottom: -30px;
}
.slick-slide:nth-child(odd) {
background: #e84a69;
}
.progressBarContainer {
position: absolute;
bottom: 20px;
width:300px;
left:150px;
}
.progressBarContainer div {
display: block;
width: 30%;
padding: 0;
cursor: pointer;
margin-right: 5%;
float: left;
color: white;
}
.progressBarContainer div:last-child {
margin-right: 0;
}
.progressBarContainer div span.progressBar {
width: 100%;
height: 4px;
background-color: rgba(255, 255, 255, 0.4);
display: block;
}
.progressBarContainer div span.progressBar .inProgress {
background-color: rgba(255, 255, 255, 1);
width: 0%;
height: 4px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js"></script>
<script src="https://rawgit.com/kenwheeler/slick/master/slick/slick.js"></script>
<link href="https://rawgit.com/kenwheeler/slick/master/slick/slick-theme.css" rel="stylesheet"/>
<link href="https://rawgit.com/kenwheeler/slick/master/slick/slick.css" rel="stylesheet"/>
<div class="sliderContainer">
<div class="slider single-item">
<div>Slide1</div>
<div>Slide2</div>
<div>Slide3</div>
</div>
<div class="progressBarContainer">
<div>
<h3>Slide 1</h3>
<span data-slick-index="0" class="progressBar"></span>
</div>
<div>
<h3>Slide 2</h3>
<span data-slick-index="1" class="progressBar"></span>
</div>
<div>
<h3>Slide 3</h3>
<span data-slick-index="2" class="progressBar"></span>
</div>
</div>
</div>
&#13;
[codepen] [1]
此致
答案 1 :(得分:1)
虽然这个问题有很多下选票,但我会在这里留下我的解决方案,因为我认为它非常整洁。
它完全使用CSS(动画)完成,其诀窍是为每张幻灯片提供一个::after
,其中包含.slick-active
从scaleX(0)
获取动画的进度条到{ {1}}。
类似的东西:
scaleX(1)
唯一的问题是,在第一张幻灯片上,.8s延迟不正确(幻灯片已经可见,并且没有花费.8s滑入视图)。这对我们来说不是一个问题,因为幻灯片放映在幕后,所以大多数访问者都不会注意到它。第一张幻灯片完成后,它将适用于所有后续幻灯片。
答案 2 :(得分:0)
我创建了一个带有光滑滑块的插件,每个指示器内都有进度条。
https://github.com/gsushil999/Slick-Slider-Plugin
enter code here
<div class="sliderContainer">
<div class="slider single-item">
<div>Slide1</div>
<div>Slide2</div>
<div>Slide3</div>
</div>
<div class="progressBarContainer">
<div>
<span data-slick-index="0" class="progressBar"></span>
</div>
<div>
<span data-slick-index="1" class="progressBar"></span>
</div>
<div>
<span data-slick-index="2" class="progressBar"></span>
</div>
</div>
</div>
<script>
$(".slider").slick({
infinite: true,
arrows: false,
dots: false,
autoplay: false,
speed: 500,
slidesToShow: 1,
slidesToScroll: 1
});
//ticking machine
var percentTime;
var tick;
var time = 1;
var progressBarIndex = 0;
var progress = $('.inProgress');
$('.progressBarContainer .progressBar').each(function (index) {
var progress = "<div class='inProgress inProgress" + index + "'></div>";
$(this).html(progress);
});
function startProgressbar() {
resetProgressbar();
percentTime = 0;
tick = setInterval(interval, 10);
}
function interval() {
if (($('.slider .slick-track div[data-slick-index="' + progressBarIndex + '"]').attr("aria-hidden")) === "true") {
progressBarIndex = $('.slider .slick-track div[aria-hidden="false"]').data("slickIndex");
console.log(progressBarIndex);
if (progressBarIndex == 1) {
$(".inProgress0").addClass('on');
$(".inProgress1").removeClass('on');
}
else if (progressBarIndex == 2) {
$(".inProgress0").addClass('on');
$(".inProgress1").addClass('on');
}
else if (progressBarIndex == 0) {
$(".inProgress0").removeClass('on');
$(".inProgress1").removeClass('on');
}
startProgressbar();
} else {
percentTime += 1 / (time + 2);
$('.inProgress' + progressBarIndex).css({
width: percentTime + "%"
});
if (percentTime >= 100) {
$('.single-item').slick('slickNext');
//console.log(progressBarIndex);
if (progressBarIndex == 0) {
$(".inProgress0").addClass('on');
}
else if (progressBarIndex == 1) {
$(".inProgress0").addClass('on');
$(".inProgress1").addClass('on');
}
else if (progressBarIndex == 2) {
$(".inProgress0").removeClass('on');
$(".inProgress1").removeClass('on');
}
progressBarIndex++;
if (progressBarIndex > 2) {
progressBarIndex = 0;
}
startProgressbar();
}
}
}
function resetProgressbar() {
$('.inProgress').css({
width: 0 + '%'
});
clearInterval(tick);
}
startProgressbar();
// End ticking machine
$('.progressBarContainer div').click(function () {
clearInterval(tick);
var goToThisIndex = $(this).find("span").data("slickIndex");
$('.single-item').slick('slickGoTo', goToThisIndex, false);
startProgressbar();
});
</script>