谁能告诉我什么';这个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');