5

This works but I'm not sure why. In function capIn(), in my mind the line $botcap.slideDown("slow") should slide the div down. It slides it up. If I try using .slideUp() nothing happens as if it is trying to slide it down. Can anyone explain this to me?

$(".slide").hover(capIn, capOut);

function capIn(){
    //slide top caption down
    var $topcap = $(this).children(".topcap");
    $topcap.slideDown("slow");

    //slide bottom caption up
    //!! Why does slideDown slide caption up here?
    var $botcap = $(this).children(".botcap");
    $botcap.slideDown("slow")
}

function capOut(){
    //slide top back up
    var $topcap = $(this).children(".topcap");
    $topcap.slideUp("slow");

    //slide bottom back down
    var $botcap = $(this).children(".botcap");
    $botcap.slideUp("slow");
}
Jonathan Eckman
  • 2,071
  • 3
  • 23
  • 49

3 Answers3

9

jQuery's slideDown and slideUp functions are actually misnomers. As the documentation for slideUp puts it:

Hide the matched elements with a sliding motion.

The hiding is achieved by modifying the height of the element; normally, this means that the lower edge of the element appears to slide up, hence the name. However, if the element is anchored at the bottom (e.g. by setting position: absolute and bottom: 0), the height modification will make the top edge appear to slide down.

tdammers
  • 20,353
  • 1
  • 39
  • 56
0

This is because of positioning the element with absolute position and bottom: 0; This will actually treat the element as if it is bottom-based, therefore its slideDown() is going upwards. It can be fixed by using top: (height of element) instead of bottom: 0.

aioobe
  • 413,195
  • 112
  • 811
  • 826
0

One possible fix would be to wrap $('.botcap') elements with a container and align the container to the bottom.

Timothy Aaron
  • 3,059
  • 19
  • 22