Seiten

Posts mit dem Label Javascript werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Javascript werden angezeigt. Alle Posts anzeigen

Mittwoch, 14. Dezember 2011

Blogger - Posts zweisprachig ausliefern

Mit dem hier beschrieben jQuery/JavaScript-Projekt, kann man seine Posts, ohne Seitenreload und inklusive Posttitel, zweisprachig ausliefern.With this jQuery/JavaScript project, you can deliver your posts, without page reload and inclusive post title, bilingual.

Alle Teile des Posts bei denen die Sprache umgeschaltet werden soll, müssen in span-Tags mit dem entsprechendem lang-Attribut eingeschlossen sein. Der Titel des Posts muss in den ersten span-Tag der jeweiligen Sprache.All parts of the post where the language is to be toggled, must be in span tags with the matching lang attribute. The title of the post must be in the first span tag of the language.

<p>
  <span lang="de" title="deutscher Posttitel">deutscher Posttext</span>
  <span lang="en" title="english post title">english post text</span>
</p>
<p>
  <span lang="de">mehr deutscher Posttext</span>
  <span lang="en">more english post text</span>
</p>

Zum Umschalten bindet man erstens die multilang.js im header seines Blogs ein. Zweitens muss folgender Code nach dem Seitenload ausgeführt werden:To toggle binds first multilang.js in the head of your blog. Secondly, the following code must be executed after pageload:

// count h3 child objects with lang and title attribut
// Possible problem: no class .post-outer in blog template?
headerLength = $('[lang="' + language + '"][title]').parentsUntil('.post-outer:first').find('h3').length;
   
if(headerLength > 0)
{
  // &lt; must be
  for(var i = 0; i &lt; headerLength; i++)
  {
    getPostHeader(i).html(getPostTitle(i)); 
  }
  switchDisplay();   
}

Wie man dass, mit Hilfe der jQuery ready()-Funktion, am besten macht ist hier beschrieben.
Die gewünschten Sprachen und die entspechenden Flaggen definiert man in multilang.js.
As one that, with the help of the jQuery ready() function, makes it the most, is described here.
Define the languages you use and the appropriate flags in multilang.js.

// specify the languages to switch
var firstLang  = "de";
var secondLang = "en";
var firstFlag = "de.jpg";
var secondFlag = "uk.jpg";

Donnerstag, 8. Dezember 2011

CSS/JavaScript - Komprimierte Skripte wieder lesbar machen

Aus Ladezeitgründen werden Skripte oftmals mit Komprimiertools verkürzt, um solche Skripte wieder zu "entpacken" gibt es verschiedene Möglichkeiten:Due to load-time scripts are often shortened by compression tools, to "unzip" such scripts there are different ways:

JavaScript: jsbeautifier.org

CSS: TopStyle -> Tools -> StyleSweeper

Mittwoch, 30. November 2011

AppTiles - Version 1.0.1 fertig

Mit dem jQuery/JavaScript-Projekt AppTiles können Live Tiles, wie man sie aus Windows Phone 7 kennt, auf Webseiten verwendet werden (Demoseite).With the AppTiles jQuery/JavaScript project you can use Live Tiles, known from Windows Phone 7, on Web pages (Demopage).

ChangeLog

v_1.0.1 - 2011-11-30

  • CSS: Layoutfehler (IE7) beseitigtCSS: Layout errors (IE7) fixed
  • JS: Hinweis auf unvollständige Konfiguration beseitigtJS: Message to incomplete configuration removed

Sonntag, 20. November 2011

jQuery - Windows Phone 7 Live Tiles

ProjektbeschreibungProject Description

Mit dem hier verfügbarem jQuery/JavaScript-Projekt kann man Live Tiles, wie sie u.a. in Windows Phone 7 verwendet werden, auf seinen Webseiten einsetzen (Demo).With the here available jQuery/JavaScript project you can use Live Tiles, known from Windows Phone 7, on Web pages (Demo).

Installation

Als erstes bindet Ihr die benötigten JavaScript-Dateien (jquery.min.js & apptile.js) in den HEADER Eurer Seite ein. Die aktuelle Version der jQuery-Datei findet Ihr hier und das Tile-Skript befindet sich in der Beispiel-Implementierung.First, you includes the necessary JavaScript files (jquery.min.js & apptile.js) in the HEADER of your page. The current version of the jQuery file is here and the tile script is located in the example implementation.

<header>
...


...
</header>

Anschließend folgen einige globale Einstellungen ebenfalls im HEADER.Then follow some global settings in the HEADER.

<header>
...
<script type="text/javascript">
/* global tile setup */
var loopDuration = 5000;  // Pause between the animation in milliseconds
// required pictures (not optional)
var picPath      = "icons/";
var blankImg     = picPath + "blank.png";
var standardImg  = picPath + "standard.png";
var pointImg     = picPath + "point.png";
</script>
...
</header>

Jetzt noch das benötigte CSS-Skript (apptile.css) in den HEADER. Die Datei befindet sich ebenfalls im downloadbaren Beispiel-Projekt.Now the required CSS script (apptile.css) in the HEADER. The file is also located in the downloadable example project.

<header>
...

...
</header>

Optional können mit den folgenden Anweisungen noch Größe und Farbe der Tiles beinflusst werden.Optionally, size and color of the tiles, can be configured with the following instructions.

<header>
...

...
</header>

Erstmal die kürzeste Variante implementierenFirst implement the shortest Variant

Hierfür erzeugt man einen DIV-Tag mit einer id und der CSS-Klasse tilewrapper. Nach dem dem Laden des DIV's, instanziert Ihr ein neues AppTile-Objekt. Das macht man am Besten in der ready()-Funktion, welche von jQuery zur Verfügung gestellt wird.For this adding a DIV tag with an id and CSS class tilewrapper. After the loading of the DIV's, instantiates your a new AppTile object. To do that the best in the ready() function, which is provided by jQuery.

<body>
<script type="text/javascript">
$(document).ready(function()
{
  var sampleTile1 = new AppTile("sampletile1");
});
</script>
...
<div id="sampletile1" class="tilewrapper"></div>
...
</body>

Ausführlich konfiguriertConfigured in detail

Der Tile hat 3 Ansichten - Standard (stdTile), Custom (cstTile) und Background (bckTile) - welche sich unterschiedlich konfigurieren lassen:The tile has 3 views - standard (stdTile), custom (cstTile) and background (bckTile) - which can be configured differently.

stdTile([Title], [Backgroundimage], [Counter])
cstTile([Title], [Backgroundimage], [Counter])
bckTile([Title], [Text], [Backgroundimage])
var sampleTile2 = new AppTile("sampletile2");
sampleTile2.stdTile("IT4Zwigge", "it4zwigge.png");
sampleTile2.cstTile("Development", "homerobot.png", 99);
sampleTile2.bckTile("Training", "", "C# PHP SQL jQuery Javascript CSS...");

startRandomRun(); 

Animation startenStart animation

Um die Tile-Animation auszulösen ruft man die Funktion startTile(id)durch einen beliebigen Event auf. Also zum Beispiel beim Hover über dem Tile durch:To raise the tile animation, call the function startTile(id) by an arbitrary event.

<div id="sampletile2" onmouseover="startTile(id)"></div>

Zum Testen einfach oben auf den IT4Zwigge-Tile zeigen.To test it simply hover the IT4 Zwigge tile above.

oderor

Um die Tiles zufällig zu starten, kann man die Funktion startRandomRun() benutzen. Dazu setzt man den optionalen Parameter bei der Objektinstanzierung auf true (siehe auch Beispiel-Implementierung).To start the tiles randomly, you can use the function startRandomRun(). To do this set the optional parameter when instantiating the object to true (see also example implementation).

var sampleTile2 = new AppTile("sampletile2", true);

Weitere MöglichkeitenMore possibilities

Man kann Tilefarbe & -größe abweichend von den globalen Einstellungen definieren.You can define tile color and tile size by way of derogation from the global settings.

#sampletile3.tilewrapper, #sampletile3 div.tile
{
  background-color: red; 
}
#sampletile3
{
  font-size: 1.25em;
}

Donnerstag, 10. November 2011

jQuery - Testen ob ein Element existiert

if($("#elem").length == 0)
  alert("Da ist kein Objekt mit der ID \"elem\"!");

So kann man z.B. Testen oben ein Element mit der entsprechenden ID existiert. Das funktioniert aber auch bei den anderen Selektoren die das jQuery-Objekt benutzen.

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" />

Freitag, 28. Oktober 2011

jQuery - Windows Phone 7 Live Tiles (Demo)

Go to jQuery - Windows Phone 7 Live Tiles mainpage

Freitag, 1. April 2011

Facebook: created_time mit Javascript formatieren

function formatFBTime(fbDate, long)  {
  //2011-02-26T18:04:11+0000
  var arrDateTime = fbDate.split("T");      
  var arrDate = arrDateTime[0].split("-");
  var arrTime = arrDateTime[1].split("+")[0].split(":");
  var arrDay = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
   var arrMonth = new Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
   
  // TODO: Zeitzone hart (++arrTime[0])
  var newDate = new Date(arrDate[0], arrDate[1], arrDate[2], ++arrTime[0], arrTime[1], arrTime[2]);

  var strDay = newDate.getDate() > 10 ? newDate.getDate() : "0" + newDate.getDate();
  var strWeekDay = arrDay[newDate.getDay()];
  var strMonth   = arrMonth[newDate.getMonth() - 1];
  var strHours   = newDate.getHours() > 10 ? newDate.getHours() : "0" + newDate.getHours();
  var strMinutes = newDate.getMinutes() > 10 ? newDate.getMinutes() : "0" + newDate.getMinutes();
   
  if(long)     
    return strWeekDay + ", " + strDay + ". " + strMonth + " " + newDate.getFullYear() + " um " + strHours + ":" + strMinutes;
  else
    return strDay + ". " + strMonth + " um " + strHours + ":" + strMinutes;
}

Mittwoch, 16. Februar 2011

Facebook/Blogger: Like Button für jeden Blogeintrag

Wenn man im Blogdesign, unter "HTML bearbeiten" das Häkchen bei "Widget-Vorlagen komplett anzeigen" gesetzt hat, findet man im Quelltext den Abschnitt <data:post.body/>.
Hier kann man dann unterhalb einen der beiden gezeigten Codeschnipsel einsetzen.
Wichtig hierbei ist das Referenzieren des jeweiligen Eintrags, dass wird mit expr:href="data:post.url" gemacht.

Beispiel mit Javascript SDK - XFBML (empfohlen): Um dieses Codeschnipsel zu verwenden muss man das Javascript SDK von Facebook im Blog-HTML referenzieren.



Beispiel mit IFrame:
<iframe src="http://www.facebook.com/plugins/like.php?href=data:post.url&layout=standard&show_faces=true&width=450&action=like&font=arial&colorscheme=light&height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>

Wenn man alles richtig gemacht hat, sieht es dann so aus wie hier, also ein Like Button für jeden Blogeintrag. Dass heisst unter anderem, ein Besucher des Blogs kann mit einem Klick, den Eintrag in sein Facebook-Profil posten.

Donnerstag, 15. April 2010

HTML/Javascript: Framegröße an Inhalte anpassen

Das folgende Beispiel kann genutzt werden, wenn man die Framegröße automatisch an wechselnde Inhaltgrößen anpassen möchte. Ein Anwendungsfall wären die UFZ-Adventskalender, welche sich als Popup öffnen und Kalender unterschiedlicher Größe zeigen. Frames sind hier deshalb eingesetzt weil sich das Menü zum Wechseln der Kalender in einem solchen befindet (siehe Screenshots).

Download komplettes Beispiel komplettes Beispiel

Dienstag, 12. Januar 2010

Javascript: Objektorientierung und Drag and Drop (Teil 2)

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" />
Quelltext

Freitag, 8. Januar 2010

AJAX: HTML-Element für Autovervollständigung

Nachdem ich nach einigem Suchen kein stabiles Element für eine AJAX-Autocomplete Funktion gefunden habe, hier mein Mix aus einem Text- und Listenfeld.

Zum Test einfach etwas eingeben (ohne Datenanbindung).

var charCode = 0;      // Tastencode aus beiden Steuerelementen
var optText  = null;   // Textfeld
var optList  = null;   // Listenfeld
var topOpt   = false;  // Hilfsvariable zum Steuern des Uebergangs
var oldText  = "";     // Vorwert aus Textbox merken

function Init(obj)  {
  if(optList)  // Falls noch andere Liste offen
    //CloseList(false);  // IE hängt sich auf
    optList.style.display = 'none';
    
  optText = obj;
  optList = GetSelect(optText);  // SELECT-Element ermitteln
  // geerbte Breite des Eingabefeldes an SELECT-Element weitergebn
  optList.style.width = optText.offsetWidth + "px";
  // Variable charCode setzen
  document.onkeydown = GetKeyCode;
}
function OpenList()  {  
  oldText = optText.value;  // Wert für Abbruch merken

  if(charCode == 27)  {  // ESC
     optList.style.display = 'none';  // Liste wieder zu machen
     return;
  }
  if(charCode == 13)  {  // ESC
     optList.style.display = 'none';  // Liste wieder zu machen
     // Event valuefixed auslösen
     return;
  }  

  if(optText.value.length > 0)  {  // ist etwas im Textfeld
    topOpt = true;  // Pfeiltaste nach oben soll Textfeld aktivieren
     
    with(optList)  {
      // bei diesen Tasten Liste anzeigen
      if(
          charCode ==   8 ||  // Backspace
          charCode ==  40 ||  // Pfeil nach unten
          charCode ==  46 ||  // Delete
         (charCode >=  48 && charCode <= 57) ||  // 0-9
         (charCode >=  65 && charCode <= 90) ||  // a-z
          charCode == 109 ||  // - 
          charCode == 190 ||  // .
          charCode ==  59 ||  // ü
          charCode == 192 ||  // ö          
          charCode == 219 ||  // ß
          charCode == 222     // ä
        )  {
      style.display = 'block';  // Liste anzeigen
      selectedIndex = -1;       // nichts auswaehlen
    }
    }
  }
  else
    CloseList(false);  // wurde z.B. alles geloescht, Liste schliessen
  
  // Übergang zur Liste bei...  
  if(charCode == 40 &&  // ... Pfeiltaste nach unten
     optList.style.display == 'block')  {  // und Liste offen
     
    optText.value = optList.options[0].value;  // Textbox aktualisieren
    optList.focus();                // Liste aktivieren
    optList.selectedIndex = 0;      // ersten Eintrag auswählen 
  }
}
function CloseList(setOpt)  { 
  if(setOpt && (optList.options.length != optList.selectedIndex + 1))  {
    optText.value = optList.value;  // Listenwert ins Textfeld
    // Event valuefixed auslösen
  }
  else  {
    optText.value = oldText;
    oldText = null;
  }  
  optText.focus();  // Textfeld aktivieren
  optList.style.display = 'none';  // Liste ausschalten
}
function CancelSelect()  {
  optList.style.display = 'none';  // Liste ausschalten 
  optText.value = oldText;  // gemerkten Text einsetzen
  optText.focus();  // Textfeld aktivieren
}
function CtrlList()  {

  if(charCode == 13)  // Enter
     CloseList(true);
  if(charCode == 27)  // ESC
     CancelSelect();        
  if((charCode == 38 || charCode == 40) &&  // Pfeiltaste oben unten
     optList.options.length != optList.selectedIndex + 1)  // nicht letzte Option
     optText.value = optList.value; 
      
  if(charCode != 38)  // nicht Pfeiltaste nach oben
    topOpt = false;
        
  // Pfeiltaste nach oben und oberster Eintrag ausgewaehlt  
  if(charCode == 38 && optList.selectedIndex == 0)  {
    if(topOpt)  {  // beim ersten Mal noch nichts machen
      optList.style.display = 'none';  // Liste ausschalten
      optText.focus();  // Textfeld aktivieren 
    }
    else
      topOpt = true;  // um beim zweiten Pfeiltaste nach oben      
  }                   // Steuerelement zu wechseln
}
function GetKeyCode(e) {
  if (!e)
    e = window.event;
  charCode = e.keyCode;
}
function GetSelect(obj)  {
  var count = 0;
  do  {    
    var elem = obj.nextSibling;
    obj = elem;
    
    count++;
    if(count > 3) break;
  } while(elem.type != "select-one")
  
  return elem;
}
function FixValue()  {
  // TODO: Event valuefixed auslösen
  // aktives Element oder Tastencodes prüfen
}
CSS im HEAD:
input.autocomplete  {
 width: inherit;
}
input.autocomplete  {
  display: block;
}
select.autocomplete  {
  display: none;
  position: absolute;
}
#autocomplete1  {
 float: left;
 width: 200px;
}
#autocomplete2  {
   float: left;
 width: 200px;
}
.lastopt  {
  background-color: lightgray;
}
HTML im BODY:
<div id="autocomplete1">
  <input type="text" name="autocomplete2" class="autocomplete" onclick="this.focus();" onfocus="Init(this)" onkeyup="OpenList();" onblur="FixValue();" tabindex="2" />
  <select size="4" class="autocomplete" onclick="CloseList(true);" onkeyup="CtrlList();">
    <option value="Peter">Peter</option>
    <option value="Peters">Peters</option>
    <option value="Petersen">Petersen</option>
    <option value="Petersohn">Petersohn</option>
    <option class="lastopt" title="Schließen">⇑</option>
  </select>
</div>
Download komplettes Beispiel komplettes Beispiel

Freitag, 13. November 2009

Mittwoch, 11. November 2009

Javascript - Schieberegler (Slidebar)

Cross-Browser kompatibel und XHTML-valide

Zum Testen einfach den Slider bewegen.

HTML Schriftgrösse regeln

TEST

Javascript im HEAD:
// Startwert des Mouseevents speichern
var startY = 0;
// Starten und Beenden des Drag-Events
var start_drag = false;
// Dragobjekt
var slider = null;

window.onload = Init;

function Init()  {
  slider = document.getElementById("slidebar");
  slider.style.position = 'absolute';
  slider.style.top = '25px';
  slider.style.left = '1px';
  
  slider.onmousedown = StartDrag;
  document.onmousemove = Drag;
  document.onmouseup = StopDrag;
  
  // Standardevents ausschalten (Firefox)
  with(document.getElementById("slidebarwrapper"))
  { 
    onmousedown = function() { return false; };
    onmousemove = function() { return false; };
  }
}
function StartDrag(e)  {
  // Browserweiche
  if(!e)
    e = window.event;
  
  // Startwert merken  
  startY = e.screenY - parseInt(slider.style.top);
  start_drag = true;
}
function Drag(e)  {
  if(start_drag)  {
    // Browserweiche
    if(!e)
      e = window.event;
      
    // Mausposition - Startwert
    var posY = e.screenY - startY;
    // Schiebebereich einschraenken    
    if(posY > 25 && posY < 70)  {
      // Position zuweisen
      slider.style.top = posY + "px";
      // Schriftgroesse aendern
      document.getElementById("testword").style.fontSize = posY - 10 + "px";
    }
  }
}
function StopDrag(e)  {
  start_drag = false;
}
CSS im HEAD:
#slidebarwrapper  {
  position: relative;
  width: 127px;
  height: 106px;
}
#testword  {
  margin: 0;
}
HTML im BODY:
<div id="slidebarwrapper">
  <img src="html.gif" width="127" height="106" alt="HTML" />
  <img src="slider.gif" width="24" height="8"
  alt="Schriftgrösse regeln" id="slidebar" />
</div>
<p id="testword">TEST</p>