所以我的网络应用程序的工具栏中有一系列 float:left div 元素。其中一个在单击时会通过 jQuery 滑动动画向右展开。这个 div 右侧的所有 div 都应该滑过来为其增加的大小腾出空间,但是它们会跳到新位置以腾出空间,然后在我再次缩小它时跳回来。如何将其修复为平滑的幻灯片?
我想我需要 .animate(),但如果不更改为 position: absolute,我不知道该怎么做,我不想使用它。
所以我的网络应用程序的工具栏中有一系列 float:left div 元素。其中一个在单击时会通过 jQuery 滑动动画向右展开。这个 div 右侧的所有 div 都应该滑过来为其增加的大小腾出空间,但是它们会跳到新位置以腾出空间,然后在我再次缩小它时跳回来。如何将其修复为平滑的幻灯片?
我想我需要 .animate(),但如果不更改为 position: absolute,我不知道该怎么做,我不想使用它。
我不确定我是否完全理解你,但我的猜测是:
$('#contrast').click(function () {
var w = $('#contrastSlider').width();
$('#contrastSlider').toggle("slide", 300);
$('#about').animate({
'margin-left': -w
}, 300, function () {
this.style.marginLeft = 0;
});
});
更新
这是整个事情:http: //jsfiddle.net/CPR7R/
$('#contrast').click(function () {
var cs = $('#contrastSlider'),
w = cs.width();
if (!cs.is(':visible')) {
$('#about').css('margin-left',-w);
w = 0;
}
cs.toggle("slide", 300);
$('#about').animate({
'margin-left': -w
}, 300, function () {
this.style.marginLeft = 0;
});
});
第二次更新
检查这个例子:http: //jsfiddle.net/EpCpr/
$('#container').on('click', '.slideTriggerer', function () {
var that = $(this),
sliderA = that.siblings('.slideA'),
sliderB = that.siblings('.slideB'),
defml = parseInt( sliderB.css('margin-left') ),
w = sliderA.outerWidth();
if (!sliderA.is(':visible')) {
sliderB.css('margin-left', -w+defml);
w = defml;
}
sliderB.animate({
'margin-left': -w+defml
}, 300, function () {
sliderB.css('margin-left', defml);
});
sliderA.toggle("slide", 300);
});