Hallo,
Kriegt man das besser/übersichtlicher bzw. einfacher hin? Ich übergebe der Objektmethode getValue jetzt immer das eigene Objekt mit, denn "this" verweist ja durch setInterval dann bereits aufs Windows-Objekt, oder?
Das this von myBgColorChange, du willst ja aber this innerhalb von colorHandler.getValue und dort ist der Kontext colorHandler wie man sieht.
Komisch, vorhin ging es im Browser mit FF allein mit "this". Dann ging es nicht, und ich habe mit thisObj und der Übergabe als Parameter gearbeitet.
Jetzt geht es auch mit this. Was meinst du mit "wie man sieht"? Ich dachte jetzt, "this" bezöge sich immer auf den aufgerufenen Kontext?
Das hier läuft grade bei mir im Broser:
<script type="text/javascript">
var createColorObj;
createColorObj = function (value, range) {
return {
"value": value,
"tmpValue" : value,
"range" : range,
"goDown" : true
};
};
var createColorHandler;
createColorHandler = function (red, green, blue) {
return {
// second parameter is range in which color is to be changed
"red": createColorObj(red, 55),
"green": createColorObj(green, 10),
"blue": createColorObj(blue, 16),
getValue : function (colorName) {
if (this[colorName].tmpValue < this[colorName].value - this[colorName].range) {
this[colorName].goDown = false;
}
if (this[colorName].tmpValue > this[colorName].value) {
this[colorName].goDown = true;
}
if (this[colorName].goDown) {
this[colorName].tmpValue -= 1;
} else {
this[colorName].tmpValue += 1;
}
return this[colorName].tmpValue;
}
};
};
window.onload = function () {
var myBody, colorHandler, myBgColorChange;
myBody = document.getElementsByTagName("body")[0];
colorHandler = createColorHandler(255, 168, 136);
myBgColorChange = function () {
var red, green, blue;
red = colorHandler.getValue("red");
green = colorHandler.getValue("green");
blue = colorHandler.getValue("blue");
myBody.style.backgroundColor = "RGB(" + red + "," + green + "," + blue + ")";
};
myBgColorChange();
window.setInterval(myBgColorChange, "120");
};
</script>
<body>
</body>
Aber eben hatte ich auch window.setInterval("myBgColorChange()", "120");
und die Fehlerkonsole meint, myBgColorCange sei nicht definiert. Habe es umgeschrieben in window.setInterval(myBgColorChange, "120"); und es ging. Keine Ahnung warum ???
Gruß
jobo