我有一个列表(ul#portfoliolist
),其中每个项目都是不同的导航项目。
当用户将鼠标悬停在任何项目上时,不透明度会从0.65
更改为1
,右边的填充会从0
更改为10px
。当用户移开鼠标时,它们会反转:
$('ul#portfoliolist>li:not(.active)').hover(function(){
$(this).stop().animate({paddingRight:'10px',opacity:1},100);
},function(){
$(this).stop().animate({paddingRight:0,opacity:0.65},300);
})
如果用户点击了列表项,它会从任何其他列表项中删除类active
,并将类active
添加到单击的元素中:
$('ul#portfoliolist>li').click(function(){
$('ul#portfoliolist>li').removeClass('active');
$(this).addClass('active');
//var item = $(this).attr('data-portfolio');
//$('div.portfolio').css({backgroundImage:'url(img/portfolio_'+item+'.png)'})
})
虽然这两个功能完全可以单独使用,但在组合它们时我无法同时做到 - 只有悬停效果成功。
当我将鼠标悬停在上面时,所需的动画可以正常工作,但是当我将光标移开时,会发生辅助悬停功能并覆盖.active
css。
如何使click
功能优先于mouseout
功能的hover
部分?
答案 0 :(得分:1)
$('ul#portfoliolist>li:not(.active)').hover(function(){
$(this).stop().animate({paddingRight:'10px',opacity:1},100);
},function(){
if($this).hasClass('active'){
return;
}
$(this).stop().animate({paddingRight:0,opacity:0.65},300);
})
答案 1 :(得分:1)
似乎只是在StackOverflow上写出这个就足够明确了我自己可以找到解决方案:
$('ul#portfoliolist>li:not(.active)').hover(function(){
$(this).stop().animate({paddingRight:'10px',opacity:1},100);
},function(){
if($(this).hasClass('active')){
$(this).stop().animate({paddingRight:0},300);
} else {
$(this).stop().animate({paddingRight:0,opacity:0.65},300);
}
})
在.active
函数的mouseover
和mouseout
部分之间添加hover
类时,我向{{1}添加了if
语句函数,用于查看在光标进入元素期间是否添加了类mouseout
。