diff options
author | Scott González <scott.gonzalez@gmail.com> | 2009-01-31 02:55:56 +0000 |
---|---|---|
committer | Scott González <scott.gonzalez@gmail.com> | 2009-01-31 02:55:56 +0000 |
commit | 6695e5ac7f5be9be2b25f62314ba80812a5fbf65 (patch) | |
tree | 501d5080ce1e8accd03a75d1646ffa506214ea20 /ui/ui.accordion.js | |
parent | 39dac81b249b1369e97aaa586b387c577b0a7598 (diff) | |
download | jquery-ui-6695e5ac7f5be9be2b25f62314ba80812a5fbf65.tar.gz jquery-ui-6695e5ac7f5be9be2b25f62314ba80812a5fbf65.zip |
Accordion: Partial fix for #4011: Smooth(er) animations with autoHeight: false.
Removed some browser snifing.
Added support for non-px units.
Diffstat (limited to 'ui/ui.accordion.js')
-rw-r--r-- | ui/ui.accordion.js | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/ui/ui.accordion.js b/ui/ui.accordion.js index d94e81b8f..6ce36ec45 100644 --- a/ui/ui.accordion.js +++ b/ui/ui.accordion.js @@ -395,14 +395,21 @@ $.extend($.ui.accordion, { return; } var overflow = options.toShow.css('overflow'), + percentDone, showProps = {}, hideProps = {}, fxAttrs = [ "height", "paddingTop", "paddingBottom" ]; $.each(fxAttrs, function(i, prop) { hideProps[prop] = 'hide'; - showProps[prop] = parseFloat(options.toShow.css(prop)); + + if (options.toShow[0]) { + var parts = ('' + $.css(options.toShow[0], prop)).match(/^([\d+-.]+)(.*)$/); + showProps[prop] = { + value: parts[1], + unit: parts[2] || 'px' + }; + } }); - showProps.height = options.toShow.height(); options.toShow.css({ height: 0, overflow: 'hidden' }).show(); options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate(hideProps,{ step: function(now, settings) { @@ -410,14 +417,15 @@ $.extend($.ui.accordion, { // a content pane to show if (!options.toShow[0]) { return; } - var percentDone = settings.start != settings.end - ? (settings.now - settings.start) / (settings.end - settings.start) - : 0, - current = percentDone * showProps[settings.prop]; - if ($.browser.msie || $.browser.opera) { - current = Math.ceil(current); + // only calculate the percent when animating height + // IE gets very inconsistent results when animating elements + // with small values, which is common for padding + if (settings.prop == 'height') { + percentDone = (settings.now - settings.start) / (settings.end - settings.start); } - options.toShow[0].style[settings.prop] = current + 'px'; + + options.toShow[0].style[settings.prop] = + (percentDone * showProps[settings.prop].value) + showProps[settings.prop].unit; }, duration: options.duration, easing: options.easing, |