John Snau
John Snau

Reputation: 341

JQuery Animation

It's simple slide up animation. The problem is when I change "top" parameter of myDiv class, animation is working incorrectly, instead of sliding up, it slides down from top. It only works incorrectly when I click button for the first time. When I change myDiv's top parameter to a bigger number there is no more problem. Can you please help me to find what is wrong with the code.

   <style>
    .box {
        position:relative;
        width: 200px;
        height: 500px;
    }
    .myDiv {
        position: absolute;
        width:100%;
        overflow: hidden;
        bottom:0px;
        top:10px;
        left:500;
    }
</style>
<script>
    var swt = 0;
    $(document).ready(function () {
        $(".b1").click(function () {

            var div = $(".myDiv");
            if (swt == 0) {
                div.animate({
                    top: '300px',
                    opacity: '1'
                }, "slow");
                //  div.animate({height:'300px', opacity:'1'},"slow");
                swt++;
            } else {
                div.animate({
                    top: '500px',
                    opacity: '1'
                }, "slow");
                //  div.animate({height:'0px', opacity:'1'},"slow");
                swt--;
            }
        });
    });
</script>
</head>
<body>
    <button class="b1">Start Animation</button>
    <p>posds</p>
    <div class="box">
        <div class="myDiv" style="background:#7549B1; width:200px;"></div>
    </div>
</body>

</html>

Upvotes: 3

Views: 217

Answers (3)

Marcin Bobowski
Marcin Bobowski

Reputation: 1775

http://jsfiddle.net/Cyberek/yLBeK/

This is as I understand buggy, but if You change in css top from 10px to 100px (same as top in js) everything should be ok.

.myDiv {
        position: absolute;
        width:100px;
        height: 100px;
        overflow: hidden;
        top:100px;
        left:100px;
        background: red;
}

$(".b1").click(function () {

            var div = $(".myDiv");
            if (swt == 0) {
                div.animate({
                    top: '100px',
                    opacity: '1'
                }, "slow");
                //  div.animate({height:'300px', opacity:'1'},"slow");
                swt++;
            } else {
                div.animate({
                    top: '200px',
                    opacity: '1'
                }, "slow");
                //  div.animate({height:'0px', opacity:'1'},"slow");
                swt--;
            }
        });

Upvotes: 0

Barlas Apaydin
Barlas Apaydin

Reputation: 7315

Do not use bottom and top on a same element, it will create a conflict. Define height and animte top with negative value:

Here is jsFiddle.

if(swt==0){
       div.animate({top:'-300px', opacity:'1'}, "slow");
        swt++;  
}else{
      div.animate({top:'-500px', opacity:'1'}, "slow");
        swt--;
}

Upvotes: 1

bfavaretto
bfavaretto

Reputation: 71939

I'm not really sure whay effect do you want, but maybe it's changing the bottom value instead of top:

if(swt==0){
    div.animate({bottom:'500px', opacity:'1'}, "slow");
    swt++;  
} else {
    div.animate({bottom:'300px', opacity:'1'}, "slow");
    swt--;
}

http://jsbin.com/ixigaf/1/edit

Upvotes: 3

Related Questions