【问题标题】:jQuery slideDown and slideUp toggle issuesjQuery slideDown 和 slideUp 切换问题
【发布时间】:2012-01-01 17:23:48
【问题描述】:

所以基本上我刚开始使用 jQuery 和 JS,但我遇到了问题。

我有一个小菜单,当用户单击其中一个链接时,内容会向下滑动。如果已经有一个盒子打开,它会向上滑动。

我的问题是,当您单击相同的链接再次关闭它时,它会向上滑动,但是因为 jQuery 代码告诉它再次向下滑动,所以它确实如此。这意味着一旦其中一个内容打开,您就永远无法关闭其中一个内容。

我的 jQuery 代码是:

jQuery(document).ready(function(){ 

    jQuery(".radius5").hide();

    jQuery("a#contact-btn").click(function() {
        jQuery(".radius5").slideUp();
        jQuery("div#contact").slideDown("slow");
    });

    jQuery("a#about-btn").click(function() {
        jQuery(".radius5").slideUp();
        jQuery("div#about").slideDown("slow"); 
    });

    jQuery("a#portfolio-btn").click(function() {
        jQuery(".radius5").slideUp();
        jQuery("div#portfolio").slideDown("slow-up");
    });

}); 

和 HTML 代码(当然是简化的):

    <a id="contact-btn" class="btn-slide" href="#">Contact</a>
    <a id="about-btn" class="btn-slide" href="#">About</a>
    <a id="portfolio-btn" class="btn-slide" href="#">Portfolio</a>

   <div id="contact" class="radius5">Contact Us</div>
   <div id="about" class="radius5">About Us</div>
   <div id="portfolio" class="radius5">Our Portfolio</div>

我还有一个jsFiddle 链接。

我相信这真的很容易回答。我尝试过使用addClassremoveClass,但似乎无法完全正确。有人可以帮忙吗?

问候,

汤姆·奥克利

【问题讨论】:

    标签: jquery slidedown slideup navbar


    【解决方案1】:

    您需要做的就是从$(".radius5") 选择中删除当前元素,这样它就不会滑上去。您还可以通过在一个事件处理程序中处理所有 click 事件来使代码更紧凑:

    $(function(){
    
        //cache the `.radius5` selector so it doesn't have to be re-calculated in the event handler
        var $radius5 = $(".radius5").hide();
    
        //bind a `click` event handler to all three of your buttons, notice to select multiple items we just put a comma in between the selectors
        $("#contact-btn, #about-btn, #portfolio-btn").click(function() {
    
            //get the ID of the element to slideDown
            var slide_down = "#" + this.id.replace('-btn', '');
    
            //slideUp all but the current element
            $radius5.not(slide_down).slideUp();
    
            //slideDown the current element
            $(slide_down).slideDown("slow");
        });                 
    });
    

    这是一个演示:http://jsfiddle.net/ePRsz/5/

    更新

    我刚刚重新阅读了您的问题,如果您希望当前向下滑动的元素在再次单击其导航链接时向上滑动,您可以将 .slideDown() 更改为 .slideToggle()

    $(function(){
    
        var $radius5 = $(".radius5").hide();
    
        $("#contact-btn, #about-btn, #portfolio-btn").click(function() {
            var slide_down = "#" + this.id.replace('-btn', '');
            $radius5.not(slide_down).slideUp();
            $(slide_down).slideToggle("slow");
        });                  
    }); 
    

    这是一个演示:http://jsfiddle.net/ePRsz/13/

    【讨论】:

      【解决方案2】:

      我会稍微调整您的 HTML,以使用 href 属性(根据 @powerbuoy 的评论)跟踪哪些元素应该显示/隐藏:

      <a id="contact-btn" class="btn-slide" href="#contact">Contact</a>
      <a id="about-btn" class="btn-slide" href="#about">About</a>
      <a id="portfolio-btn" class="btn-slide" href="#portfolio">Portfolio</a>
      
      <div id="contact" class="radius5">Contact Us</div>
      <div id="about" class="radius5">About Us</div>
      <div id="portfolio" class="radius5">Our Portfolio</div>
      

      然后你的 JavaScript 就变得简单多了:

      $(document).ready(function() {
      
          $(".radius5").hide();
      
          $("a.btn-slide").click(function(e) {
              e.preventDefault();
      
              var $menu = $($(this).attr("href"));
      
              $(".radius5").slideUp();
      
              if ($menu.is(":hidden")) {
                  $menu.slideDown("slow");
              }
          });
      });
      

      示例: http://jsfiddle.net/zLqYn/

      您也可以查看slideToggle,但我注意到您使用不同的持续时间取决于您是向上还是向下滑动。如果持续时间都相同(例如,您以"slow" 的持续时间上下滑动),您可以使用slideToggle 使代码更短。

      【讨论】:

      • 使用href 属性而不是您自己的data-menu。那么没有 JS 也是有道理的。
      • @powerbuoy:是的,你说得对,这是个好主意。我已经相应地更新了答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      相关资源
      最近更新 更多