xavier.seignard
xavier.seignard

Reputation: 11144

how to smooth jquery animations

I would like to smooth the chaining of some jquery.animate functions.

Here is a jsfiddle where I describe the problem : http://jsfiddle.net/xavier_seignard/KTxbb/4/

As you can see, there is a stop between each animation, even with the linear attribute.

Do you have any idea about how to smooth it? Or anything else that would do the trick?

Regards

Upvotes: 3

Views: 31390

Answers (4)

Kuldeep Daftary
Kuldeep Daftary

Reputation: 621

Thats the problem with jsfiddle.. I tested your jsfiddle link and it was not looking great as you mentioned in your question.

But then I created new page on my pc and copied everything from your fiddle and checked it. It looks alright.

Copy and paste this and save it as html and test it :

<html>
<head>
  <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'></script>
  <link rel="stylesheet" type="text/css" href="http://fiddle.jshell.net/css/normalize.css">
    <style type="text/css">
    #point {
    position: absolute;
    background-color: black;
    width: 15px;
    height: 15px
}
    </style>
</head>
<body onload="initPage()">
    <div class="start" id="point"></div>
<script type="text/javascript">
    var json = [
                {'x' : '300' , 'y' : '200'},
                {'x' : '250' , 'y' : '150'},
                {'x' : '209' , 'y' : '387'},
                {'x' : '217' , 'y' : '323'},
                {'x' : '261' , 'y' : '278'},
                {'x' : '329' , 'y' : '269'},
                {'x' : '406' , 'y' : '295'}
            ];


function initPage() {
    $.each(json, function() {
        $("#point").animate({
            left: this.x,
            top: this.y
        },
        "linear");
    });
}
</script>
    </body>

</html>

Upvotes: 1

Tom
Tom

Reputation: 12988

Is it the change in speed that you're describing?

That is because the animations have the same timings but the distance the square box is covering differs. You might need to alter the time for each animation dependant in the distance travelled.

Upvotes: 1

Mihai Iorga
Mihai Iorga

Reputation: 39704

You can change the speed for a more "fine" animation, you see that stop because the speed it's too fast and different size to cover:

function initPage() {
    $.each(json, function() {
        $("#point").animate({
            left: this.x,
            top: this.y
        },
        1000, 'linear');
    });
}​

Upvotes: 4

Lazar Vuckovic
Lazar Vuckovic

Reputation: 808

I think you should just try out the jQuery Easing plugin - http://gsgd.co.uk/sandbox/jquery/easing/

Include the file and instead of "liner" add some other easing.

Upvotes: 2

Related Questions