谁能告诉我什么';这个switch语句(javascript)有什么问题?
嘿,大家好,这是你典型的滑块-自动和用户点击控制。问题是当你们点击时,若你们在最后一张幻灯片上,它不应该显示右箭头,若你们在第一张幻灯片上,它不应该显示左箭头。如果您在其他地方,它应该显示两个箭头。然而,在最后一张幻灯片上,它仍然显示右箭头。但是,在第一张幻灯片上,它不会正确地显示左箭头。但是,当你到达中间幻灯片时,它不会返回右箭头:谁能告诉我什么';这个switch语句(javascript)有什么问题?,javascript,jquery,slider,hide,show,Javascript,Jquery,Slider,Hide,Show,嘿,大家好,这是你典型的滑块-自动和用户点击控制。问题是当你们点击时,若你们在最后一张幻灯片上,它不应该显示右箭头,若你们在第一张幻灯片上,它不应该显示左箭头。如果您在其他地方,它应该显示两个箭头。然而,在最后一张幻灯片上,它仍然显示右箭头。但是,在第一张幻灯片上,它不会正确地显示左箭头。但是,当你到达中间幻灯片时,它不会返回右箭头: $(".paging").show(); $(".image_reel img:first").addClass("active"); $active =
$(".paging").show();
$(".image_reel img:first").addClass("active");
$active = $(".image_reel img:first");
var imageWidth = $(".window").width();
var imageSum = $(".image_reel img").size();
var imageReelWidth = imageWidth * imageSum;
$(".image_reel").css({'width' : imageReelWidth});
rotate = function(){
var triggerId = $active.attr('src').substring(7,8);
var image_reelPosition = (triggerId - 1) * imageWidth;
$(".image_reel img").removeClass("active");
$active.addClass("active");
switch ($active.attr('src')) {
case "images/4.png":
var $lastPic = $active.attr("src");
manageControls($lastPic);
break;
case "images/1.png":
var $firstPic = $active.attr('src');
manageControls($firstPic);
break;
case "image/2.png":
var $standardPic = $active.attr('src');
manageControls($standardPic);
break;
case "image/3.png":
var $standardPic = $actice.attr('src');
manageControls($standardPic);
break;
}
$(".image_reel").animate({
left: -image_reelPosition
}, 500);
};
rotateSwitch = function(){
play = setInterval(function(){
if(!$(".paging a").show()) $(".paging a").show(); //This is CRITICAL - this makes sure the arrows reappear after they have been removed
$active = $(".image_reel img.active").parent().next().find("img");
if ($active.length === 0){
$active = $('.image_reel img:first');
var $firstPic = $active.attr("src");
manageControls($firstPic);
}
rotate();
}, 5000);
};
rotateSwitch();
$(".paging a").click(function(){
$active = ($(this).attr('id')=='rightCtr') ? $(".image_reel img.active").parent().next().find('img') : $(".image_reel img.active").parent().prev().find('img');
if ($active.length === 0){
$active = $('.image_reel img:first');
}
clearInterval(play);
rotate();
rotateSwitch();
return false;
});
manageControls = function(whichImg){
(whichImg == "images/4.png") ? $(".paging a#rightCtr").hide() : $(".paging a#rightCtr").show();
(whichImg == "images/1.png") ? $(".paging a#leftCtr").hide() : $(".paging a#rightCtr").show();
if(whichImg != "images/1.png" || whichImg != "images/4.png"){
$(".paging a#rightCtr").show();
$(".paging a#rightCtr").show();
}
};
html:
谢谢你的回复 switch语句很奇怪,但我认为没关系。我认为问题在于“manageControls”功能。在最后一个
if
语句中,同样的操作执行两次。此外,if
中的表达式将始终为true
我说开关是“奇怪的”,因为它是:
switch ($active.attr('src')) {
case "images/4.png":
var $lastPic = $active.attr("src");
manageControls($lastPic);
break;
嗯。因此,对于第一种情况,您现在知道活动元素的“src”属性是“images/4.png”。那么,如果您知道这一点,为什么需要再次获取它来设置“$lastPic”变量?为什么需要这些变量?为什么不将整个开关向下折叠到
manageControls($active.attr('src'));
它正在工作,您只是有一个输入错误:
var $standardPic = $actice.attr('src');
^
应该是
var $standardPic = $active.attr('src');
注意事项:
- 您的代码可以以更优雅的方式重写,您可以使用另一种逻辑来代替
switch
语句,特别是在jquery
选择器的帮助下
- 通常,它有助于javascript调试和web开发,并且它有一个显示错误的控制台
您从错误控制台获得什么输出?另外,javascript开关语句中是否必须使用“default”呢?我没有发现任何错误。我所知道的是,当我在最后一张幻灯片上时,左箭头不会消失,它应该基于开关状态。在第一张幻灯片上,左箭头会消失,但在第二张幻灯片上,左箭头不会回来。@Stephen否,默认值
大小写不是必需的。一个问题是manageControls中,第二张幻灯片中的左箭头应该是leftctr而不是rightctr。但你的建议也确实起了作用。例如,对于switch语句,当不在第一张幻灯片和最后一张幻灯片上时,它不会同时返回两个按钮,但我们的解决方案会返回。你知道为什么你的手机有,而交换机没有?奇怪,因为他们似乎在做同样的事情。这可能是@aularon发现的问题。
var $standardPic = $active.attr('src');