<script>
var size = function(){
var speed = 5;
var oldSize;
var animDone;
/**
* Animeret ændring af bredde på et given element.
* @param {HTML element} el Element
* @param {number} newSize Ny bredde på objekt
*/
var sizeUp = function(el,newSize) {
oldSize = el.offsetWidth;
if(oldSize != newSize) {
animDone = false;
if(oldSize < newSize) {
oldSize += speed;
// Her styles bredden
el.style.width = oldSize+'px';
}
var fn = function() { sizeUp(el,newSize) };
var t = setTimeout(fn, 1);
} else {
animDone = true;
}
}
/**
* Animeret ændring af bredde på et given element.
* @param {HTML element} el Element
* @param {number} newSize Ny bredde på objekt
*/
var sizeDown = function(el,newSize) {
oldSize = el.offsetWidth;
if(oldSize != newSize) {
animDone = false;
if(oldSize > newSize) {
oldSize -= speed;
// Her styles bredden
el.style.width = oldSize+'px';
}
var fn = function() { sizeDown(el,newSize) };
var t = setTimeout(fn, 1);
} else {
animDone = true;
}
}
return {
/**
* Animeret ændring af bredde på et given element.
* @param {HTML element} el Element
* @param {number} newSize Ny bredde på objekt
*/
to : function(el, newSize) {
if(animDone !== false) {
if(this.getSize(el) < newSize) {
sizeUp(el,newSize);
} else {
sizeDown(el,newSize);
}
}
},
/**
* Fanger offsetWidth på et element.
* @param {HTML element} el Element
*/
getSize : function(el) {
return el.offsetWidth;
},
/**
* Tester om et elements bredde er inden for 10px af den angivne bredde
* @param {HTML element} el Element
* @param {number} size Bredde som testes med.
*/
isNear : function(el,size) {
var dis = Math.sqrt((size - el.offsetWidth) * (size - el.offsetWidth));
return dis <= 10;
}
}
}();
</script>
<img src="sImages/tb-bg.jpg" onclick="size.to(this,size.isNear(this,500) ? 100 : 500)" alt="" />
Her er det hele poppet ind i et singleton objekt. Gik lige lidt amok. Det er kun testet i firefox, men burde virke i de fleste browsere.
Indlæg senest redigeret d. 19.09.2007 22:16 af Bruger #10216