Hallo XodoX,
<script type="text/javascript">
function rand(min,max)
{
var wert = min + Math.ceil(Math.random() * 1000) % (max-min) + 1;
return wert;
}
Zunächst mal: Diese Implementierung ist nicht sehr elegant, sie funktioniert ja nur halbwegs, wenn (max-min) << 1000 ist.
Wenn (max - min) kein Teiler von 1000 ist, treten ja nicht alle Reste gleich häufig auf. Bei kleinen Zahlen wirkt sich das nicht so aus, aber wenn man Beispielsweise (max - min) == 400 hat, so kommen die Reste 0 bis 199 ja 3 und die anderen 2 mal auf.
Besser ist sowas:
[code lang=javascript]
function randInt(min, max) {
return Math.ceil(min + Math.random() * (max - min));
}
> function asb\_loadingEnd()
> {
> document.getElementById("asb\_loading").innerHTML='normal';
> }
>
> function loadData()
> {
> document.getElementById("asb\_loading")
> setTimeout('asb\_loadingEnd();',rand(5,35)\*100);
> }
> Wie erreiche ich das am elegantesten?
Zunächst mal musst Du das gewünschte Verhalten unabhängig vom konkreten Objekt formulieren:
~~~javascript
function setLoading(elem) {
elem.innerHTML = 'normal';
setTimeout(function() {setNormal(elem)}, randInt(1000, 30000));
}
function setNormal(elem) {
elem.innerHTML='<img src=\"loading.gif\">';
setTimeout(function(setLoading(elem)) {}, randInt(1000, 30000));
}
Dann musst Du das nur noch für jedes Element anstoßen:
window.onload = function() {
var ids = new Array("foo", "bar", "baz");
for (var i = 0; i < ids.length; ++i) {
setNormal(document.getElementById(ids[i]));
}
};
Das ist alles ungetestet, kann also noch ein paar Flüchtigkeitsfehler enthalten.
Grüße
Daniel