2012-01-12 41 views
1

我遇到了这个我已经尝试添加的代码,但是我担心我已经搞乱了它。我对Jquery或网页设计不是非常有经验,我需要帮助找到我做错了什么,以及如何才能更高效。jQuery手风琴帮助

是否有更好/更有效的方式来编写此代码?

它有一些错误...

  • 显示负载时的所有div。我希望它只显示一个我可以选择的。
  • 当它动画时,文字跳动出于某种原因。
  • 有时divs会动起来,但不会下降。

这里是什么样子,现在的链接:http://dl.dropbox.com/u/14080718/Final/NeedHelp.html

<script> 
    $(document).ready(function() { 
     // the currently loaded section 
     var curLoaded = 'about'; 

     // navigation trigger 
     $('#navbar a').each(function() { 
      var $this = $(this) 
      var target = $this.attr('href').split('#')[1]; 
      var $contentContainer = $('#contentContainer'); 
      var oldPos = 0; 
      var newPos = 200; 

      // add a click handler to each A tag 
      $this.click(function(){ 
       // if the container isn't open, then open it 
       if ($contentContainer.css('height') == '') { 
        // trigger the animation 
        $contentContainer.animate({ 
         height: newPos 
        },"slow", function(){ 
         // fade in the content 
         $('#' + target).fadeIn(); 
        }); 
       } else { 
        if (curLoaded == target) { 
         $contentContainer.animate({ 
          height: oldPos 
         },"slow", function(){ 
          $('#content div').hide(); 
         }); 
        } else { 
         $contentContainer.animate({ 
          height: oldPos 
         },"slow", function(){ 
          $('#content div').hide(); 
          $contentContainer.animate({ 
           height: newPos 
          },"slow", function(){ 
           $('#' + target).fadeIn(); 
          }); 
         }); 
        } 
       } 
       curLoaded = target; 

       return false; 
      }); 
     }); 
    }); 
    </script> 
+0

[codereview.SE]网站可能是获取您要查找的反馈类型的更好地方。如果您遇到特定问题并提供特定答案,SO最能帮助您解决问题。如果可能进行广泛的讨论,它可能不太合适。查看[The FAQ](http://stackoverflow.com/faq)查看最适合本网站的问题类型。 – 2012-01-12 08:36:37

+0

谢谢,我会去看看。 – 2012-01-12 17:55:40

+5

@ MerlynMorgan-Graham:根据[CodeReview的FAQ](http://codereview.stackexchange.com/faq),调试问题不应该在那里。 NateGines:我认为应该先修复这些bug,然后将其发布到CodeReview以进行一般评论。因此,请编辑此问题以仅包含有关适用于SO的调试问题(而不是有效性)。 (我想CodeReview上的问题会因为错误而关闭,但当bug修复时,可以随时重新发布到CR。) – palacsint 2012-01-12 19:28:45

回答

0

我已经采取了看看你的网页,并采取了快速的刺,以解决一些越野车的行为。

首先,看起来您正在处理用户第二次点击导航链接的情况,方法是关闭content div,但如果用户第三次单击导航链接,则无法处理。作为一个用户,我希望无论点击链接多少次,div都会打开或关闭。

为了解决这个问题,我已经添加了一个检查目标元素是否可见,我用它来决定是否滑动打开或关闭的内容。我还添加了对显示的调用并隐藏目标和curloaded元素的函数,以确保检查元素是否可见将提供预期结果。

我修改后的代码如下。为了简化代码,可能会合并某些案例的逻辑。

// navigation trigger 
$('#navbar a').each(function() { 
    var $this = $(this); 
    var target = $this.attr('href').split('#')[1]; 
    var $contentContainer = $('#contentContainer'); 
    var oldPos = 0; 
    var newPos = 200; 

    // add a click handler to each A tag 
    $this.click(function() { 
     // if the container isn't open, then open it 
     if ($contentContainer.css('height') === '') { 
      // trigger the animation 
      $contentContainer.animate({ 
        height: newPos 
       }, "slow", function() { 
        // fade in the content 
        $('#' + target).show().fadeIn(); 
       }); 
     } else { 
      if (curLoaded == target) { 
       if ($('#' + target).is(':visible')) { 
        $contentContainer.animate({ 
          height: oldPos 
         }, "slow", function() { 
          $('#' + curLoaded).hide(); 
          $('#content div').hide(); 
         }); 
       } else { 
        $contentContainer.animate({ 
          height: newPos 
         }, "slow", function() { 
          // fade in the content 
          $('#' + target).show().fadeIn(); 
         }); 
       } 
      } else { 
       $contentContainer.animate({ 
         height: oldPos 
        }, "slow", function() { 
         $('#' + curLoaded).hide(); 
         $('#content div').hide(); 
         $contentContainer.animate({ 
           height: newPos 
          }, "slow", function() { 
           $('#' + target).fadeIn(); 
          }); 
        }); 
      } 
     } 

     curLoaded = target; 

     return false; 
    }); 

}); 
+0

你太棒了!这现在很好用!如果我想添加一个可以让手风琴打开,关闭或切换的类(如class =“open”,“close”或“toggle”)?我已经尝试了一些东西,但是我一直在打破页面,因为我看起来可以得到正确的语法。 – 2012-01-13 17:18:48

+0

@Nate - 您将无法使用CSS类实现打开和关闭的动画效果。 CSS只是描述了元素的视觉风格,并没有真正的执行概念。您可以使用jQuery在元素上添加或删除类,但无法说“缓慢将此类应用于此元素”。但是,您可以使用CSS类作为元素上的标志来指导您的jQuery代码如何处理特定元素。即使用jQuery的选择器语法“#navbar a.toggle”在#navbar中查找具有应用切换类的锚标记。 – 2012-01-13 17:32:44

1

在此拉琴的CSS将与所有的div初步显示出了帮助。你能否更详细地解释了其他2个错误(我似乎没有注意到它们)

Fiddler Code

+0

感谢您的提琴手代码。它效果很好!至于其他问题...它看起来像是如果你点击nav中的一个链接,#contentContainer div稍微改变,以及它的类型。此外,如果您快速连续点击一堆链接,有时一个div会关闭,并且不会打开备份,直到单击另一个链接。它似乎没有这些问题在提琴手中,但id在Chrome,Safari和Firefox中。谢谢您的帮助! – 2012-01-12 17:51:47

+0

请在答案中张贴代码。 SO上的答案应该是自包含的,以防万一其他网站出现故障或人们无法访问它,并且该帖子更易于搜索。 – 2012-01-12 18:38:02