I had to create a smooth slide effect on two boxes using jQuery and its
animate() method. The basic HTML structure is as follows:
<div id="container">
<div id="box-a"></div>
<div id="box-b"></div>
</div>
And here are the attached styles:
#container {
width: 300px;
height: 200px;
background: #ccc;
position: relative;
top: 12px;
overflow: hidden;
}
#box-a {
width: 300px;
height: 200px;
float: left;
position: relative;
background: orange;
}
#box-b {
width: 0px;
height: 200px;
float: left;
position: relative;
background: gray;
}
Also the related jQuery code is pretty straightforward:
$(document).ready(function() {
$('#run').click(function() {
$('#box-a').animate({position: 'absolute', left: '0px', width: '0px'}, 'fast'); // IE8- can't handle position: absolute here
$('#box-b').animate({width: '300px'}, 'fast');
return false;
});
});
To create our sliding effect we first reduce the width of the first box to 0 and then we set the width of the second box to a given length.
Notice that the first box has been absolutely positioned. That's the tricky part for Internet Explorer 8 and lower: it can't handle the vertical offset of the first box and return a JavaScript error (error code 0). Simply remove the declaration position: absolute and you get the desired result even on IE. You can see a live test here.