** 编辑 **
如果您想优先考虑 CSS 并且仍然能够对其进行动画处理,您可能需要的是:
http://jsfiddle.net/2Fe22/1/
1) 创建一个“普通”面板类并为其设置样式
.panel {width:750px;height:400px}
2) 创建一个折叠的类并为其设置样式
.collapsed {width:500px}
3) 创建一个函数来从 css 中读取折叠宽度和正常宽度:
function getClassWidth(aClass) {
return parseInt($("<div />").addClass(aClass).css('width'));
}
4) 通过首先制作动画然后(在动画结束时)向面板添加或删除“折叠”类并删除动画留下的内联样式来处理点击:
var collapsed=false;
$("#collapse").click(function() {
collapsed=!collapsed;
if(collapsed) {
$("#main_panel").animate({width: (getClassWidth('collapsed'))+"px"}, 'slow',afterAnimation);
} else {
$("#main_panel").animate({width: (getClassWidth('panel'))+"px"}, 'slow',afterAnimation);
}
});
function afterAnimation() {
if(collapsed) $("#main_panel").addClass( "collapsed" ).removeAttr("style");
else $("#main_panel").removeClass( "collapsed" ).removeAttr("style");
}
您这样做,因此如果用户调整窗口大小并且 css 更改您的屏幕更新正确。
** 旧帖(供参考) **
如果您使用 JQuery 设置大小,您可以继续这样设置:
var collapsed=false;
$( window ).resize(calculateNewSizes); // When resized
calculateNewSizes(); // At startup
function calculateNewSizes() {
if(collapsed) {
// if screen width < xxx set elemt width to yyy, etc.. collapsed version
} else {
// if screen width < xxx set elemt width to yyy, etc..
}
}
// This toggles the collapsed state if user clicks on an element
$("#collapse").click(function() {
collapsed=!collapsed;
calculateNewSizes(); // or do the animation here
});
应该在所有要调整大小的元素开始之后尽快调用此脚本以避免FOUC。
<div class="to be resized">
<script>
//do the $( window ).resize(...) here
</script>
... all other stuff </div>.
警告,此代码未经测试。只是为了展示一个想法。