Vererbung
Im zweiten Teil geht es um die Vererbung, ich habe u.a. in den Kommentaren den Begriff Klassen verwendet (natürlich gibt es in Javascript keine Klassen in dem Sinne), da ich aber versucht habe Strukturen nachzubilden, wie sie aus Java bzw. C# bekannt sind, erklärt sich das Ganze so besser.
Ob eine Verkettung der drei definierten Klassen möglich ist, gilt es noch auszutesten!
Javascript im HEAD (u.a. Objektinstanzierung):
window.onload = Init;
function Init() {
// neues Objekt der Subklasse instanzieren
var dragObj = new DragById("dragable_1");
// weiterere moegliche Instanzierung
//var dragObj = new DragInFrame(316, 92);
// Events öffentlichen Methoden aus
// dem instanziertem Objekt zuweisen
document.getElementById("dragpanel").onmousedown =
dragObj.startDrag;
document.getElementById("dragpanel").onmousemove =
dragObj.Drag;
document.getElementById("dragpanel").onmouseup =
dragObj.endDrag;
}
Javascript im HEAD (die Basisklasse):
function DragObj() {
// Variable zur Rückgabe
// von öffentlichen Methoden (Pattern)
var that = {};
// Objektvariablen
this.movie = null;
this.startX = 0;
this.startY = 0;
this.start_drag = false;
// öffentliche Methoden
that.startDrag = function(e) {
// Browserweiche
if(!e) { // IE
e = window.event;
this.movie = e.srcElement;
}
else
this.movie = e.target;
this.startY =
e.screenY - parseInt(this.movie.style.top);
this.startX =
e.screenX - parseInt(this.movie.style.left);
this.start_drag = true;
}
that.Drag = function(e) {
if(this.start_drag) {
if(!e)
e = window.event;
var newX = e.screenX - this.startX;
var newY = e.screenY - this.startY;
this.movie.style.left = newX + "px";
this.movie.style.top = newY + "px";
document.title = "X: " + newX + " Y: " + newY;
}
}
that.endDrag = function() {
this.start_drag = false;
}
return that;
}
Javascript im HEAD (die Subklassen):
function DragById(objId) {
// Konstruktor der Basisklasse aufrufen
this.constructor();
// öffentliche Methode der Basisklasse überschreiben
this.startDrag = function(e) {
if(document.getElementById(objId)) {
this.movie = document.getElementById(objId);
this.startY =
e.screenY - parseInt(this.movie.style.top);
this.startX =
e.screenX - parseInt(this.movie.style.left);
this.start_drag = true;
}
}
}
// Initialisierung der Vererbung
DragById.prototype = new DragObj();
// weitere abgeleitete Klasse definieren
function DragInFrame(frameWidth, frameHeight) {
// Konstruktor der Basisklasse aufrufen
this.constructor();
// öffentliche Methode der Basisklasse überschreiben
this.Drag = function(e) {
if(this.start_drag) {
if(!e)
e = window.event;
var newX = e.screenX - this.startX;
var newY = e.screenY - this.startY;
if(newX > 0 && newX < frameWidth)
this.movie.style.left = newX + "px";
if(newY > 0 && newY < frameHeight)
this.movie.style.top = newY + "px";
document.title = "X: " + newX + " Y: " + newY;
}
}
}
// Initialisierung der Vererbung
DragInFrame.prototype = new DragObj();
HTML im BODY:
<img src="html.gif" style="position:absolute; top:0; left:0;" onmousedown="return false;" onmousemove="return false;" width="129" height="108" id="dragable_1" />
Keine Kommentare:
Kommentar veröffentlichen