jQuery 导航幻灯片
jQuery navigation slides
我有一个工作正常的 div
滑块,但我想要一个指示当前活动幻灯片的导航,如果您单击 link,它会显示您单击的幻灯片。我的问题是,每当我从导航中单击 link 时,我的页面就会变得没有响应,我需要关闭选项卡并重新打开 website.I 在许多浏览器中尝试过它,它做同样的事情。当我在单击 event.Can 时添加 "navSlides" 时出现问题 有人向我解释我需要做什么才能使其正常工作?谢谢 !
这是我的JSFIDDLE
contentSlides = $('.slide-wrapper');
navSlides = $('#slide-nav > ul > li > a');
slidesLeng = contentSlides.length - 1;
index = 0;
for (i = 0; i <= slidesLeng; i++) {
$(contentSlides[i]).addClass('slide-' + i);
$(navSlides[i]).addClass('slide-' + i);
}
$('div.slide-wrapper > span').on('mouseover', function () {
$(this).css({ 'font-size': '40px' });
});
$('div.slide-wrapper > span').on('mouseout', function () {
$(this).css({ 'font-size': '50px' });
});
$('.next').on('click', function () {
if (index != slidesLeng) {
$(contentSlides[index]).fadeOut(400, function () {
$(this).removeClass('active');
$(navSlides[index]).removeClass('active');
index++;
$(contentSlides[index]).fadeIn(400).addClass('active');
$(navSlides[index]).addClass('active');
});
}
});
$('.prev').on('click', function () {
if (index != 0) {
$(contentSlides[index]).fadeOut(400, function () {
$(this).removeClass('active');
$(navSlides[index]).removeClass('active');
index--;
$(contentSlides[index]).fadeIn(400).addClass('active');
$(navSlides[index]).addClass('active');
});
}
});
$(navSlides).on('click', function () {
var slideClass = $(this).attr('class');
$(contentSlides[index]).fadeOut(400, function () {
$(this).removeClass('active');
index = 0;
while (slideClass != $(contentSlides[index]).attr('class') || index<=slidesLeng) {
index++;
}
contentSlides[index].fadeIn(400).addClass('active');
});
});
问题是点击处理程序中的 while
循环永远不会退出。表达式 slideClass != $(contentSlides[index]).attr('class') || index<=slidesLeng
始终为真,因为比较是在每个元素的 class 属性 之间进行的。这些不会相同,因为内容幻灯片有额外的 class,例如 slide-wrapper
。
因此,第一张幻灯片的 class 属性 将是 "slide-wrapper active slide-0"
,但第一张幻灯片的 class 属性 link将只是 "slide-0"
.
这可以通过使用 jQuery index function to get the index of the element instead of trying to match the classes. A working version of the click handler is as follows. An updated, working version of the JSFiddle is here: http://jsfiddle.net/kbkkg4ev/ 来补救。
$(navSlides).on('click', function () {
var slideIndex = navSlides.index(this);
$(navSlides).removeClass('active')
$(this).addClass('active');
$(contentSlides[index]).fadeOut(400, function () {
index = slideIndex;
$(this).removeClass('active');
$(contentSlides[index]).fadeIn(400).addClass('active');
});
});
我有一个工作正常的 div
滑块,但我想要一个指示当前活动幻灯片的导航,如果您单击 link,它会显示您单击的幻灯片。我的问题是,每当我从导航中单击 link 时,我的页面就会变得没有响应,我需要关闭选项卡并重新打开 website.I 在许多浏览器中尝试过它,它做同样的事情。当我在单击 event.Can 时添加 "navSlides" 时出现问题 有人向我解释我需要做什么才能使其正常工作?谢谢 !
这是我的JSFIDDLE
contentSlides = $('.slide-wrapper');
navSlides = $('#slide-nav > ul > li > a');
slidesLeng = contentSlides.length - 1;
index = 0;
for (i = 0; i <= slidesLeng; i++) {
$(contentSlides[i]).addClass('slide-' + i);
$(navSlides[i]).addClass('slide-' + i);
}
$('div.slide-wrapper > span').on('mouseover', function () {
$(this).css({ 'font-size': '40px' });
});
$('div.slide-wrapper > span').on('mouseout', function () {
$(this).css({ 'font-size': '50px' });
});
$('.next').on('click', function () {
if (index != slidesLeng) {
$(contentSlides[index]).fadeOut(400, function () {
$(this).removeClass('active');
$(navSlides[index]).removeClass('active');
index++;
$(contentSlides[index]).fadeIn(400).addClass('active');
$(navSlides[index]).addClass('active');
});
}
});
$('.prev').on('click', function () {
if (index != 0) {
$(contentSlides[index]).fadeOut(400, function () {
$(this).removeClass('active');
$(navSlides[index]).removeClass('active');
index--;
$(contentSlides[index]).fadeIn(400).addClass('active');
$(navSlides[index]).addClass('active');
});
}
});
$(navSlides).on('click', function () {
var slideClass = $(this).attr('class');
$(contentSlides[index]).fadeOut(400, function () {
$(this).removeClass('active');
index = 0;
while (slideClass != $(contentSlides[index]).attr('class') || index<=slidesLeng) {
index++;
}
contentSlides[index].fadeIn(400).addClass('active');
});
});
问题是点击处理程序中的 while
循环永远不会退出。表达式 slideClass != $(contentSlides[index]).attr('class') || index<=slidesLeng
始终为真,因为比较是在每个元素的 class 属性 之间进行的。这些不会相同,因为内容幻灯片有额外的 class,例如 slide-wrapper
。
因此,第一张幻灯片的 class 属性 将是 "slide-wrapper active slide-0"
,但第一张幻灯片的 class 属性 link将只是 "slide-0"
.
这可以通过使用 jQuery index function to get the index of the element instead of trying to match the classes. A working version of the click handler is as follows. An updated, working version of the JSFiddle is here: http://jsfiddle.net/kbkkg4ev/ 来补救。
$(navSlides).on('click', function () {
var slideIndex = navSlides.index(this);
$(navSlides).removeClass('active')
$(this).addClass('active');
$(contentSlides[index]).fadeOut(400, function () {
index = slideIndex;
$(this).removeClass('active');
$(contentSlides[index]).fadeIn(400).addClass('active');
});
});