I need an animated elipisis (...), one dot appearing after the other. The animation needs to loop. I\'d like to achieve this via jQuery
If you just need the dots to appear one after another only once, try something very simple like the following:
<div id="message">Awaiting your selection</div>
var dots = 0;
$(document).ready(function() {
setInterval (type, 600);
});
function type() {
if(dots < 3) {
$('#message').append('.');
dots++;
}
}
http://jsfiddle.net/fVACg/
If you want them to appear more than once (to be deleted and then re-printed), you can do something like the following:
<div>Awaiting your selection<span id="dots"></span></div>
var dots = 0;
$(document).ready(function() {
setInterval (type, 600);
});
function type() {
if(dots < 3) {
$('#dots').append('.');
dots++;
} else {
$('#dots').html('');
dots = 0;
}
}
http://jsfiddle.net/wdVh8/
Finally, checkout a tutorial I've written a few years ago. You might find it useful.
I've written a simple JQuery plugin for it: https://github.com/karbachinsky/jquery-DotAnimation
//<div class="element">Loading</div>
$(function () {
// Animation will start at once
var $el = $('.element');
$el.dotAnimation({
speed: 300,
dotElement: '.',
numDots: 3
});
});
JSFiddle example: https://jsfiddle.net/bcz8v136/
Beside StathisG's answer using jquery you can also achieve it through CSS3 using animation iteration count and animation-delay
@-webkit-keyframes opacity {
0% { opacity: 1; }
100% { opacity: 0; }
}
@-moz-keyframes opacity {
0% { opacity: 1; }
100% { opacity: 0; }
}
#loading {
text-align: center;
margin: 100px 0 0 0;
}
#loading span {
-webkit-animation-name: opacity;
-webkit-animation-duration: 1s;
-webkit-animation-iteration-count: infinite;
-moz-animation-name: opacity;
-moz-animation-duration: 1s;
-moz-animation-iteration-count: infinite;
}
#loading span:nth-child(1) {
-webkit-animation-delay: 100ms;
-moz-animation-delay: 100ms;
}
#loading span:nth-child(2) {
-webkit-animation-delay: 300ms;
-moz-animation-delay: 300ms;
}
#loading span:nth-child(3) {
-webkit-animation-delay: 500ms;
-moz-animation-delay: 500ms;
}
DEMO: http://jsfiddle.net/VXdhG/1/
The following code is essentially what I ended up with.
JavaScript:
var animatedDot;
animatedDot = animatedDot || (function () {
var dots = 0;
var animatedDotInterval;
var selectorAnimatedDot = ".animatedDot";
return {
start: function(interval) {
if (!interval)
interval = 400;
animatedDotInterval = setInterval(this.nextFrame, interval);
},
stop: function() {
if (animatedDotInterval)
clearInterval(animatedDotInterval);
},
nextFrame: function() {
if ($(selectorAnimatedDot).length) {
if (dots < 3) {
$(selectorAnimatedDot).append('.');
dots++;
} else {
$(selectorAnimatedDot).html('');
dots = 0;
}
} else {
if (animatedDotInterval)
clearInterval(animatedDotInterval);
}
}
};
})();
function animatedDotTimeout(timeout) {
if (!timeout)
timeout = 10000;
animatedDot.start();
setTimeout(animatedDot.stop, timeout);
}
Html:
Loading<span class="animatedDot"></span>
<script type="text/javascript">
$(document).ready(function() {
animatedDot.start();
});
</script>