gpt4 book ai didi

jquery - 使用多个 if else 语句缩短代码

转载 作者:行者123 更新时间:2023-12-01 02:57:11 24 4
gpt4 key购买 nike

我有一组图像,我试图根据用户窗口的位置激活(更改不透明度)。下面的代码可以工作,但只能通过一长串的 if else 语句。有没有办法缩短下面的代码?

//Function to activate and deactivate the buttons on the side menu
function navIndicator() {
var winNow = $(window).scrollTop();
var posRoi = $('#roi').offset();
var posRoiNow = posRoi.top;
//Activate the propper button corresponding to what section the user is viewing
if (winNow == posRoiNow * 0) {
$('#homeBut a img.active').stop().animate({
opacity: 1
} {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#homeBut').addClass("viewing")
} else {
$('#homeBut a img.active').stop().animate({
opacity: 0
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#homeBut').removeClass("viewing")
}
if (winNow == posRoiNow) {
$('#roiBut a img.active').stop().animate({
opacity: 1
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#roiBut').addClass("viewing")
} else {
$('#roiBut a img.active').stop().animate({
opacity: 0
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#roiBut').removeClass("viewing")
}
if (winNow == posRoiNow * 2) {
$('#dmsBut a img.active').stop().animate({
opacity: 1
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#dmsBut').addClass("viewing")
} else {
$('#dmsBut a img.active').stop().animate({
opacity: 0
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#dmsBut').removeClass("viewing")
}
if (winNow == posRoiNow * 3) {
$('#techBut a img.active').stop().animate({
opacity: 1
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#techBut').addClass("viewing")
} else {
$('#techBut a img.active').stop().animate({
opacity: 0
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#techBut').removeClass("viewing")
}
if (winNow == posRoiNow * 4) {
$('#impBut a img.active').stop().animate({
opacity: 1
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#impBut').addClass("viewing")
} else {
$('#impBut a img.active').stop().animate({
opacity: 0
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#impBut').removeClass("viewing")
}
if (winNow == posRoiNow * 5) {
$('#virBut a img.active').stop().animate({
opacity: 1
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#virBut').addClass("viewing")
} else {
$('#virBut a img.active').stop().animate({
opacity: 0
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#virBut').removeClass("viewing")
}
if (winNow == posRoiNow * 6) {
$('#biBut a img.active').stop().animate({
opacity: 1
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#biBut').addClass("viewing")
} else {
$('#biBut a img.active').stop().animate({
opacity: 0
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#biBut').removeClass("viewing")
}
if (winNow == posRoiNow * 7) {
$('#contBut a img.active').stop().animate({
opacity: 1
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#contBut').addClass("viewing")
} else {
$('#contBut a img.active').stop().animate({
opacity: 0
}, {
queue: false,
duration: 300,
easing: "easeOutExpo"
});
$('#contBut').removeClass("viewing")
}
};

最佳答案

除了选择器之外,所有代码看起来都相同。制作了一个要迭代的对象,因此要处理重复的任务。您可以使用 toggleClass 通过 bool 值添加或删除类。我还认为您的示例在 animate 语法中缺少逗号。

//Function to activate and deactivate the buttons on the side menu
function navIndicator(){
var winNow = $(window).scrollTop(),
posRoi = $('#roi').offset(),
posRoiNow = posRoi.top,
// Didn't copy paste all of the buttons here, but you get it ;)
check = [ $('#homeBut'), $('#roiBut') ];

$.each( check, function( multiplier, btn ) {

var match = (winNow == posRoiNow * multiplier ),
opacity = ( match ) ? 1 : 0;

btn.find( 'a img.active' )
.stop()
.animate({opacity:opacity},{queue:false,duration:300,easing:"easeOutExpo"});

btn.toggleClass( 'viewing', match );

});

}

关于jquery - 使用多个 if else 语句缩短代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18478038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com