aboutsummaryrefslogtreecommitdiffstats
path: root/ui/ui.accordion.js
diff options
context:
space:
mode:
authorScott González <scott.gonzalez@gmail.com>2009-01-31 02:55:56 +0000
committerScott González <scott.gonzalez@gmail.com>2009-01-31 02:55:56 +0000
commit6695e5ac7f5be9be2b25f62314ba80812a5fbf65 (patch)
tree501d5080ce1e8accd03a75d1646ffa506214ea20 /ui/ui.accordion.js
parent39dac81b249b1369e97aaa586b387c577b0a7598 (diff)
downloadjquery-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.js26
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,