diff options
author | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2009-02-02 14:02:20 +0000 |
---|---|---|
committer | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2009-02-02 14:02:20 +0000 |
commit | bf16dc1853dca7961947158a1d3be430362386eb (patch) | |
tree | 9432d40564bb1bb5a3b2e718727c9a1763473bab | |
parent | 7ed45e68de02df14b72d536aa719a442ed116dfa (diff) | |
download | jquery-ui-bf16dc1853dca7961947158a1d3be430362386eb.tar.gz jquery-ui-bf16dc1853dca7961947158a1d3be430362386eb.zip |
accordion: use synced animations only when animating two elements; optimize for only-one
-rw-r--r-- | ui/ui.accordion.js | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/ui/ui.accordion.js b/ui/ui.accordion.js index de0ef00fd..30aad692c 100644 --- a/ui/ui.accordion.js +++ b/ui/ui.accordion.js @@ -410,6 +410,10 @@ $.extend($.ui.accordion, { options.toShow.animate({height: "show"}, options); return; } + if ( !options.toShow.size() ) { + options.toHide.animate({height: "hide"}, options); + return; + } var overflow = options.toShow.css('overflow'), percentDone, showProps = {}, @@ -417,29 +421,22 @@ $.extend($.ui.accordion, { fxAttrs = [ "height", "paddingTop", "paddingBottom" ], originalWidth; // fix width before calculating height of hidden element - if (options.toShow[0]) { - var s = options.toShow; - originalWidth = s[0].style.width; - s.width( parseInt(s.parent().width()) - parseInt(s.css("paddingLeft")) - parseInt(s.css("paddingRight")) - parseInt(s.css("borderLeftWidth")) - parseInt(s.css("borderRightWidth")) ); - } + var s = options.toShow; + originalWidth = s[0].style.width; + s.width( parseInt(s.parent().width()) - parseInt(s.css("paddingLeft")) - parseInt(s.css("paddingRight")) - parseInt(s.css("borderLeftWidth")) - parseInt(s.css("borderRightWidth")) ); + $.each(fxAttrs, function(i, prop) { hideProps[prop] = 'hide'; - if (options.toShow[0]) { - var parts = ('' + $.css(options.toShow[0], prop)).match(/^([\d+-.]+)(.*)$/); - showProps[prop] = { - value: parts[1], - unit: parts[2] || 'px' - }; - } + var parts = ('' + $.css(options.toShow[0], prop)).match(/^([\d+-.]+)(.*)$/); + showProps[prop] = { + value: parts[1], + unit: parts[2] || 'px' + }; }); options.toShow.css({ height: 0, overflow: 'hidden' }).show(); options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate(hideProps,{ step: function(now, settings) { - // if the collapsible option is set to true, we may not have - // a content pane to show - if (!options.toShow[0]) { return; } - // only calculate the percent when animating height // IE gets very inconsistent results when animating elements // with small values, which is common for padding |