| 1 |
joko |
1.1 |
/* cbe_slide.js $Revision: 0.12 $ |
| 2 |
|
|
* CBE v4.19, Cross-Browser DHTML API from Cross-Browser.com |
| 3 |
|
|
* Copyright (c) 2002 Michael Foster (mike@cross-browser.com) |
| 4 |
|
|
* Distributed under the terms of the GNU LGPL from gnu.org |
| 5 |
|
|
*/ |
| 6 |
|
|
CrossBrowserElement.prototype.slideBy = function(dX, dY, totalTime, endListener) { |
| 7 |
|
|
var targetX, targetY; |
| 8 |
|
|
dX = parseInt(dX); dY = parseInt(dY); targetX = this.left() + dX; targetY = this.top() + dY; |
| 9 |
|
|
this.slideTo(targetX, targetY, totalTime, endListener) |
| 10 |
|
|
} |
| 11 |
|
|
CrossBrowserElement.prototype.slideTo = function(x, y, totalTime, endListener) { |
| 12 |
|
|
if (this.onslidestart) cbeEval(this.onslidestart, this); |
| 13 |
|
|
this.xTarget = parseInt(x); this.yTarget = parseInt(y); |
| 14 |
|
|
this.slideTime = parseInt(totalTime); |
| 15 |
|
|
if (isNaN(this.xTarget)) { |
| 16 |
|
|
var outside=false; |
| 17 |
|
|
if (isNaN(this.yTarget)) { y = 0; outside = true; } |
| 18 |
|
|
this.cardinalPosition(x, y, outside); this.xTarget = this.x; this.yTarget = this.y; |
| 19 |
|
|
} |
| 20 |
|
|
if (endListener && window.cbeEventJsLoaded) { this.autoRemoveListener = true; this.addEventListener('slideend', endListener); } |
| 21 |
|
|
this.stop = false; |
| 22 |
|
|
this.yA = this.yTarget - this.top(); this.xA = this.xTarget - this.left(); // A = distance |
| 23 |
|
|
this.B = Math.PI / (2 * this.slideTime); // B = period |
| 24 |
|
|
this.yD = this.top(); this.xD = this.left(); // D = initial position |
| 25 |
|
|
if (this.slideRate == cbeSlideRateLinear) { this.B = 1/this.slideTime; } |
| 26 |
|
|
else if (this.slideRate == cbeSlideRateCosine) { |
| 27 |
|
|
this.yA = -this.yA; this.xA = -this.xA; this.yD = this.yTarget; this.xD = this.xTarget; |
| 28 |
|
|
} |
| 29 |
|
|
var d = new Date(); this.C = d.getTime(); |
| 30 |
|
|
if (!this.moving) this.slide(); |
| 31 |
|
|
} |
| 32 |
|
|
CrossBrowserElement.prototype.slide = function() { |
| 33 |
|
|
var now, s, t, newY, newX; |
| 34 |
|
|
now = new Date(); |
| 35 |
|
|
t = now.getTime() - this.C; |
| 36 |
|
|
if (this.stop) { this.moving = false; } |
| 37 |
|
|
else if (t < this.slideTime) { |
| 38 |
|
|
setTimeout("window.cbeAll["+this.index+"].slide()", this.timeout); |
| 39 |
|
|
if (this.slideRate == cbeSlideRateLinear) s = this.B * t; |
| 40 |
|
|
else if (this.slideRate == cbeSlideRateSine) s = Math.sin(this.B * t); |
| 41 |
|
|
else s = Math.cos(this.B * t); // this.slideRate == cbeSlideRateCosine |
| 42 |
|
|
newX = Math.round(this.xA * s + this.xD); |
| 43 |
|
|
newY = Math.round(this.yA * s + this.yD); |
| 44 |
|
|
if (this.onslide) cbeEval(this.onslide, this, newX, newY, t); |
| 45 |
|
|
this.moveTo(newX, newY); |
| 46 |
|
|
this.moving = true; |
| 47 |
|
|
} |
| 48 |
|
|
else { |
| 49 |
|
|
this.moveTo(this.xTarget, this.yTarget); |
| 50 |
|
|
this.moving = false; |
| 51 |
|
|
if (this.onslideend) { |
| 52 |
|
|
var tmp = this.onslideend; |
| 53 |
|
|
if (this.autoRemoveListener && window.cbeEventJsLoaded) { |
| 54 |
|
|
this.autoRemoveListener = false; |
| 55 |
|
|
this.removeEventListener('slideend'); |
| 56 |
|
|
} |
| 57 |
|
|
cbeEval(tmp, this); |
| 58 |
|
|
} |
| 59 |
|
|
} |
| 60 |
|
|
} |
| 61 |
|
|
CrossBrowserElement.prototype.ellipse = function(xRadius, yRadius, radiusInc, totalTime, startAngle, stopAngle, endListener) { |
| 62 |
|
|
if (this.onslidestart) cbeEval(this.onslidestart, this); |
| 63 |
|
|
this.stop = false; |
| 64 |
|
|
this.xA = parseInt(xRadius); |
| 65 |
|
|
this.yA = parseInt(yRadius); |
| 66 |
|
|
this.radiusInc = parseInt(radiusInc); |
| 67 |
|
|
this.slideTime = parseInt(totalTime); |
| 68 |
|
|
startAngle = cbeRadians(parseFloat(startAngle)); |
| 69 |
|
|
stopAngle = cbeRadians(parseFloat(stopAngle)); |
| 70 |
|
|
if (endListener && window.cbeEventJsLoaded) { |
| 71 |
|
|
this.autoRemoveListener = true; |
| 72 |
|
|
this.addEventListener('slideend', endListener); |
| 73 |
|
|
} |
| 74 |
|
|
var startTime = (startAngle * this.slideTime) / (stopAngle - startAngle); |
| 75 |
|
|
this.stopTime = this.slideTime + startTime; |
| 76 |
|
|
this.B = (stopAngle - startAngle) / this.slideTime; |
| 77 |
|
|
this.xD = this.left() - Math.round(this.xA * Math.cos(this.B * startTime)); // center point |
| 78 |
|
|
this.yD = this.top() - Math.round(this.yA * Math.sin(this.B * startTime)); |
| 79 |
|
|
this.xTarget = Math.round(this.xA * Math.cos(this.B * this.stopTime) + this.xD); // end point |
| 80 |
|
|
this.yTarget = Math.round(this.yA * Math.sin(this.B * this.stopTime) + this.yD); |
| 81 |
|
|
var d = new Date(); |
| 82 |
|
|
this.C = d.getTime() - startTime; |
| 83 |
|
|
if (!this.moving) this.ellipse1(); |
| 84 |
|
|
} |
| 85 |
|
|
CrossBrowserElement.prototype.ellipse1 = function() { |
| 86 |
|
|
var now, t, newY, newX; |
| 87 |
|
|
now = new Date(); |
| 88 |
|
|
t = now.getTime() - this.C; |
| 89 |
|
|
if (this.stop) { this.moving = false; } |
| 90 |
|
|
else if (t < this.stopTime) { |
| 91 |
|
|
setTimeout("window.cbeAll["+this.index+"].ellipse1()", this.timeout); |
| 92 |
|
|
if (this.radiusInc) { |
| 93 |
|
|
this.xA += this.radiusInc; |
| 94 |
|
|
this.yA += this.radiusInc; |
| 95 |
|
|
} |
| 96 |
|
|
newX = Math.round(this.xA * Math.cos(this.B * t) + this.xD); |
| 97 |
|
|
newY = Math.round(this.yA * Math.sin(this.B * t) + this.yD); |
| 98 |
|
|
if (this.onslide) cbeEval(this.onslide, this, newX, newY, t); |
| 99 |
|
|
this.moveTo(newX, newY); |
| 100 |
|
|
this.moving = true; |
| 101 |
|
|
} |
| 102 |
|
|
else { |
| 103 |
|
|
if (this.radiusInc) { |
| 104 |
|
|
this.xTarget = Math.round(this.xA * Math.cos(this.B * this.slideTime) + this.xD); |
| 105 |
|
|
this.yTarget = Math.round(this.yA * Math.sin(this.B * this.slideTime) + this.yD); |
| 106 |
|
|
} |
| 107 |
|
|
this.moveTo(this.xTarget, this.yTarget); |
| 108 |
|
|
this.moving = false; |
| 109 |
|
|
if (this.onslideend) { |
| 110 |
|
|
var tmp = this.onslideend; |
| 111 |
|
|
if (this.autoRemoveListener && window.cbeEventJsLoaded) { |
| 112 |
|
|
this.autoRemoveListener = false; |
| 113 |
|
|
this.removeEventListener('slideend'); |
| 114 |
|
|
} |
| 115 |
|
|
cbeEval(tmp, this); |
| 116 |
|
|
} |
| 117 |
|
|
} |
| 118 |
|
|
} |
| 119 |
|
|
CrossBrowserElement.prototype.stopSlide = function() { this.stop = true; } |
| 120 |
|
|
CrossBrowserElement.prototype.startSequence = function(uIndex) { |
| 121 |
|
|
if (!this.moving) { |
| 122 |
|
|
if (!uIndex) this.seqIndex = 0; |
| 123 |
|
|
else this.seqIndex = uIndex; |
| 124 |
|
|
this.addEventListener('slideEnd', cbeSlideSequence); |
| 125 |
|
|
cbeSlideSequence(this); |
| 126 |
|
|
} |
| 127 |
|
|
} |
| 128 |
|
|
CrossBrowserElement.prototype.stopSequence = function() { |
| 129 |
|
|
this.stop=true; |
| 130 |
|
|
this.removeEventListener('slideEnd', cbeSlideSequence); |
| 131 |
|
|
} |
| 132 |
|
|
function cbeSlideSequence(cbe) { |
| 133 |
|
|
var |
| 134 |
|
|
pw = cbe.parentNode.width(), |
| 135 |
|
|
ph = cbe.parentNode.height(), |
| 136 |
|
|
w = cbe.width(), |
| 137 |
|
|
h = cbe.height(); |
| 138 |
|
|
if (cbe.seqIndex >= cbe.sequence.length) cbe.seqIndex = 0; |
| 139 |
|
|
eval('cbe.'+cbe.sequence[cbe.seqIndex++]); |
| 140 |
|
|
} |
| 141 |
|
|
var cbeSlideRateLinear=0, cbeSlideRateSine=1, cbeSlideRateCosine=2; |
| 142 |
|
|
CrossBrowserElement.prototype.slideRate = cbeSlideRateSine; |
| 143 |
|
|
CrossBrowserElement.prototype.seqIndex = 0; |
| 144 |
|
|
CrossBrowserElement.prototype.radiusInc = 0; |
| 145 |
|
|
CrossBrowserElement.prototype.t = 0; |
| 146 |
|
|
CrossBrowserElement.prototype.xTarget = 0; |
| 147 |
|
|
CrossBrowserElement.prototype.yTarget = 0; |
| 148 |
|
|
CrossBrowserElement.prototype.slideTime = 1000; |
| 149 |
|
|
CrossBrowserElement.prototype.xA = 0; |
| 150 |
|
|
CrossBrowserElement.prototype.yA = 0; |
| 151 |
|
|
CrossBrowserElement.prototype.xD = 0; |
| 152 |
|
|
CrossBrowserElement.prototype.yD = 0; |
| 153 |
|
|
CrossBrowserElement.prototype.B = 0; |
| 154 |
|
|
CrossBrowserElement.prototype.C = 0; |
| 155 |
|
|
CrossBrowserElement.prototype.moving = false; |
| 156 |
|
|
CrossBrowserElement.prototype.stop = true; |
| 157 |
|
|
CrossBrowserElement.prototype.timeout = 35; |
| 158 |
|
|
CrossBrowserElement.prototype.autoRemoveListener = false; |
| 159 |
|
|
CrossBrowserElement.prototype.onslidestart = null; |
| 160 |
|
|
CrossBrowserElement.prototype.onslide = null; |
| 161 |
|
|
CrossBrowserElement.prototype.onslideend = null; |
| 162 |
|
|
var cbeSlideJsLoaded = true; |
| 163 |
|
|
// End cbe_slide.js |