2017-10-09 64 views
0

请参阅下面的链接,我想要做的是自我解释...我在div之间切换,并且当前div淡出并且一个新的淡入淡出。我的问题是,如果你尝试这个例子......有时当我在“厨房”和“电子”之间切换时,我会得到额外的淡入淡出和淡出。有谁知道我可以解决这个问题?Jquery FadeIn()方法发生两次

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

这是因为你正在做的事情,淡入淡出。 –

回答

0

其原因是,$(".panel").fadeOut('fast'...遍历每个.panel元件。当您将fadeIn附加到此功能时,fadeIn会发生多次,您不希望发生这种情况。在淡出最后一个.panel元素后,您必须应用fadeIn

我修复建议自带的光荣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; 
    } 
}); 

一个工作片断如下。

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

你为什么不给按钮不同的ID号。它会更简单。这样你就可以在点击时隐藏另一个。

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> 

尝试脚本

0

你在页三面围板,因此$( “板”)返回3个屏元件淡出。 淡出每个元素后,fadeIn再次启动。 您只能通过在交换机上添加活动类来检测活动面板,以便只能在活动面板上调用fadeOut。