2011-07-11 46 views
0

我已經開始與example並添加到代碼,使其:可訪問和動態的動畫信息框

  • 動態高度
  • 有殘疾人用JS關閉

我已經做了這正確嗎?這會在大多數瀏覽器上運行嗎?

工作版本visable here

原文:

$('#example-links a').hover(function(){ 
    var index = $("#example-links a").index(this); 
    $('#example-content').animate({"marginTop" : -index*220 + "px"}); // multiply by height+top/bottom padding/margin/border 
}); 

我修改後的代碼,它只是似乎有點長相比,上述:

var maxHeight = 0, container_maxHeight = 0; 
var example_content = $("#example-content"); 
var example_div = example_content.children("div"); 

example_div.each(function() { 
    if($(this).height() > maxHeight) { 
     maxHeight = $(this).height(); 
     container_maxHeight = $(this).outerHeight(true); 
    } 
}); 
example_div.height(maxHeight); 

$("#example-content-container").css({ 
    "overflow":"hidden", 
    "height": container_maxHeight+"px" 
}); 

$('#example-links a').bind('click mouseover', function(e){ 
    var index = $("#example-links a").removeClass("active").index(this); 
    $(this).addClass("active"); 
    example_content.stop().animate({"marginTop" : -index*container_maxHeight + "px"}); 
    e.preventDefault(); 
}); 

我結合兩者的點擊因爲我希望它通過鼠標懸停工作,但是當我在沒有鼠標的移動電話上瀏覽以激活懸停時,我也希望它能夠正常工作。

+0

我不會考慮你的「JS-免費」版本非常接近/用戶友好。點擊鏈接不起作用,這很混亂。請參閱@ Shef的回答和我的評論。 –

回答

2

一切似乎都很好,如果JS關閉,我將添加的唯一東西就是節ID。你可以check it here

對於每個部分,您將一個id添加到包裝div,然後在您鏈接到該id的側面鏈接上。

我會收拾你的代碼一點點:

(function($){ 
    $(document).ready(function(){ 
     var maxHeight = 0, container_maxHeight = 0, 
      example_content = $("#example-content"), 
      example_div = example_content.children("div"); 

     example_div.each(function() { 
      var $section = $(this); 
      if($section.height() > maxHeight) { 
       maxHeight = $section.height(); 
       container_maxHeight = $section.outerHeight(true); 
      } 
     }); 
     example_div.height(maxHeight); 

     $("#example-content-container").height(container_maxHeight);   

     var $tabs = $('#example-links a'); 
     $tabs.bind('click mouseover', function(e){ 
      var index = $tabs.removeClass("active").index(this); 
      $(this).addClass("active"); 
      example_content.stop().animate({"marginTop" : -index*container_maxHeight + "px"}); 
      e.preventDefault(); 
     });        
    }); 
})(jQuery); 
+1

而不是'jQuery(document).ready(function(){var $ = jQuery;''你也可以使用'jQuery(document).ready(function($){' - 除此之外,在沒有必要的情況下使用noConflict有點愚蠢;只需將所有代碼包裝在一個'(function($){...})(jQuery);'中,並且它將始終工作 – ThiefMaster

+1

此外,沒有JS,您可以使用CSS3'實現類似的功能: target'僞選擇器:http://jsfiddle.net/fkling/AYYQ8/2/embedded/result/(如果瀏覽器支持,這實際上很酷) –

+1

如果只有每個人都更新瀏覽器,那麼:target看起來真的很有興趣經常。 –