如何创建一个简单的滑块?
How to create a simple slider?
我已经构建了以下旋转木马,但是当我到达最后一张图片或第一张图片时,我想返回我想显示需要显示的图片。例如,当您点击向右箭头显示第一张图片时到达最后一张图片。
有人知道如何改进吗?
https://jsfiddle.net/6nhuk7vm/
jQuery(document).ready(function ($) {
var currentPosition = 0;
var slideWidth = 1200;
var slides = $('.slide');
var numberOfSlides = slides.length;
var slideShowInterval;
var speed = 7000;
slideShowInterval = setInterval(changePosition, speed);
slides.wrapAll('<div id="slidesHolder"></div>')
slides.css({ 'float' : 'left' });
$('#slidesHolder').css('width', slideWidth * numberOfSlides);
$('#slideshow')
.append('<span class="nav" id="leftNav"></span>')
.append('<span class="nav" id="rightNav"></span>');
manageNav(currentPosition);
$('.nav').bind('click', function() {
currentPosition = ($(this).attr('id')=='rightNav')
? currentPosition+1 : currentPosition-1;
manageNav(currentPosition);
clearInterval(slideShowInterval);
slideShowInterval = setInterval(changePosition, speed);
moveSlide();
});
function manageNav(position) {
$('#leftNav').css('position','absolute')
$('#rightNav').css('position','absolute')
}
function changePosition() {
if(currentPosition == numberOfSlides - 1) {
currentPosition = 0;
manageNav(currentPosition);
} else {
currentPosition++;
manageNav(currentPosition);
}
moveSlide();
}
function moveSlide() {
$('#slidesHolder')
.animate({'marginLeft' : slideWidth*(-currentPosition)});
}
});
在系统的 right/left 端对 'wrap' 产生 'carousel' 效果的标准方法是使用模 %
.
考虑您的代码:
currentPosition = ($(this).attr('id')=='rightNav')
? currentPosition+1 : currentPosition-1;
为右侧添加一个位置,为左侧删除一个位置。现在,我们需要 "bound/wrap" 它在限制范围内。这很简单,有:
currentPosition = (currentPosition + numberOfSlides) % numberOfSlides;
那有什么作用?
如果 currentPosition 为 -1,它会添加全部数量,最后得到 numberOfSlides - 1
,模数无效。
如果 currentPosition 大于 0,它将变成大于 numberOfSlides 的值,模(余数)函数将恢复它的正确值。
我修复了你的滑块。 Fiddle: JSFIDDLE
if(currentPosition > numberOfSlides-1){
currentPosition = 0;
}
if(currentPosition < 0){
currentPosition = numberOfSlides-1;
}
刚刚添加了几个 if =)
我已经构建了以下旋转木马,但是当我到达最后一张图片或第一张图片时,我想返回我想显示需要显示的图片。例如,当您点击向右箭头显示第一张图片时到达最后一张图片。
有人知道如何改进吗?
https://jsfiddle.net/6nhuk7vm/
jQuery(document).ready(function ($) {
var currentPosition = 0;
var slideWidth = 1200;
var slides = $('.slide');
var numberOfSlides = slides.length;
var slideShowInterval;
var speed = 7000;
slideShowInterval = setInterval(changePosition, speed);
slides.wrapAll('<div id="slidesHolder"></div>')
slides.css({ 'float' : 'left' });
$('#slidesHolder').css('width', slideWidth * numberOfSlides);
$('#slideshow')
.append('<span class="nav" id="leftNav"></span>')
.append('<span class="nav" id="rightNav"></span>');
manageNav(currentPosition);
$('.nav').bind('click', function() {
currentPosition = ($(this).attr('id')=='rightNav')
? currentPosition+1 : currentPosition-1;
manageNav(currentPosition);
clearInterval(slideShowInterval);
slideShowInterval = setInterval(changePosition, speed);
moveSlide();
});
function manageNav(position) {
$('#leftNav').css('position','absolute')
$('#rightNav').css('position','absolute')
}
function changePosition() {
if(currentPosition == numberOfSlides - 1) {
currentPosition = 0;
manageNav(currentPosition);
} else {
currentPosition++;
manageNav(currentPosition);
}
moveSlide();
}
function moveSlide() {
$('#slidesHolder')
.animate({'marginLeft' : slideWidth*(-currentPosition)});
}
});
在系统的 right/left 端对 'wrap' 产生 'carousel' 效果的标准方法是使用模 %
.
考虑您的代码:
currentPosition = ($(this).attr('id')=='rightNav') ? currentPosition+1 : currentPosition-1;
为右侧添加一个位置,为左侧删除一个位置。现在,我们需要 "bound/wrap" 它在限制范围内。这很简单,有:
currentPosition = (currentPosition + numberOfSlides) % numberOfSlides;
那有什么作用?
如果 currentPosition 为 -1,它会添加全部数量,最后得到 numberOfSlides - 1
,模数无效。
如果 currentPosition 大于 0,它将变成大于 numberOfSlides 的值,模(余数)函数将恢复它的正确值。
我修复了你的滑块。 Fiddle: JSFIDDLE
if(currentPosition > numberOfSlides-1){
currentPosition = 0;
}
if(currentPosition < 0){
currentPosition = numberOfSlides-1;
}
刚刚添加了几个 if =)