GeoMover - JavaScript-Quelltext

Quelltext von geomover.js

Dies ist die Auflistung der Datei geomover.js, die die Funktionalität für die Fenstergeometrieausrichtung bereitstellt.

Im folgenden Quelltext sind Prozedurdeklarationen rot und Kommentare grün markiert.
/* Geomover
 * (c) 2002 Ulrich Kritzner
 * Die Verwendung dieses Scripts in kommerziellen Seiten ist kostenpflichtig
 */

/* Warnung:
 *   Nicht alle Browser unterstuetzen die gleichzeitige Ausfuehrung mehrerer Timeouts.
 *   Daher muss beim gleichzeitigen Einsatz mehrerer Geomover
 *   oder der Kombination mit anderen Droeppez-Animationen
 *   die Datei "timer.js" im HTML-Dokument geladen werden.
 *
 * Erklaerung der "unverstaendlichen" Quelltextabschnitte:
 *   wird "timer.js" _nicht_ eingebunden (if (!(this.usetimer))),
 *     kuemmert sich Geomover selbst um seine timeouts,
 *   wird "timer.js" eingebunden (if (this.usetimer)),
 *     laesst Geomover seine timeouts vom timer managen
 *     Die Funktionen des timers sind in der extra Datei "timer.js" definiert!
 */

var GeoMovers=new Array();

function GM_TimerFunc()
{
  var tx,ty,rx,ry,elapse=this.pelapse,xsize,ysize,xscroll,yscroll;
  xsize=this.parentobject.clientWidth;
  ysize=this.parentobject.clientHeight;
  xscroll=this.parentobject.scrollLeft;
  yscroll=this.parentobject.scrollTop;
  if (this.relx>=0)
    tx=this.relx*(xsize-this.width)+this.absx+xscroll;
  else
    tx=this.absx;
  if (this.rely>=0)
    ty=this.rely*(ysize-this.height)+this.absy+yscroll;
  else
    ty=this.absy;
  rx=tx-this.x;
  ry=ty-this.y;
  if ((rx!=0)||(ry!=0))
  {
    if ((this.initial==0)&&(this.rstep>0))
    {
      if (rx>this.rstep)
        rx=this.rstep;
      if (rx<-this.rstep)
        rx=-this.rstep;
      if (ry>this.rstep)
        ry=this.rstep;
      if (ry<-this.rstep)
        ry=-this.rstep;
    }
    this.initial=0;
    this.x+=rx;
    this.y+=ry;
    if (this.x>xsize+xscroll)
      this.x=xsize+xscroll;
    if (this.y>ysize+yscroll)
      this.y=ysize+yscroll;
    if (this.x<xscroll-this.width)
      this.x=xscroll-this.width;
    if (this.y<yscroll-this.height)
      this.y=yscroll-this.height;
    this.moveobject.style.left=this.x;
    this.moveobject.style.top=this.y;
    elapse=this.aelapse;
  }
  if (this.usetimer)
/* wenn timer.js geladen ist: */
  {
    this.timestep=Math.round(elapse/u_timer_elapse);
    if (this.timestep<1)
      this.timestep=1;
  }
  else
/* wenn timer.js _nicht_ geladen ist: */
    this.timeout=window.setTimeout("GeoMovers["+this.number+"].TimerFunc()",elapse);
}

function GM_Run()
{
  if (this.usetimer)
/* wenn timer.js geladen ist: */
  {
    this.timestep=1;
    if (u_timer_elapse>0)
      u_timer_continue();
  }
  else
/* wenn timer.js _nicht_ geladen ist: */
  {
    if (this.timeout!=0)
      window.clearTimeout(this.timeout);
    this.timeout=0;
    this.TimerFunc();
  }
}

function GM_SetPos(relx,rely,absx,absy,rstep)
{
  this.relx=relx;
  this.rely=rely;
  this.absx=absx;
  this.absy=absy;
  this.rstep=rstep;
}

function GeoMover(aelapse,pelapse,movobj,relx,rely,absx,absy,rstep,parobj)
{
  if (typeof(parobj)=="string")
    this.parentobject=document.getElementById(parobj);
  else
  {
    if (typeof(parobj)=="object")
      this.parentobject=parobj;
    else
      this.parentobject=window.document.body;
  }
  if (typeof(movobj)=="string")
    this.moveobject=document.getElementById(movobj);
  else
  {
    if (typeof(movobj)=="object")
      this.moveobject=movobj;
    else
      return;
  }
  this.number=GeoMovers.length;
  GeoMovers[this.number]=this;
  this.TimerFunc=GM_TimerFunc;
  this.Run=GM_Run;
  this.SetPos=GM_SetPos;
  this.aelapse=aelapse;
  this.pelapse=pelapse;
  this.relx=relx;
  this.rely=rely;
  this.absx=absx;
  this.absy=absy;
  this.rstep=rstep;
  this.x=0;
  this.y=0;
  this.initial=1;
  this.width=this.moveobject.offsetWidth;
  this.height=this.moveobject.offsetHeight;
  if (typeof(u_timer_add_object)=="function")
/* wenn timer.js geladen ist: */
  {
    this.usetimer=1;
    this.timestep=0;
    this.timeval=0;
    u_timer_add_object(this);
  }
  else
/* wenn timer.js _nicht_ geladen ist: */
  {
    this.usetimer=0;
    this.timeout=0;
  }
}
Autor: Ulrich Kritzner