Dez. 23 2007

Hervorheben von verweis-sensitiven Grafiken

Tag: Javascript,ToolsTobi @ 3:13 p.m.

Landkarten werden auf Webseiten immer wieder gebraucht. Wäre es nicht schön, wenn man bestimmte Gebiete beim Mouseover hervorheben könnte? Das von Christian Effenberger entwickelte Javascript Mapper.js 1.0 macht dies möglich. Diese Bibliothek ermöglicht das Hervorheben von Flächen einer verweis-sensitiven Grafik (einer so genannten „Image Map“).

Die Nutzung dieser Bibliothek ist sehr einfach. Zuerst muss sie im Header der Seite eingebunden werden:

<script type="text/javascript" src="mapper.js"></script>

Danach definieren wir die Image Map:

<img class="mapper noborder iopacity50 icolorff0000" src="my_image.jpg" usemap="#my_map" width="343" height="425" border="0" alt="" />
<map name="my_map">
<area shape="poly" title="Titel des Bereiches" coords="295,341, 296,337, 293,336, <!-- weitere Koordinaten -->" alt="Titel" />
<!-- alle weiteren Bereiche-->
<area ... />
</map>

Den einzigen Nachteil sehe ich darin, dass es aufwendig ist, die hervorzuhebenden Bereiche zu definieren.

Mit einem Klick auf die Grafik gelangt man zu Demos auf der Entwicklerseite.

Mapper.js 1.0


Dez. 23 2007

Javascript-Benchmark

Tag: Allgemeines,JavascriptPatrick @ 1:04 a.m.

Die Seite Coding Horror veröffentlichte vor wenigen Tage einen für Javascript- und im speziellen Ajax-Entwickler interessanten Performancevergleich der Browser in Sachen Ausführungsgeschwindigkeit von Javascript. Der mit Hilfe des Javascript-Benchmarks Sunspider erstellte Bericht testete die aktuellen Browser (Firefox 2, Opera 9.5, Internet Explorer 7 und Safari 3.0.4) u.a. in den Bereichen 3D-Rendering (Fließkommaberechnung), mathematische Funktionen, reguläre Ausdrücke, Kontrollstrukturen und String-Funktionen. Dabei stellte sich heraus, dass der sehr beliebte und kostenlose Firefox nur dank des schlechten String-Handlings des Internet Explorer 7 nicht auf dem letzten Platz landete. In 3 der 8 Szenarien schnitt der Firefox deutlich schlechter als die Konkurrenz ab, vor aber im Umgang mit Bit-Operationen.

Der komplette Test kann bei den Kollegen von www.codinghorror.com angesehen werden.


Dez. 22 2007

ImageFlow jetzt in der Version 0.7

Tag: Javascript,ToolsTobi @ 11:45 p.m.

Vor kurzem hatten wir über die Javascript Cover Flow Bildergalerie „ImageFlow 0.6“ berichtet. Nun wurde die Version 0.7 veröffentlicht.

Die aktuelle Version bringt folgende Änderungen mit sich:

  • es wurden verschiedene Cursor-Typen hinzugefügt
  • es wurden Konfigurations-Variablen hinzugefügt
  • Änderungen in der Implementierung: der gesamte Javscript Code wurde in einer einzelnen Datei (imageflow.js) zusammen geführt
  • die Bildunterschrift wird direkt im alt Attribut des <img> Tag definiert

ImageFlow 0.7 runterladen

Einfach auf das Foto klicken, um zu einer von mir erstellten Demo zu gelangen.

Image Flow 0.7


Dez. 21 2007

Einfaches Javascript Tabmenü

Tag: JavascriptPatrick @ 11:29 a.m.

Beim Stöbern durch die bunte Internetwelt stieß ich auf ein relativ einfaches Javascript-Tabmenü, das auf den Namen Tabtastic hört, und habe dazu ein eigenes Beispiel erstellt. Der Aufbau ist schnell erklärt.

Im HTML-Header werden folgende Javascript-Dateien verlinkt:

<script src="addclasskillclass.js" type="text/javascript"></script>
<script src="attachevent.js" type="text/javascript"></script>
<script src="addcss.js" type="text/javascript"></script>
<script src="tabtastic.js" type="text/javascript"></script>

In der tabtastic.js habe ich die 89. Zeile mit dem Aufruf der AddStyleSheet-Funktion auskommentiert und die css-Datei per Hand eingebunden.

<link href="tabtastic.css" rel="stylesheet" type="text/css" />

Um Problemen mit der Schriftgröße aus dem Weg zu gehen, habe ich selbst noch einige css-Angaben in den HTML-Head eingefügt:

body {
	font-family:arial,serif;
	background-color:#eee;
}
.tabset_tabs {
	font-size: 15px;
	line-height: 115%;
}
#tabmenu div{
	width: 500px;
}

Man definiert in HTML eine Liste und steckt den Tabinhalt in div-Container. Das sieht dann wie folgt aus:

<ul class="tabset_tabs">
<li><a href="#tab1" class="active">Latein (alt)</a></li>
<li><a href="#tab2">Latein (neu)</a></li>

<li><a href="#tab3">Übersetzung</a></li>

<li><a href="#tab4">Autor</a></li>
</ul>
<div id="tab1" class="tabset_content">
<h2 class="tabset_label">Tab 1</h2>
<-- Inhalt -->
</div>
<div id="tab2" class="tabset_content">
<h2 class="tabset_label">Tab 2</h2>
<-- Inhalt -->
</div>
<div id="tab3" class="tabset_content">
<h2 class="tabset_label">Tab 3</h2>
<-- Inhalt -->
</div>
<div id="tab4" class="tabset_content">
<h2 class="tabset_label">Tab 4</h2>
<-- Inhalt -->
</div>

Das definierte h2-Element in den Containern wird intern benötigt, ist jedoch nicht sichtbar.


Dez. 20 2007

Google Chart API mit Hilfe des Chart Maker nutzen

Tag: Google,ToolsTobi @ 7:51 p.m.

Vor kurzem berichteten wir über Google`s neue Chart API. Wer sich mit der API schon einmal auseinander gesetzt hat, hat sicher gemerkt, dass sich Diagramme sehr leicht erstellen lassen. Sobald das Diagramm umfangreicher wird, wird es jedoch komplizierter den richtigen Link zusammen zu bauen, der dann an die Google Chart API geschickt wird.

Jetzt gibt es dafür die ultimative Unterstützung, den Chart Maker. Der Chart Maker bietet eine grafische Benutzeroberfläche, über die sich die Konfiguration für das Diagramm festlegen lässt. Mit einem Klick auf den Button „GET CHART“ lässt sich auch sofort eine Diagramm-Vorschau generieren. Ebenso wird der fertige Link für den <img> Tag erzeugt, den man nur noch kopieren und an die gewünschte Stelle einfügen muss.

Der Code des Chart Maker wurde bei Google Code veröffentlicht.

Hier ein Screenshot:

Chart Maker


Dez. 19 2007

3D Panoramabilder mit Javascript

Tag: Javascript,ToolsTobi @ 10:47 p.m.

John Dyer hat eine Möglichkeit entwickelt, 3D Panoramas mit Javascript zu erstellen.

Das Script erzeugt aus einem großen Panorama eine Reihe von div Elemente. Diese Elemente werden mit Kopien von dem Ausgangsbild gefüllt. Die div Elemente werden dann entlang einer Sinus-Kurve verzerrt, sodass ein optischer 3D Effekt entsteht.

Es sind verschiedene Krümmungswinkel, wie auch die Fischaugen-Prespektive möglich.

Das Panorama Script befindet sich noch im Experimentierstatus und funktioniert momentan leider nur im Firefox. Dennoch ist es lohnenswert, sich das anzuschauen.

Hier geht zu einer Demo:

3D Panorama


Dez. 17 2007

Eigene Funktion zum Scrollen von div-Elementen

Tag: JavascriptPatrick @ 1:20 a.m.

Mit übergroßen Inhalten hat man als Webmaster öfters mal zu tun. Dabei stellt man stets die Frage, wie man damit umgeht. Ich habe für dieses Problem eine div- und javascript-basierte Scroll-Funktion geschrieben, die es ermöglicht – ähnlich einem iframe – innerhalb des übergroßen Inhalts zu scrollen. Innerhalb des Inhalts ist ein Steuerkreuz zu sehen, dass im Ausgangszustand halbtransparent ist und erst beim Überfahren mit der Maus voll sichtbar wird. Das Steuerkreuz selbst ist eie Areamap.

Diese Funktion würde sich auch anbieten um einen Live-Ticker oder ähnliches zu realisieren.

Eine kleine Demonstration des Scriptes in Aktion kann man auf diesem Link hier sehen.

Wichtigster Bestand ist die Javascript-Funktion zum bewegen des Inhalts-div.

function moveDIV( var1, var2 ) {
	if ( var1 == 0 ) {
		document.getElementById("zeug").style.left = "0px";
		document.getElementById("zeug").style.top = "0px";
	} else {
		if ( var2 ) {
			/* alter Wert ohne Einheit */
			var2 = document.getElementById("zeug").style.left;
			var2 = Number(var2.substring(0, var2.length-2));
			var3 = document.getElementById("zeug").style.width;
			var3 = Number(var3.substring(0, var3.length-2));
			var4 = document.getElementById("tool").style.width;
			var4 = Number(var4.substring(0, var4.length-2));
			// wenn links am rand angekommen
			if ( var2 + var1 <= 0 ) {
				if ( var2 + var1 > -var3 + var4 ) {
					document.getElementById("zeug").style.left = var2 + var1 + "px";
				} else {
					document.getElementById("zeug").style.left = -var3 + var4 + "px";
				}
			}
		} else {
			/* alter Wert ohne Einheit */
			var2 = document.getElementById("zeug").style.top;
			var2 = Number(var2.substring(0, var2.length-2));
			// wenn links am rand angekommen
			if ( var2 + var1 <= 0 )	{
				document.getElementById("zeug").style.top = var2 + var1 + "px";
			}
		}
	}
}
&#91;/source&#93;

Diese Funktion unterscheidet, ob ein Benutzer vertikales oder horizontales Scrollen aktiviert hat. Aufgerufen wird die Funktion mittels folgenden Maus-Ereignissen, die die Scrollfuntion bei gedrückhalten der rechten Maustasten in 15 Millisekundentakt aufruft und dabei um jeweils 5px den Inhalt bewegt:

&#91;source language='javascript'&#93;
onmousedown="aktiv = window.setInterval('moveDIV(5, true)', 15); "
onmouseup="window.clearInterval(aktiv);
&#91;/source&#93;

Damit der Benutzer das Überfahren bemerkt, wird per Javascript der Mauszeiger verändert. Um einige Problemfälle auszuschließen und sicherzustellen, dass nur eine Intervallfunktion nur einmal ausgeführt wird, habe ich auch noch nachfolgende Eventhandler eingebaut:

&#91;source language='javascript'&#93;
onmouseover="this.style.cursor='pointer';"
onmouseout="if (aktiv) window.clearInterval(aktiv);
&#91;/source&#93;

Allgemein wird das div-Gerüst wie folgt eingebaut. An oberster Stelle wird das tool-div als Elternelement definiert.

&#91;source language='html'&#93;
<div id="tool" style="width: 500px; height: 200px; overflow: hidden; border: 1px solid gray; position: relative; ">

Anschließend wird das Menü eingebunden.

<div id="steuerung" style="position: absolute; top: 0px; left: 0px; margin-left: 420px; margin-top: 5px; z-index: 100; opacity: 0.2; filter: alpha(opacity=20); " onmouseover="fadeDIV(10); " onmouseout="fadeDIV(2); ">
<img src="kreuz.gif" alt="" usemap="#kreuz" border="0" />
<map name="kreuz">
<area shape="rect" coords="1,26,22,48" onmouseover="this.style.cursor='pointer';" onmousedown="aktiv = window.setInterval('moveDIV(5, true)', 15); " onmouseup="window.clearInterval(aktiv); " onmouseout="if (aktiv) window.clearInterval(aktiv); " alt="nach links" title="nach links" />
<area shape="rect" coords="53,26,74,48" onmouseover="this.style.cursor='pointer';" onmousedown="if (aktiv) window.clearInterval(aktiv); aktiv = window.setInterval('moveDIV(-5, true)', 15); " onmouseup="window.clearInterval(aktiv); " onmouseout="if (aktiv) window.clearInterval(aktiv); " alt="nach rechts" title="nach rechts" />
<area shape="rect" coords="28,1,47,22" onmouseover="this.style.cursor='pointer';" onmousedown="if (aktiv) window.clearInterval(aktiv); aktiv = window.setInterval('moveDIV(5, false)', 22); " onmouseup="window.clearInterval(aktiv); " onmouseout="if (aktiv) window.clearInterval(aktiv); " alt="nach oben" title="nach oben" />
<area shape="rect" coords="28,52,47,74" onmouseover="this.style.cursor='pointer';" onmousedown="if (aktiv) window.clearInterval(aktiv); aktiv = window.setInterval('moveDIV(-5, false)', 22); " onmouseup="window.clearInterval(aktiv); " onmouseout="if (aktiv) window.clearInterval(aktiv); " alt="nach unten" title="nach unten" />
<area shape="rect" coords="28,26,47,48" onmouseout="if (aktiv) window.clearInterval(aktiv); " onmouseover="this.style.cursor='pointer';" onclick="moveDIV(0)" alt="Ausgangsansicht" title="Ausgangsansicht" />
</map>
</div>

Danach wird noch das Kind-div mit dem Inhalt eingebettet und alle offenen divs werden geschlossen..

<div id="zeug" style="width: 1000px; margin-left: 0px; position: absolute; top: 0px; left: 0px;">
<-- INHALT -->
</div>
</div>

Dez. 08 2007

Diagramme erstellen leicht gemacht mit der Google Chart API

Tag: Google,ToolsTobi @ 5:58 p.m.

Jeder Webmaster musste bestimmt schon einmal Daten in Form eines Diagramms für eine Web-Applikation visualisieren. Dafür konnte in der Vergangenheit zum Beispiel die PHP-Klasse PHPLOT genutzt werden. Noch einfacher geht es jetzt mit der Google Chart API, einer einfachen Schnittstelle, die anhand einer URL dynamisch ein Diagramm erstellt. Man definiert im HTML-Code für das Diagramm ein Bild und gibt als Quelle die URL mit den gewünschten Parametern zur Google Chart API an. Google liefert das fertige Diagramm. Einfach genial!

Die URL im HTML <img> Tag sieht wie folgt aus:

http://chart.apis.google.com/chart?<parameter 1>&<parameter 2>&<parameter n>

Diese Parameter können verwendet werden:

  • cht der Diagrammtyp (chart type), z.B. p3 für ein 3-dimensionales Kuchendiagramm
  • chd die Diagrammdaten (chart data)
  • chs die Diagrammgröße (chart size) in Pixel, z.B. 250×125
  • chl die Diagrammbeschriftung (chart labels), deren Werte mit | abgetrennt werden, z.B. A|B|C
  • chco die Farben der einzelnen Diagrammelemente (chart colors)

Die Diagrammdaten können in drei verschiedenen Formaten kodiert angegeben werden:

Simple encoding

chd=s:<chart data>

Die Daten werden mittels Groß- und Kleinbuchstaben sowie Ziffern angegeben. Der Unterstrich deklariert einen fehlenden Wert. Mehrere Datenmengen werden über das Komma abgetrennt.

Text encoding

chd=t:<chart data>

Die Daten bestehen aus Fließkommewerten (float) von 0.0 bis 100.0 . Einen fehlenden Wert kann über -1 deklariert werden. Mit dem Pipe-Zeichen | werden einzelne Datenmengen getrennt.

Extended encoding

chd=e:<chart data>

Diese Daten bestehen jeweils aus einem Paar der Zeichen A bis Z, a bis z, 0 bis 9, Bindestrich und Punkt angegeben. Die Datenmengen werden hier wieder über das Komma getrennt.

Es stehen einige verschiedene Diagramm-Typen wie Linien-, Balken-, Kuchen-, Venn- und Punktdiagramm zur Auswahl.

Hier ein paar Beispiele:

Kuchendiagramm3-dimensionales Kuchendiagramm
http://chart.apis.google.com/chart?cht=p3&chd=s:hmz&chs=250x125&chl=Teil1|Teil2|Teil3&chco=ff0000</code></pre>
Venn-DiagrammVenn-Diagramm
http://chart.apis.google.com/chart?cht=v&chs=200x125&chd=t:100,80,60,30,30,30,10&chco=00ff00,0000ff,ff0000</code></pre>
PunktdiagrammPunktdiagramm
http://chart.apis.google.com/chart?cht=s&chd=s:984sttvuvkQIBLKNCAIi,DEJPgq0uov17zwopQODS,AFLPTXaflptx159gsDrn&chxt=x,y&chxl=0:|0|2|3|4|5|6|7|8|9|10|1:|0|25|50|75|100&chs=200x125</code></pre>

Für das Ajax-Framework jQuery gibt es ein Zeichnen-Plugin, mit dem sich ebenfalls Diagramme erstellen lassen. Darauf werden wir noch in einem separaten Blog-Post eingehen.


Dez. 07 2007

Browserbasierte Web-Entwicklung mit Radria

Tag: ToolsTobi @ 8:00 p.m.

Radria steht für „Rapid Development of Rich Internet Applications“, also der raschen Entwicklung von umfangreichen Internetanwendungen.

Radria wird als Open-Source Software von SQL Fusion entwickelt, mit dem Zweck alle nötigen Tools zur Entwicklung von Internetanwendungen in den Webbrowser zu verlagern. Radria besteht aus freien Komponenten, wie einem WYSIWYG-Editor, wiederverwendbare PHP- und Javascript Bausteine, Komponenten zum Erstellen einer Ajax- und Datenbankgestützten Web-Applikation oder eines Mashups.

Mit der aktuellen Version der Software ist es bereits möglich lassen, Webseiten und Datenbankabfragen zu erzeugen.

Aktuell besteht Radia aus:

  • einem Ajax-Pagebuilder zum Erstellen von Webseiten
  • einer Entwicklungsumgebung für das Handling von Datenbanken und SQL-Abfragen
  • einem Site-Manager zur Einrichtung von Datenbankverbindungen, der Übertragung von Daten per FTP und einer Paketverwaltung, über die sich Erweiterungen installieren lassen

Das Projekt ist vielversprechend und verfolgt einen interessanten Ansatz. Ich bin gespannt, wie es sich zukünftig weiterentwickelt und ob es sich für den Einsatz bei Webentwicklern durchsetzen kann.

Zum Download bei SourceForge.net


Dez. 06 2007

Microsofts neuer Internet Explorer

Tag: AllgemeinesTobi @ 11:27 p.m.

Microsoft hat die Bezeichnung für seinen neuen Webbrower bekannt gegeben. Er wird (wie zu erwarten war) als „Internet Explorer 8“ klassifiziert. Wie IE 7 wird er auch in zwei Ausbaustufen verfügbar sein, das heißt je nachdem welches Betriebssystem installiert ist (Windows XP oder Vista), stehen unterschiedliche Funktionen zur Verfügung. Welche detaillierten Neuerungen der Browser mit sich bringt, ist noch unklar, er soll jedoch einen besseren Umgang mit Webstandards besitzen. CSS und Ajax sollen somit besser unterstützt werden.

Eine Beta-Version soll noch im Dezember 2007 erscheinen.


« Vorherige SeiteNächste Seite »