Файл: usr/plugins/js/obf.srax.fx.js
Строк: 230
<?php
/**
* @name FX Effect
*
* @author Ruslan Sinitskiy (si-rus)
*
* http://www.fullajax.ru/#:license
*/
var Fax = {
timer : function(startValue, endValue, timeout, count){
if (timeout == null) this.timeout = 10; else this.timeout = timeout;
if (count == null) this.count = 20; else this.count = count;
var i = 1;
this.finishPercent = i/this.count;
this.startPercent = 1 - this.finishPercent;
this.isEnd = false;
this.percent = function (){
return this.finishPercent;
};
this.value = function (){
return startValue + i * (endValue - startValue)/this.count;
};
this.stop = function(){this.isEnd = true;};
this.change = function(){};
this.update = function() {
this.change();
i++;
this.finishPercent = i/this.count;
this.startPercent = 1 - this.finishPercent;
};
this.start = function start() {
if ((i <= this.count && !this.isEnd) || (startValue == endValue)) {
this.update();
var _this = this;
this.recall = function() {_this.start()};
setTimeout(this.recall, this.timeout);
} else {
this.isEnd = true;
this.afterEnd();
}
};
this.afterEnd = function(){};
},
jerk : function(obj){
if (typeof obj == 'string') obj = id(obj);
var tmr = new Fax.timer(0, 0, 100, 1);
var delta = 10;
tmr.change = function(){
var pos = Fax.findPosition(obj);
obj.style.top = nextPosition(pos[1]) + 'px';
obj.style.left = nextPosition(pos[0]) + 'px';
}
function nextPosition(px){
val = Math.random();
if (Math.random() >= .5) val = -val;
px += val;
return px ;
}
tmr.start();
},
jerk2 : function(obj){
if (typeof obj == 'string') obj = id(obj);
var tmr = new Fax.timer(0, 0, 100, 1);
var start = Fax.findPosition(obj);
var delta = 10;
var plusH = (Math.random() >= .5) ? true : false;
var plusW = (Math.random() >= .5) ? true : false;
tmr.change = function(){
var pos = Fax.findPosition(obj);
if (start[0] + delta < pos[0]) plusH = false;
if (start[0] - delta > pos[0]) plusH = true;
if (start[1] + delta < pos[1]) plusW = false;
if (start[1] - delta > pos[1]) plusW = true;
pos[0] += plusH ? Math.random() : -Math.random();
pos[1] += plusW ? Math.random() : -Math.random();
obj.style.top = pos[1] + 'px';
obj.style.left = pos[0] + 'px';
}
tmr.start();
},
jerk3 : function(obj){
var objPos = new Array();
for (var i = 0; i < obj.length; i++){
obj[i] = SRAX.get(obj[i]);
if (!obj[i]) continue;
var opos = Fax.findPosition(obj[i]);
objPos[i] = opos;
}
var tmr = new Fax.timer(0, 0, 100, 1);
var deltaH = 30;
var deltaW = 10;
var start = [0,0];
var pos = [0,0];
var plusH = (Math.random() >= .5) ? true : false;
var plusW = (Math.random() >= .5) ? true : false;
tmr.change = function(){
pos[0] += plusH ? Math.random() : -Math.random();
pos[1] += plusW ? Math.random() : -Math.random();
if (start[0] + deltaH < pos[0]) plusH = false;
if (start[0] - deltaH > pos[0]) plusH = true;
if (start[1] + deltaW < pos[1]) plusW = false;
if (start[1] - deltaW > pos[1]) plusW = true;
for (var i = 0; i < obj.length; i++){
obj[i] = SRAX.get(obj[i]);
if (!obj[i]) continue;
var val = objPos[i][1] + pos[1];
obj[i].style.top = val + 'px';
val = objPos[i][0] + pos[0];
obj[i].style.left = val + 'px';
}
}
tmr.start();
},
size : function(obj, timeout, count){
if (typeof obj == 'string') obj = id(obj);
end = obj.clientWidth;
var tmr = new Fax.timer(0, end, timeout, count);
var fontSize = Fax.getStyle(obj,'fontSize');
var ed = '%';
if (fontSize.indexOf(ed) == -1) ed = 'px';
fontSize = parseFloat(fontSize.substring(0,fontSize.length - ed.length));
var right = parseFloat(obj.style.left.substring(0,obj.style.left.length - 2)) + obj.clientWidth;
var left = parseFloat(obj.style.left.substring(0,obj.style.left.length - 2));
tmr.change = function(){
var val = tmr.value();
obj.style.left = (left - val) + 'px';
obj.style.fontSize = Math.ceil(fontSize + tmr.percent() * fontSize) + ed;
}
tmr.start();
},
puff : function(obj){
var dubl = document.createElement('div');
var pos = Fax.findPosition(obj);
dubl.style.fontSize = Fax.getStyle(obj, 'fontSize');
dubl.style.color = Fax.getStyle(obj, 'color');
dubl.style.fontColor = Fax.getStyle(obj, 'fontColor');
dubl.style.position = 'absolute';
dubl.style.left = pos[0] + 'px';
dubl.style.top = pos[1] + 'px';
var a = obj.getElementsByTagName('a');
if (a && a[0] && a[0].innerHTML) dubl.innerHTML = a[0].innerHTML; else return; // dubl.innerHTML = obj.innerHTML;
document.body.appendChild(dubl);
if (SRAX.browser.msie) dubl.style.backgroundColor = 'white';
new Fax.size(dubl, 20, 20);
var op = new Fax.opacity(dubl, 1, 0, 200, 100);
op.afterEnd = function(){
dubl.parentNode.removeChild(dubl);
}
},
findPosition : function(obj) {
if (typeof obj == 'string') obj = id(obj);
var curleft = curtop = 0;
if (obj.offsetParent) {
curleft = obj.offsetLeft
curtop = obj.offsetTop
while (obj = obj.offsetParent) {
if (obj.id == 'linkerLayer') break;
curleft += obj.offsetLeft
curtop += obj.offsetTop
}
}
return [curleft,curtop];
},
getStyle : function(obj, name){
var val;
if (document.defaultView && document.defaultView.getComputedStyle) {
var css = document.defaultView.getComputedStyle(obj, null);
val = css ? css[name] : null;
} else if (obj.currentStyle) {
val = obj.currentStyle[name];
}
return val;
},
opacity : function(obj, start, end, timeout, type, count){
if (typeof obj == 'string') obj = id(obj);
var tmr = new Fax.timer(start, end, timeout, count);
tmr.count = 5;
var agt = navigator.userAgent.toLowerCase();
if (window.ActiveXObject) obj.style.zoom = 1;
tmr.change = function(){
var opacity = tmr.value();
if (window.ActiveXObject) {
if (type == 1) {
if (opacity < 0.3) {
obj.style.filter = "alpha(opacity=0)";
} else {
//obj.style.filter = "alpha(opacity=1)";
obj.style.filter = "AlphaImageLoader(src='', sizingMethod='scale')";
}
} else {
obj.style.filter = "alpha(opacity=" + opacity*100 + ")";
}
} else {
obj.style.KHTMLOpacity = opacity; // Safari and Konqueror
obj.style.MozOpacity = opacity; // Old Mozilla and Firefox
obj.style.opacity = opacity;
}
};
var _this = this;
tmr.afterEnd = function(){
_this.afterEnd();
};
this.afterEnd = function(){};
tmr.start();
this.timer = tmr;
}
}
?>