kettek2/wiki/games/newsboy/swappr.js

184 lines
5.9 KiB
JavaScript

var swappr = swappr || {};
swappr = {
Init: function(setup_object) {
swappr.addEvent(window, 'load',
(function(setup_object) {
return function(e) {
swappr._Init(setup_object);
}
})(setup_object)
);
},
addSwap: function(from, to) {
swappr.addEvent(window, 'load',
(function(from, to) {
return function(e) {
swappr._addSwap(from, to);
}
})(from, to)
);
},
startSwap: function(anchor, setup_object) {
if (!setup_object.is_fading) {
setup_object.is_fading = true;
setup_object.to_img.src = anchor.href;
setup_object.from_img.onload = '';
swappr.showLoader(setup_object);
setup_object.to_img.onload = (function(setup_object) {
return function(e) {
swappr.doSwap(setup_object);
swappr.hideLoader(setup_object);
}
})(setup_object);
setup_object.to_img.onerror = (function(setup_object) {
return function(e) {
setup_object.is_fading = false;
}
})(setup_object);
}
},
doSwap: function(setup_object) {
if (setup_object.to_img == setup_object.second) {
setup_object.to_img.style.marginLeft = -(setup_object.to_img.offsetWidth/2)+"px";
}
var start_time = new Date().getTime();
setup_object.fade_in = setInterval(
(function(start_time, anchor, setup_object) {
return function(e) {
var delta = new Date().getTime() - start_time;
if (delta >= setup_object.time) {
delta = setup_object.time;
clearInterval(setup_object.fade_in);
setup_object.is_fading = false;
swappr.setFade(setup_object.to_img, setup_object.rate*delta);
swappr.setFade(setup_object.from_img, 100-setup_object.rate*delta);
if (setup_object.from_img == setup_object.first) {
setup_object.from_img = setup_object.second;
setup_object.to_img = setup_object.first;
} else {
setup_object.from_img = setup_object.first;
setup_object.to_img = setup_object.second;
}
} else {
swappr.setFade(setup_object.to_img, setup_object.rate*delta);
swappr.setFade(setup_object.from_img, 100-setup_object.rate*delta);
}
}
})(start_time, anchor, setup_object)
, 25);
},
setFade:function(target, fade) {
target.style.opacity = fade/100;
target.style.filter = 'alpha(opacity='+fade+')';
},
showLoader: function(setup_object) {
setup_object.loader_interval = setInterval(
(function(setup_object) {
return function(e) {
swappr.animateLoader(setup_object);
}
})(setup_object)
, 25);
setup_object.loader.style.display = 'block';
},
hideLoader: function(setup_object) {
clearInterval(setup_object.loader_interval);
setup_object.loader.style.display = 'none';
},
animateLoader: function(setup_object) {
var delta = new Date().getTime() - setup_object.loader_start;
if (!setup_object.loader_toggle) {
swappr.setFade(setup_object.loader, (setup_object.rate/2)*delta);
} else {
swappr.setFade(setup_object.loader, 100-((setup_object.rate/2)*delta));
}
if (delta >= setup_object.time) {
setup_object.loader_start = new Date().getTime();
setup_object.loader_toggle = (setup_object.loader_toggle ? false : true);
}
},
processAnchors: function(element, to) {
swappr.addEvent(window, 'load',
(function(element, to) {
return function(e) {
swappr._processAnchors(element, to);
}
})(element, to)
);
},
addEvent: function(target, event_type, callback, bubble) {
bubble = (typeof bubble !== 'undefined' ? bubble : false);
if (typeof target.attachEvent !== 'undefined') {
target.attachEvent('on'+event_type, callback);
} else if (typeof target.addEventListener !== 'undefined') {
target.addEventListener(event_type, callback, bubble);
}
},
_Init: function(setup_object) {
var time = (setup_object.time ? setup_object.time : 250);
var from_element = document.getElementById(setup_object.from);
var display = document.getElementById(setup_object.display);
var display_imgs = display.getElementsByTagName('img');
if (!display_imgs[0]) {
first_img = document.createElement('img');
display.appendChild(first_img);
} else {
first_img = display_imgs[0];
}
if (!display_imgs[1]) {
var second_img = document.createElement('img');
display.appendChild(second_img);
} else {
var second_img = display_imgs[1];
}
if (!second_img.style.position) {
second_img.style.position = "absolute";
second_img.style.left = "50%";
}
swappr.setFade(second_img, 0);
if (!display.style.position) {
display.style.position = 'relative';
}
var loader = document.createElement('div');
loader.className = 'swappr_loader';
loader.style.display = 'none';
//loader.style.position = "absolute";
//loader.style.top = "50%";
//loader.style.left = "50%";
loader.innerHTML = (setup_object.loader_text ? setup_object.loader_text : 'loading. . .');
display.appendChild(loader);
//loader.style.marginLeft = -(loader.offsetWidth/2)+"px"
//loader.style.marginTop = -(loader.offsetHeight/2)+"px"
swappr._processAnchors({display: display, first: first_img, second: second_img, to_img: second_img, from_img: first_img, from: from_element, loader: loader, loader_start: new Date().getTime(), time: time, rate: (100/time)});
},
_addSwap: function(anchor, setup_object) {
this.addEvent(anchor, 'click', (function(anchor, setup_object) {
return function(e) {
swappr.startSwap(anchor, setup_object);
return swappr.preventDefaultEvent(e);
}
})(anchor, setup_object)
);
},
_processAnchors: function(setup_object) {
var anchors = setup_object.from.getElementsByTagName('a');
for (anchor in anchors) {
swappr._addSwap(anchors[anchor], setup_object);
}
},
preventDefaultEvent: function(event) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
return false;
},
postLoad: function() {
scrollr.addSwap = scrollr._addSwap;
scrollr.processAnchors = scrollr._processAnchors;
scrollr.Init = scrollr._Init;
}
}; swappr.addEvent(window, 'load', swappr.postLoad);