Seiten

Donnerstag, 10. November 2011

Javascript - Objektorientierung und Drag and Drop (1/2)

Konstruktor, Objektvariablen, private und öffentliche Methoden

Dieser erste Teil ist an das vor einiger Zeit veröffentlichte Slider-Skript angelehnt. Hier wird die Logik aus dem älterem Post in objektorientierter Form verwendet.
Im ersten Teil wird mit Javascript eine aus Java oder C# bekannte Objektstruktur verwendet, um Objekte mittels Konstruktor zu instanzieren, in den Objekten Objektvariablen zu verwenden und mit öffentlichen und privaten Methoden zu arbeiten.

Javascript im HEAD (u.a. Objektinstanzierung):
window.onload = Init;

function Init()  {
  // neues Objekt instanzieren
  var dragObj = new DragObj;
  // Events öffentlichen Methoden aus
  // instanziertem Objekt zuweisen
  document.onmousedown = dragObj.startDrag;
  document.onmousemove = dragObj.Drag;
  document.onmouseup   = dragObj.endDrag;  
}
Javascript im HEAD (das Objekt, seine Variablen und Methoden):
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;
 
    var id = this.movie.id;   
    
    if(IsDragable(id))  {  
      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";  
    } 
  }
  
  that.endDrag = function()  {
    this.start_drag = false;
  }
  
  // private Methode
  function IsDragable(id)  {
    // prüfen ob in der ID des angelickten Objektes
    // das Wort "dragable" vorkommt (damit nicht
    // alles verschoben werden kann) 
    if(id.split("_")[0] == "dragable")
     return true;
       
    return false;
  }
  
  return that;
}
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