From: Scott González Date: Sat, 31 Jan 2009 02:55:56 +0000 (+0000) Subject: Accordion: Partial fix for #4011: Smooth(er) animations with autoHeight: false. X-Git-Tag: 1.6~142 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6695e5ac7f5be9be2b25f62314ba80812a5fbf65;p=jquery-ui.git Accordion: Partial fix for #4011: Smooth(er) animations with autoHeight: false. Removed some browser snifing. Added support for non-px units. --- 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,