Entirely Javascript Ajax spinner?
I was thinking that Ajax spinners are really great but the image spinning is actually shown with some delay OR is loaded too early, I thought maybe I could use these old school characters to provide more accurate ajax activity feedback.
|, /, —, \lets say the target paragraph is called <p id="target"></p>
How can I interchange these characters开发者_如何转开发 in that paragraph without it being too resource intensive, I have JQuery already loaded in the project.
Thanks so much guys!
This allows you to have event multiple loading indicators in the same time. Just store them in a variable and call stop()
when they are no longer needed.
[See it in action]
function loader(el, delay) {
if (typeof el === "string")
el = document.getElementById(el);
if (!el)
return;
delay = delay || 100;
var chars = "|/-\\".split("");
var i = 0;
var timer = setInterval(function(){
el.innerHTML = chars[ i++ % chars.length ];
}, delay);
// public method to stop the animation
this.stop = function() {
clearInterval(timer);
}
}
// make a new loader and start animation
var ld1 = new loader("loader"); // or loader($("#loader")[0]);
// content is loaded stop animation
ld1.stop();
From the very page:
- No images, no external CSS
- No dependencies (jQuery is supported, but not required)
- Highly configurable
- Resolution independent
- Uses VML as fallback in old IEs
- Uses @keyframe animations, falling back to setTimeout()
- Works in all major browsers, including IE6
- MIT License
http://fgnass.github.com/spin.js/
Maybe something like:
function change(areDoneYet) {
var realFun = (function(doneYet) {
var chars = "|/-\\";
var el = $('#target'); // I think that's the JQuery way
var current = el.innerHTML;
var changeTo = "";
if (current == "") changeTo = chars.charAt(0);
else
changeTo = chars.charAt(chars.indexOf(current) % chars.length);
el.innerHTML = changeTo;
if (!areDoneYet())
setTimeout(realFun, 100, doneYet);
});
realFun(areDoneYet);
if (!areDoneYet())
setTimeout(realFun, 100, areDoneYet);
}
Meh. It's a bit inelegant. It takes a callback which returns whether it should stop.
Mohammad - loading the image in a 'hidden' div would resolve the delay on loading the image. however, i guess your question is more a curiousity about alternatives to an image, rather than resolving the delay per se..
demo
var str = '|/—\\';
var target = $('#target');
var x = 0;
setInterval(function(){
target.text(str.charAt((x++)%str.length))
},5000)
精彩评论