2017-10-09 2 views
0

Siehe den unten stehenden Link, was ich versuche zu tun ist selbsterklärend ... Ich wechsle zwischen Divs und die aktuelle div ausblenden und eine neue verblassen. Mein Problem ist, wenn Sie das Beispiel versuchen ... Einige Male, wenn ich zwischen "Küche" und "Elektronik" umschalte, bekomme ich Extrablenden und Fade-Outs. Weiß jemand, dass ich das beheben kann?Jquery FadeIn() Methode passiert zweimal

HTML:

  <div id="panelControllers"> 
      <ul> 
       <li> 
        <button class="panelControlBtn" data-id="1"> 
        General 
        </button> 
       </li> 
       <li> 
        <button class="panelControlBtn" data-id="2"> 
        Kitchen 
        </button> 
       </li> 
       <li> 
        <button class="panelControlBtn" data-id="3"> 
        Electronics 
        </button> 
       </li> 
        <li> 
        <button class="panelControlBtn" data-id="4"> 
        Outside 
        </button> 
       </li> 
        <li> 
        <button class="panelControlBtn" data-id="5"> 
        Other 
        </button> 
       </li> 
       </ul> 
     </div> 

     <div id="panelContainer"> 
      <div id="panel1" class="panel"> 
       <div class="row general"> 
        <button data-value="8" value="4000" class="">Central Air Conditioner</button> 
        <button data-value="8" value="1000" class="">Room Air Conditioner</button> 
        <button data-value="8" value="300" class="">Portable Heater</button> 
       </div> 
       <div class="row general"> 
        <button value="3" class="4900">Clothes Dryer</button> 
        <button value="3" class="512">Washer</button> 
        <button value="1" class="1000">Clothes Iron</button> 
        <button value="3" class="500">Upright Vacuum</button> 
        <button value="3" class="40">Hand Vacuum</button> 
       </div> 
       <div class="row general"> 
        <button data-value="8" value="177" class="">Air Humidifier</button> 
        <button data-value="12" value="257" class="">Air Dehumidifier</button> 
        <button data-value="7" value="300" class="">Furnace Fan</button> 
        <button data-value="12" value="125" class="">Ceiling Fan</button> 
        <button data-value="2" value="1000" class="">Fan - Attic</button> 
        <button data-value="" value="300" class="">Fan - Furnace</button> 
       </div> 
      </div> 
      <div id="panel2" class="panel" style="display:none;"> 
       <div class="row kitchen"> 
        <button data-value="12" value="800">Large Refridgerator</button> 
        <button data-value="12" value="400">Small Refrigerator</button> 
        <button data-value="12" value="350">Freezer</button> 
        <button data-value="" value=""></button> 
       </div> 
       <div class="row kitchen"> 
        <button data-value="0.5" value="1200">Oven</button> 
        <button data-value="0.5" value="12200">Range</button> 
        <button data-value="0.5" value="1200">Hot Plate</button> 
        <button data-value="0.5" value="1450">Microwave Oven</button> 
        <button data-value="0.5" value="1000">Microwave</button> 
        <button data-value="0.5" value="1200">Toaster Oven</button> 
        <button data-value="0.5" value="1200">Electric Frying Pan</button> 
        <button data-value="1" value="1200">DishWasher</button> 
        <button data-value="" value=""></button> 
       </div> 
       <div class="row kitchen"> 
        <button data-value="1" value="900">Coffee Maker</button> 
        <button data-value="0.1" value="400">Blender/Food Processor</button> 
        <button data-value="0.5" value="500">Blender</button> 
        <button data-value="0.5" value="1200">Kettle</button> 
       </div> 
       <div class="row kitchen"> 
        <button data-value="0.5" value="850">Toaster</button> 
        <button data-value="0.5" value="1500">Electric Grill</button> 
        <button data-value="0.5" value="1200">Waffle Iron</button> 
        <button data-value="0.5" value="250">Rice Cooker</button> 
       </div> 
      </div> 
      <div id="panel3" class="panel" style="display:none;"> 
       <div class="row electronics"> 
        <button value="" value="">Small LED TV</button> 
        <button value="" value="">Large LED TV</button> 
        <button value="" value="">Small LCD TV</button> 
        <button value="" value="">Large LCD TV</button> 
        <button value="" value="40">VCR</button> 

        <button value="" value="30">CD Player</button> 
        <button value="" value=""></button> 
        <button value="" value=""></button> 
        <button value="" class=""></button> 
        <button value="" class=""></button> 
       </div> 
       <div class="row electronics"> 
        <button value="" class="50">Laptop</button> 
        <button value="" class="300">Desktop Computer</button> 
        <button value="" value="100">Inkjet Printer</button> 
        <button value="" value="100">Lazer Printer</button> 

       </div> 
       <div class="row electronics"> 
        <button value="" value="1">Electric Clock</button> 
        <button value="" value="1">Clock Radio</button> 

        <button value="" class="100">Radiotelephone</button> 
        <button value="" class="20">Stereo</button> 

       </div> 
       <div class="row electronics"> 
        <button data-value="" value="12">Shaver</button> 
        <button data-value="" value="1000">Blow Dryer</button> 

       </div> 
       </div> 
      </div> 

JS

var currentPanel = 1; 
$('.panelControlBtn').on("click", function() { 
    var ID = $(this).attr('data-id'); 
    if (ID != currentPanel) { 
    $(".panel").fadeOut('fast', function() { 
     $("#panel" + ID).fadeIn('fast'); 
    }); 
currentPanel = ID; 
    } 
}); 

https://jsfiddle.net/L7cqnmma/

+0

Es ist, weil Sie Dinge tun, verblassen und ausbleichen. –

Antwort

0

Der Grund dafür ist, dass $(".panel").fadeOut('fast'... iteriert durch jedes .panel Element. Wenn Sie an diese Funktion fadeIn anhängen, passiert fadeIn mehr als einmal, was Sie nicht passieren wollen. Sie müssen fadeIn anwenden, nachdem Sie das letzte .panel Element ausgeblendet haben.

Meine vorgeschlagenen fix kommt mit den glorreichen promise():

$('.panelControlBtn').on("click", function() { 
    var ID = $(this).attr('data-id'); 
    if (ID != currentPanel) { 
    $(".panel").fadeOut('fast').promise().done(function() { //Promise ensures that fadeOuts are finished before firing the upcoming action 
     $("#panel" + ID).fadeIn('fast'); 
    }); 
    currentPanel = ID; 
    } 
}); 

Ein Arbeits Schnipsel unten.

var currentPanel = 1; 
 

 
$('.panelControlBtn').on("click", function() { 
 
    var ID = $(this).attr('data-id'); 
 
    if (ID != currentPanel) { 
 
    $(".panel").fadeOut('fast').promise().done(function() { //Promise ensures that fadeOuts are finished before firing the upcoming action 
 
     $("#panel" + ID).fadeIn('fast'); 
 
    }); 
 
    currentPanel = ID; 
 
    } 
 
});
#panelControllers { 
 
    height: 30px; 
 
} 
 

 
#panelControllers ul li { 
 
    float: left; 
 
    list-style: none; 
 
} 
 

 
#panelContainer { 
 
    position: relative; 
 
} 
 

 
.panel { 
 
    width: 100%; 
 
    height: 300px; 
 
    position: absolute; 
 
    left: 0; 
 
    top: 0; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="panelControllers"> 
 
\t \t \t \t <ul> 
 
\t \t \t \t  <li> 
 
\t \t \t \t  <button class="panelControlBtn" data-id="1"> 
 
\t \t \t \t   General 
 
\t \t \t \t  </button> 
 
\t \t \t \t  </li> 
 
\t \t \t \t  <li> 
 
\t \t \t \t  <button class="panelControlBtn" data-id="2"> 
 
\t \t \t \t   Kitchen 
 
\t \t \t \t  </button> 
 
\t \t \t \t  </li> 
 
\t \t \t \t  <li> 
 
\t \t \t \t  <button class="panelControlBtn" data-id="3"> 
 
\t \t \t \t   Electronics 
 
\t \t \t \t  </button> 
 
\t \t \t \t  </li> 
 
\t \t \t \t   <li> 
 
\t \t \t \t  <button class="panelControlBtn" data-id="4"> 
 
\t \t \t \t   Outside 
 
\t \t \t \t  </button> 
 
\t \t \t \t  </li> 
 
\t \t \t \t   <li> 
 
\t \t \t \t  <button class="panelControlBtn" data-id="5"> 
 
\t \t \t \t   Other 
 
\t \t \t \t  </button> 
 
\t \t \t \t  </li> 
 
\t \t \t \t </ul> 
 
\t \t \t </div> 
 

 
\t \t \t <div id="panelContainer"> 
 
\t \t \t \t <div id="panel1" class="panel"> 
 
\t \t \t \t \t <div class="row general"> 
 
\t \t \t \t \t \t <button data-value="8" value="4000" class="">Central Air Conditioner</button> 
 
\t \t \t \t \t \t <button data-value="8" value="1000" class="">Room Air Conditioner</button> 
 
\t \t \t \t \t \t <button data-value="8" value="300" class="">Portable Heater</button> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t \t <div class="row general"> 
 
\t \t \t \t \t \t <button value="3" class="4900">Clothes Dryer</button> 
 
\t \t \t \t \t \t <button value="3" class="512">Washer</button> 
 
\t \t \t \t \t \t <button value="1" class="1000">Clothes Iron</button> 
 
\t \t \t \t \t \t <button value="3" class="500">Upright Vacuum</button> 
 
\t \t \t \t \t \t <button value="3" class="40">Hand Vacuum</button> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t \t <div class="row general"> 
 
\t \t \t \t \t \t <button data-value="8" value="177" class="">Air Humidifier</button> 
 
\t \t \t \t \t \t <button data-value="12" value="257" class="">Air Dehumidifier</button> 
 
\t \t \t \t \t \t <button data-value="7" value="300" class="">Furnace Fan</button> 
 
\t \t \t \t \t \t <button data-value="12" value="125" class="">Ceiling Fan</button> 
 
\t \t \t \t \t \t <button data-value="2" value="1000" class="">Fan - Attic</button> 
 
\t \t \t \t \t \t <button data-value="" value="300" class="">Fan - Furnace</button> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t </div> 
 
\t \t \t \t <div id="panel2" class="panel" style="display:none;"> 
 
\t \t \t \t \t <div class="row kitchen"> 
 
\t \t \t \t \t \t <button data-value="12" value="800">Large Refridgerator</button> 
 
\t \t \t \t \t \t <button data-value="12" value="400">Small Refrigerator</button> 
 
\t \t \t \t \t \t <button data-value="12" value="350">Freezer</button> 
 
\t \t \t \t \t \t <button data-value="" value=""></button> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t \t <div class="row kitchen"> 
 
\t \t \t \t \t \t <button data-value="0.5" value="1200">Oven</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="12200">Range</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="1200">Hot Plate</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="1450">Microwave Oven</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="1000">Microwave</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="1200">Toaster Oven</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="1200">Electric Frying Pan</button> 
 
\t \t \t \t \t \t <button data-value="1" value="1200">DishWasher</button> 
 
\t \t \t \t \t \t <button data-value="" value=""></button> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t \t <div class="row kitchen"> 
 
\t \t \t \t \t \t <button data-value="1" value="900">Coffee Maker</button> 
 
\t \t \t \t \t \t <button data-value="0.1" value="400">Blender/Food Processor</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="500">Blender</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="1200">Kettle</button> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t \t <div class="row kitchen"> 
 
\t \t \t \t \t \t <button data-value="0.5" value="850">Toaster</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="1500">Electric Grill</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="1200">Waffle Iron</button> 
 
\t \t \t \t \t \t <button data-value="0.5" value="250">Rice Cooker</button> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t </div> 
 
\t \t \t \t <div id="panel3" class="panel" style="display:none;"> 
 
\t \t \t \t \t <div class="row electronics"> 
 
\t \t \t \t \t \t <button value="" value="">Small LED TV</button> 
 
\t \t \t \t \t \t <button value="" value="">Large LED TV</button> 
 
\t \t \t \t \t \t <button value="" value="">Small LCD TV</button> 
 
\t \t \t \t \t \t <button value="" value="">Large LCD TV</button> 
 
\t \t \t \t \t \t <button value="" value="40">VCR</button> 
 

 
\t \t \t \t \t \t <button value="" value="30">CD Player</button> 
 
\t \t \t \t \t \t <button value="" value=""></button> 
 
\t \t \t \t \t \t <button value="" value=""></button> 
 
\t \t \t \t \t \t <button value="" class=""></button> 
 
\t \t \t \t \t \t <button value="" class=""></button> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t \t <div class="row electronics"> 
 
\t \t \t \t \t \t <button value="" class="50">Laptop</button> 
 
\t \t \t \t \t \t <button value="" class="300">Desktop Computer</button> 
 
\t \t \t \t \t \t <button value="" value="100">Inkjet Printer</button> 
 
\t \t \t \t \t \t <button value="" value="100">Lazer Printer</button> 
 

 
\t \t \t \t \t </div> 
 
\t \t \t \t \t <div class="row electronics"> 
 
\t \t \t \t \t \t <button value="" value="1">Electric Clock</button> 
 
\t \t \t \t \t \t <button value="" value="1">Clock Radio</button> 
 
\t \t \t \t \t \t 
 
\t \t \t \t \t \t <button value="" class="100">Radiotelephone</button> 
 
\t \t \t \t \t \t <button value="" class="20">Stereo</button> 
 

 
\t \t \t \t \t </div> 
 
\t \t \t \t \t <div class="row electronics"> 
 
\t \t \t \t \t \t <button data-value="" value="12">Shaver</button> 
 
\t \t \t \t \t \t <button data-value="" value="1000">Blow Dryer</button> 
 

 
\t \t \t \t \t </div> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t </div>

0

Warum nicht geben den Tasten individuellen IDs. Es wird viel einfacher sein. Auf diese Weise können Sie es einfach so machen, wenn einer geklickt wird, den anderen ausblenden.

0
<script> 
var currentPanel = 1; 
$('.panelControlBtn').on("click", function() { 
var ID = $(this).attr('data-id'); 
if (ID != currentPanel) { 
$(".panel").hide(); 
$("#panel" + ID).fadeIn('slow'); 
currentPanel = ID; 
} 
}); 
</script> 

versuchen, dieses Skript

0

Sie haben drei Platten in Seite, also $ ("Panel") liefert 3-Panel-Elemente und ausgeblendet. Nach dem Ausblenden jedes Elements beginnt fadeIn erneut. Sie können nur aktives Panel erkennen, indem Sie eine aktive Klasse für den Switch hinzufügen, so dass Sie fadeOut nur im aktiven Panel aufrufen können.