2012-03-30 126 views
0

我知道這個jQuery代碼的很大一部分是不必要的,特別是在重複的fadeOutfadeIn事件中。請幫我簡化這個jQuery代碼

<script type='text/javascript'> 
     $(function(){ 
       $('.panel').hide(); 

       $('.work_button').click(function(){ 
        $('#cms,#contact').fadeOut(function(){ 
        $('#work').fadeIn(); 
        }); 
       }); 

       $('.cms_button').click(function(){ 
        $('#work,#contact').fadeOut(function(){ 
          $('#cms').fadeIn(); 
        }); 
       }); 

       $('.contact_button').click(function(){ 
        $('#cms,#work').fadeOut(function(){ 
          $('#contact').fadeIn(); 
        }); 
       }); 

       $('.home_button').click(function(){ 
        $('.panel:visible').fadeOut(); 
       }); 
     }); 
    </script> 

<div class="menu"> 
<ul class="menu"> 
<li class="home_button">home</li> 
<li class="work_button">work</li> 
<li class="cms_button">cms</a></li> 
<li class="contact_button">contact</a></li> 
</ul> 
</div> 

    <div class="panel" id="work"> 
     <p>...</p> 
    </div> 

    <div class="panel" id="cms"> 
     <p>...</p> 
    </div> 

    <div class="panel" id="contact"> 
     <p>...</p> 
    </div> 
+0

這類問題更適合於http://codereview.stackexchange.com/ – Blazemonger 2012-03-30 13:17:44

+0

我會前往那邊。謝謝。 – Adam 2012-03-30 13:24:24

回答

0
$(function(){ 
     $('.panel').hide(); 

     $('.work_button,.cms_button,.home_button').click(function(){ 
      var thiss=$(this); 
      $('.panel').fadeOut(function(){ 
      thiss.fadeIn(); 
      }); 
     }); 
     $('.home_button').click(function(){ 
      $('.panel:visible').fadeOut(); 
     }); 

}); 
+0

這不會起作用,因爲點擊函數中的$(this)'指向所有面板(來自'fadeOut'的'this')。 – Mottie 2012-03-30 13:24:10

+0

yaa ...我錯過了。謝謝。 – 2012-03-30 13:25:48

-1

使用jQuery UI,也許會讓生活更輕鬆!

<script type="text/javascript"> 
    jQuery(document).ready(function($) { 
     $('#panels').accordion(); 
    }); 
</script> 

<div id="#panels"> 
    <h3><a href="#">Work</a></h3> 
    <div class="panel" id="work"> 
     <p>...</p> 
    </div> 

    <h3><a href="#">CMS</a></h3> 
    <div class="panel" id="cms"> 
     <p>...</p> 
    </div> 

    <h3><a href="#">Contact</a></h3> 
    <div class="panel" id="contact"> 
     <p>...</p> 
    </div> 
</div> 
+0

我不想要手風琴,我想要divs淡入淡出。代碼起作用,我只是想簡化它。 – Adam 2012-03-30 13:31:46

0
<script type='text/javascript'> 
    $(function(){ 
     $('.panel').hide(); 
     $('.work_button').click(function(){ 
      FadeOutIn($('#cms,#contact'), $('#work')); 
     }); 
     $('.cms_button').click(function(){ 
      FadeOutIn($('#work,#contact'), $('#cms')); 
     }); 
     $('.contact_button').click(function(){ 
      FadeOutIn($('#cms,#work'), $('#contact')); 
     }); 
     $('.home_button').click(function(){ 
      FadeOutIn($('.panel:visible'), null)); 
     }); 
    }); 

    function FadeOutIn(fadeOutElements, fadeInElements) { 
     fadeOutElements.fadeOut(function(){ 
      fadeInElements.fadeIn(); 
     }); 
    } 
</script> 
1

我會說出相同類別的名稱作爲面板ID按鈕:

<button class="home">Home</button> 
<button class="work">Work</button> 
<button class="cms">CMS</button> 
<button class="contact">Contact</button> 

<div class="panel" id="home"> 
    <p>..Home..</p> 
</div> 

<div class="panel" id="work"> 
    <p>..work..</p> 
</div> 

<div class="panel" id="cms"> 
    <p>..cms..</p> 
</div> 

<div class="panel" id="contact"> 
    <p>..contact..</p> 
</div>​ 

然後你就可以簡化您的腳本(demo):

$(function() { 
    $('.panel').hide(); 

    $('button').click(function(){ 
     var tar = $(this).attr('class'); // replace "_button" if there 
     $('.panel').fadeOut(function(){ 
      $('#' + tar).fadeIn(); 
     }); 

    }); 

});​ 

如果問我如何使菜單工作,我會做this

$(function() { 
    $('.panel:not(#home)').hide(); 

    $('.menu li').click(function() { 
     var tar = '#' + $(this).attr('class').replace("_button",''); 
     $('.panel:not(' + tar + ')').fadeOut(); 
     $(tar).fadeIn(); 
    }); 

});​ 
+0

沒有「按鈕」。任何具有名爲「按鈕」的元素實際上都是一個鏈接。演示行爲不可靠。 – Adam 2012-03-30 13:56:08

+0

不知道你的意思是...如果你的意思是它淡入淡出的方式,我只是複製你使用的方法。如果你想知道我該怎麼做,請查看[這個演示](http://jsfiddle.net/Mottie/q4NUN/1/)。 – Mottie 2012-03-30 14:39:14