Jquery左右滑动使div向上跳动

3
我将尝试创建一个效果,当单击链接时,它会使初始div向左滑动,并揭示第二个div向左滑动。当从第二个div单击链接时,该div向右滑动,同时第一个div也向右滑动。
以下是我目前的代码:
HTML
<div id="box1">
    <a href="#" id="click1">Click to show other div</a>
     <br>
    Ut accumsan dignissim lorem non posuere.Aliquam iaculis nibh    ultricies sem amet.Class aptent taciti sociosqu ad posuere.
</div>

<div id="box2" style="display:none">
    <a href="#" id="click2">Click to show other div</a>
     <br>
    Ut accumsan dignissim lorem non posuere.Aliquam iaculis nibh    ultricies sem amet.Class aptent taciti sociosqu ad posuere.
</div>

JS

$(document).ready(function () {
    $('#click1').click(function () {
        $('#box1').hide("slide", {
            direction: "left"
        }, 1000);
        $('#box2').show("slide", {
            direction: "right"
        }, 1000);
    });
    $('#click2').click(function () {
        $('#box2').hide("slide", {
            direction: "right"
        }, 1000);
        $('#box1').show("slide", {
            direction: "left"
        }, 1000);
    });
});

这是我目前的JSFiddle链接http://jsfiddle.net/rayshinn/abNmN/4/。问题在于,当我单击链接并调用幻灯片动画时,第二个隐藏的div会跳到相应的位置。有没有一种方法可以创建一个平滑的从左到右的动画,而不会出现div弹出/跳动的效果呢?谢谢您的帮助。
1个回答

3

在相对定位的包装器中使用绝对定位。

示例 (已更新)

HTML

<div id="wrapper">
    <div class="slidingDiv" id="box1">...</div>
    <div class="slidingDiv" id="box2" style="display:none">...</div>
</div>

CSS

#wrapper {
    position:relative;
}

#wrapper div {
    position:absolute;
    top:0;
}

Javascript自动高度计算

var maxHeight = 0;
$('.slidingDiv').each(function() {
    if($(this).height() > maxHeight) maxHeight = $(this).height();
});
$('#wrapper').height(maxHeight);

很好的解决方案!然而,由于 #wrapper div{position:absolute} 属性,我的包装器中的所有 div 现在似乎都堆叠在一起。有什么修复的想法吗?再次感谢。 - BaconJuice
1
问题在于,当您在内部使用 absolute 定位元素的 position:relative 时,包装器的高度不会由浏览器设置。您有两种解决此问题的方法。 第一种是向包装器的样式添加固定值。第二种是添加一个小脚本,它可以根据包装器内组件的大小自动计算包装器的高度。我将在我的帖子中编辑第二个解决方案。 - pdegand59
我能用自定义JS而不是UI来创建完全相同的动画吗,@pdegand59? - Ana DEV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接