0

我正在制作带有两个导航元素(顶部和底部)的幻灯片。我曾多次使用过代码,但从未以这种方式使用过。

$('#list-links li a, #list-tab li a').hover(function(){
    $('#list-links li, #list-tab li').removeClass('hover');
    var i = $(this).index('#list-links li a, #list-tab li a');
    $(this).parent().addClass('hover');
    $('#slide-wrap').stop().animate({'marginLeft' : width*(-i)});
});

基本上这会在列表中添加和删除一个类(悬停),以便我可以相应地设置样式。问题是它不会以这种方式工作。导航变得独立,这意味着虽然导航 a) 可能在第二张幻灯片上,但导航 b) 不会更新,并且如果它在第一张幻灯片上,悬停类仍然具有。有人可以帮忙吗?

哦,原来的完整代码是这样的:

$(document).ready(function() {

// Declare variables
var width = 718; // width of slide - required for animation calculation
var slides = $('#list-images li');
var numSlides = slides.length;

// Wrap the slides & set the wrap width - this will be used to animate the slider left/right
slides.wrapAll('<div id="slide-wrap"></div>').css({'float' : 'left','width' : width});
$('#slide-wrap').css({width: width * numSlides});

// Hover function - animate the slides based on index of active link
$('#list-links li a').hover(function(){
    $('#list-links li').removeClass('hover');
    var i = $(this).index('#list-links li a');
    $(this).parent().addClass('hover');
    $('#slide-wrap').stop().animate({'marginLeft' : width*(-i)});
});
4

1 回答 1

0

你也可以张贴你的标记吗?

我怀疑您可以通过替换此行来修复它:

$(this).parent().addClass('hover');

有了这个:

$('ul li:nth-of-type(' + (i+1) + ')').addClass('hover');

这会将悬停类应用于li两个导航栏上正确索引处。

工作的jsFiddle


此外,在删除这样的类时,我发现以非常笼统的方式选择它是一个好习惯,这样如果在分配类时出现任何问题,都会得到修复。另一个好的做法是将该类包含在您的选择器中,这样 jQuery 就不必不必要地查看没有该类的元素。

$('ul li.hover').removeClass('hover');

来源

http://api.jquery.com/index/

https://developer.mozilla.org/en-US/docs/CSS/:nth-of-type

于 2013-04-03T11:37:47.777 回答