<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Matu´s Blog - Webprogrammierung und jede Menge Tipps &#38; Tricks &#187; Javascript</title>
	<atom:link href="http://einmal-am-tag.de/category/javasript/feed/" rel="self" type="application/rss+xml" />
	<link>http://einmal-am-tag.de</link>
	<description>Das Weblog zum Thema Webprogrammierung &#38; Design:(X)HTML und CSS, PHP, mySQL, CMS u.v.m.</description>
	<lastBuildDate>Sat, 10 Apr 2010 14:37:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>WordPress Kommentare mit Smileys</title>
		<link>http://einmal-am-tag.de/2009-06/wordpress-kommentare-mit-smileys/</link>
		<comments>http://einmal-am-tag.de/2009-06/wordpress-kommentare-mit-smileys/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 19:59:51 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Layout]]></category>
		<category><![CDATA[Smileys]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=1458</guid>
		<description><![CDATA[

Auf vielen WordPress-Blocks befindet sich im Kommentarbereich eine Zeile mit Smileys. 
 &#8230;
Durch Anklicken können diese Smileys dann schnell und einfach in einen Kommentar eingebunden werden. So etwas wollte ich meinen Besuchern natürlich auch bieten und habe für Euch etwas recherchiert. Folgender Javascript-Block, den ich noch XHTML-Strict validiert habe, muss in Eurer comments.php unter (oder [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Auf vielen <strong>WordPress</strong>-Blocks befindet sich im Kommentarbereich eine Zeile mit <strong>Smileys</strong>. </p>
<p><img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif" alt="Icon Wink in " class="wp-smiley"  /><img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_neutral.gif" alt="Icon Neutral in " class="wp-smiley"  /><img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_mad.gif" alt="Icon Mad in " class="wp-smiley"  /> &#8230;</p>
<p>Durch Anklicken können diese <strong>Smileys</strong> dann schnell und einfach in einen <strong>Kommentar</strong> eingebunden werden. So etwas wollte ich meinen Besuchern natürlich auch bieten und habe für Euch etwas recherchiert. Folgender Javascript-Block, den ich noch XHTML-Strict validiert habe, muss in Eurer <em>comments.php</em> unter (oder über) der &lt;textarea&gt;&lt;/textarea&gt; eingefügt werden.<span id="more-1458"></span></p>
<pre>
&lt;div class="smileys"&gt;
  &lt;script type="text/javascript"&gt;
  /*&lt;![CDATA[*/
    function SJB_appendSmiley(text) {
        var comment=document.getElementById('comment');
        comment.value=comment.value+' '+text;
    }

document.write('&lt;a href="javascript:SJB_appendSmiley(\':wink:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif" alt=":wink:" class="wp-smiley" title=":wink:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-|\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_neutral.gif" alt=":-|" class="wp-smiley" title=":-|" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-x\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_mad.gif" alt=":-x" class="wp-smiley" title=":-x" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':twisted:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_twisted.gif" alt=":twisted:" class="wp-smiley" title=":twisted:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':)\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" title=":)" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\'8-O\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_eek.gif" alt="8-O" class="wp-smiley" title="8-O" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':(\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley" title=":(" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':roll:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_rolleyes.gif" alt=":roll:" class="wp-smiley" title=":roll:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-P\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_razz.gif" alt=":-P" class="wp-smiley" title=":-P" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':oops:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_redface.gif" alt=":oops:" class="wp-smiley" title=":oops:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-o\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_surprised.gif" alt=":-o" class="wp-smiley" title=":-o" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':mrgreen:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" class="wp-smiley" title=":mrgreen:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':lol:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_lol.gif" alt=":lol:" class="wp-smiley" title=":lol:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':idea:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_idea.gif" alt=":idea:" class="wp-smiley" title=":idea:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-D\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_biggrin.gif" alt=":-D" class="wp-smiley" title=":-D" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':evil:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_evil.gif" alt=":evil:" class="wp-smiley" title=":evil:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':cry:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_cry.gif" alt=":cry:" class="wp-smiley" title=":cry:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\'8)\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_cool.gif" alt="8)" class="wp-smiley" title="8)" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':arrow:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_arrow.gif" alt=":arrow:" class="wp-smiley" title=":arrow:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-?\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_confused.gif" alt=":-?" class="wp-smiley" title=":-?" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':?:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_question.gif" alt=":?:" class="wp-smiley" title=":?:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':!:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_exclaim.gif" alt=":!:" class="wp-smiley" title=":!:" /&gt;');
document.write('&lt;/a&gt; ');
/*]]&gt;*/
&lt;/script&gt;

&lt;noscript&gt;&lt;p&gt;Wenn du Javascript aktiviert h&auml;ttest, w&uuml;rden hier klickbare Smileys stehen &lt;br /&gt; You could see clickable smiley faces here if you had JavaScript activated.&lt;/p&gt;&lt;/noscript&gt;&lt;/div&gt;
</pre>
<p>Über das <em>div</em> mit der Klassenbezeichnung (class=&#8221;smileys&#8221;) könnt Ihr die Zeile in Eurem Stylesheet positionieren (falls gewünscht). </p>
<p>Der Pfad zu jedem einzelnen Smiley-Bild muss noch durch Eure eigene Domain ersetzt werden.</p>
<pre>
document.write('&lt;img src="http://<span style='color:red;'>deine_domain</span>/wp-includes/images/smilies/icon_exclaim.gif" alt=":!:" class="wp-smiley" title=":!:" /&gt;');
</pre>
<p>Wenn Ihr das nicht händig machen wollt, empfiehlt sich die Bearbeitung in einem Editor. Notepad++ bietet für solche Vorgänge unter <em>Suche</em> (STR+F) die Option <em>Ersetzen</em>.<br />
Damit lassen sich auch in größeren Scripten einzelne Zeichen schnell und problemlos durch andere austauschen.</p>
<p>In allen Zeilen des beginnenen <em>a</em>-Tags müssen zudem die Hochkommata <em>escaped</em> werden.</p>
<pre>
document.write('&lt;a href="javascript:SJB_appendSmiley(<span style='color:red;'>\'</span> ... <span style='color:red;'>\'</span>)"&gt;');
</pre>
<p>Die Smileys (wie auch am Pfad erkennbar) befinden sich in dem Ordner <strong><em>&#8230;/wp-includes/images/smilies/&#8230;</em></strong>, der direkt im Root-Verzeichnis (1. Ebene) Eurer WordPress-Installation liegt. Werft dort einfach mal einen Blick hinein.<br />
Den dort könnt Ihr auch weitere bzw. andere Smilies einfügen. Dazu einfach etwas im Netz stöbern. Eventuell kreiert jemand ja auch einen Satz eigener Smileys und stellt diese dann anderen zur Verfügung. </p>
<p>Sobald Ihr dort eigene Smileys hinzugefügt habt, müssen diese dem WordPress-System noch &#8220;bekannt&#8221; gemacht werden:</p>
<ul>
<li> Öffnet dazu bitte ebenfalls im <strong><em>wp-includes</em></strong>-Ordner die <strong><em>functions.php</em></strong></li>
<li> Drückt dort die Tastenkombination &#8220;STRG+F&#8221;, so dass sich das &#8220;Suchen&#8221;-Fenster öffnet und gebt dort <strong><em>$wpsmiliestrans  = array</strong></em> ein</li>
<li> Dadurch gelangt Ihr zu einem Array, in dem allen einzelnen Smiley-Images (aus dem zuvor angesprochenen smilie-Ordner) ein individueller Text zugeordnet wird.
<p><a href='http://einmal-am-tag.de/wp-content/uploads/2009/06/smiley_array.png' rel="lightbox" title='Smiley Array in WordPress'><img src="http://einmal-am-tag.de/wp-content/uploads/2009/06/smiley_array.png" alt="Smiley Array in " width="300" height="200" /></a></p>
</li>
<li>
Der gleiche Text wird beim Anklicken eines Smileys an die Funktion <em>SJB_appendSmiley</em> übergeben und in den Kommentarbereich eingefügt.<br/><br/></p>
<pre>
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-|\')"&gt;');
</pre>
</li>
<li>
Wordpress tauscht diesen Text dann durch das jeweilige im <strong><em>$wpsmiliestrans</em></strong>-Array zugewiesene Smiley aus
</li>
<li>
Für jeden Eurer eigenen Smileys, die Ihr zuvor im smilie-Odner abgespeichert habt, legt Ihr hier nun nach dem gleichen Schema eine eigene Zeile an:<br/><br/></p>
<pre>
...
 ':neuer_smiley:' => 'neuer_smiley.gif',
':neuer_smiley2:' => 'neuer_smiley2.gif',
':neuer_smiley3:' => 'neuer_smiley3.gif',
...
</pre>
</li>
<li>
Der Javascript-Block in der <strong><em>comments.php</em></strong> muss natürlich um jedes neu hinzugefügte Smiley erweitert werden:<br/><br/></p>
<pre>
document.write('&lt;a href="javascript:SJB_appendSmiley(\':neuer_smiley:\')"&gt;');
document.write('&lt;img src="http://eure_domain/wp-includes/images/smilies/neuer_smilie.gif" alt=":-x" class="wp-smiley" title=":neuer_smilie:" /&gt;');
document.write('&lt;/a&gt; ');
</pre>
</li>
</ul>
<p>Jetzt sollte klar geworden sein, wie es funktioniert.</p>
<p>Mich persönlich sprechen diese <a href='http://noobr.net/2009/02/15-smiley-icon-sets-express-yourself/' title='manto smileys'>&#8216;manto-smileys&#8217;</a> besonders an, die nur noch mit GIMP (oder Photoshop) auf eine akzeptable Größe reduziert werden müßten.<br />
Als ich diese das erste mal gesehen habe, dachte ich nur:&#8221;Wie geil ist das denn!&#8221;. Allerdings sagt die Seite nichts über die Lizenzbestimmungen des chinesischen Designers aus &#8230;! </p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-06/wordpress-kommentare-mit-smileys/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Quellcode strukturieren und kürzen!</title>
		<link>http://einmal-am-tag.de/2009-06/quellcode-strukturieren-und-kuerzen/</link>
		<comments>http://einmal-am-tag.de/2009-06/quellcode-strukturieren-und-kuerzen/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 14:50:58 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Quellcode]]></category>
		<category><![CDATA[Ternary Operators]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=1434</guid>
		<description><![CDATA[

In der Programmierung, besonders bei größeren Projekten/ Scripten, wird der Quellcode schnell unübersichtlich und schwer wartbar. Wer schon einmal ein Programm/ Script mit mehr als 1000 Zeilen geschrieben hat, wird mir da sicherlich zustimmen. Aus diesem Grund empfiehlt es sich, den Quellcode zu kommentieren und übersichtlich einzurücken. Zu dem können if/else-Kontrollstrukturen und Datenbankabfragen verkürzt dargestellt [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>In der Programmierung, besonders bei größeren Projekten/ Scripten, wird der Quellcode schnell unübersichtlich und schwer wartbar. Wer schon einmal ein Programm/ Script mit mehr als 1000 Zeilen geschrieben hat, wird mir da sicherlich zustimmen. Aus diesem Grund empfiehlt es sich, den Quellcode zu kommentieren und übersichtlich einzurücken. Zu dem können <em>if/else</em>-Kontrollstrukturen und Datenbankabfragen verkürzt dargestellt werden. In diesem Tutorial möchte ich Ihnen dazu einige Beispiele bieten.<span id="more-1434"></span></p>
<p><strong>Kommentare einsetzen</strong><br />
In der Programmierung sind Kommentare (Comments) meiner Meinung nach das Salz in der Suppe. Sie ermöglichen es uns auch noch nach Monaten, jeden Abschnitt des jeweiligen Quellcodes besser und somit schneller zu verstehen.  Dies ist besonders wichtig, wenn fremder (nicht von uns selbst programmierter) Code vorliegt. Ich habe mir angewöhnt, besonders komplexe Passagen direkt mit einem Kommentar zu versehen. In PHP gibt es dazu zwei Möglichkeiten:</p>
<pre>
<span style='color:#aaa;'>/*Einzeiliger Kommentar*/</span>
// einzeilige Kommentare können mit ’//’ (zwei Backslashes) in den Quellcode eingefügt werden

<span style='color:#aaa;'>/*Mehrzeiliger Kommentar*/</span>
/* mehrzeilige Kommentare werden mit einem
* beginnenden ’/*’ (Slash und folgendem Sternchen)
* eingeleitet und mit ’*/’ (also umgekehrt)
* wieder abgeschlossen.
* In jeder neuen Zeile empfehle ich ein
* Sternchen als Einleitung einzufügen
*/
</pre>
<p>Auch wenn Kommentare Mehrarbeit bedeuten, möchte ich Ihnen nahelegen, davon ausgiebig Gebrauch zu machen. Spätestens wenn ein älteres Projekt verändert/angepasst werden muss,  werden sie dies zu schätzen wissen. Zudem wird der Lerneffekt verstärkt, da Sie sich mit dem erstellten Quellcode intensiver auseinandersetzen.</p>
<p><strong>Quellcode einrücken</strong><br />
Genau wie beim Kommentieren erfordert das durchgehende Einrücken des Quellcodes zunächst mehr Aufwand (obwohl es bei mir eigentlich schon automatisch erfolgt). Aber neben der verbesserten Lesbarkeit wird durch diese Maßnahme vor allem die Fehlersuche enorm erleichert. Dabei haben sich folgende zwei Möglichkeiten/ Stile etabliert (<a href='http://de.wikipedia.org/wiki/Einr%C3%BCckungsstil' title='Wikipedia Einrückungsstile Programmierung'>Einrückunsstile</a>)</p>
<pre>
<span style='color:#aaa;'>/* Stil 1 */</span>
if($ausruf == 'Hallo') <span style='color:red'>{</span>
	echo "Er hat 'Hallo' gerufen";
<span style='color:red'>}</span> else  <span style='color:red'>{</span>
	echo "Er hat nichts gerufen";
<span style='color:red'>}</span>

<span style='color:#aaa;'>/* Stil 2 */</span>
if($ausruf == 'Hallo')
<span style='color:red'>{</span>
	echo "Er hat ‘Hallo’ gerufen";
<span style='color:red'>}</span>
else
<span style='color:red'>{</span>
	echo "Er hat nichts gerufen";
<span style='color:red'>}</span>
</pre>
<p>Die Einrückungstiefe kann dabei getrost selbst bestimmt werden. Einige nehmen einen ganzen &#8216;Tab&#8217;, andere nur zwei oder drei Leerzeichen. Ich denke, dabei kommt es auf die Verschachtelungstiefe an. </p>
<p>Ich persönliche ertappe mich regelmäßig dabei, dass ich Mal den einen und Mal den anderen Einrückungsstil verwende. Den ersteren Aufgrund meiner Java/C++-Erfahrung (der etwas mehr Platz spart) und den zweiten hinsichtlich PHP (den ich als etwas übersichtlicher empfinde). Des Weiteren achte ich darauf, dass z.B. Gleichheitszeichen bei Zuweisungen ordentlich untereinanderstehen.</p>
<pre>
$string    = 'Hallo Welt';
$boolean   = true;
$int       = 5;
...
</pre>
<p>Entscheiden Sie selber, wie Sie Ihren Quellcode überschaubarer gestalten! Viele Editoren besitzen bereits eine automatische Einrückung oder das sogenannte <em>Syntaxhighlighting</em>, wodurch dieser Schritt vereinfacht wird.</p>
<p><strong>Quellcode verkürzen</strong><br />
Dies ist ein heikles Thema und es gehört viel Erfahrung und eine Menge Grips dazu, Algorithmen oder einfacher gesagt die Programmierlogik zu verkürzen. Während der ersten Schritte, in denen man sich die Basics der Programmierung aneignet, kommt es meistens zu ausufernden Konstrukten, um z.B. eine Anweisung zu programmieren.<br />
Ausgiebiger Gebrauch von verschachtelten if/else-Kontollstrukturen führen zwar letztendlich ebenfalls zum Ziel, sind jedoch fehleranfälliger und verlangsamen das Programm/ Script (mal ganz abgesehen von der bereits zuvor angesprochenen schlechteren Übersichtlichkeit). </p>
<p>Während diverser Weiterbildungen war es ein beliebter „Wettbewerb“ unter den Teilnehmern, alles möglichst kurz zu programmieren. Die Königsklasse hierbei war der legendäre „Einzeiler“: Unter Verwendung der ausgeklügelsten Techniken (Stichworte: Modulo, Reguläre Ausdrücke, …) wurde mehrzeiliger Code zu einer einzigen Zeile komprimiert. </p>
<p>Ich habe dabei ein ums andere Mal große Augen bekommen, mir dies aber möglichst nicht anmerken lassen <img src='http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif' alt="Icon Wink in " class='wp-smiley' />  !<br />
Doch neben genug Gehirnschmalz und Erfahrung gibt es auch ein paar Techniken, die leicht erlernbar sind und den Quellcode ebenfalls kürzer und überschaubarer gestalten.<br />
Eine Möglichkeit besteht darin, einfache if/else-Kontrollstrukturen in einer einzigen Zeile auszuführen:</p>
<pre>
<span style='color:#aaa'>/* Lange Version */</span>

if(isset($_POST['color']))
{
	$backgroundcolor =  $_POST['color'];
}
else
{
	$backgroundcolor =  'white';
}

<span style='color:#aaa'>/* Kurze Version */</span>
$backgroundcolor = (isset($_POST['color'])) <span style='color:red; font-weight:bold;'>?</span> ($_POST['color'] <span style='color:red; font-weight:bold;'>:</span> 'white';
</pre>
<p>Das Beispiel ist aus der Luft gegriffen und bezieht sich auf PHP. Eine ähnliche Syntax gibt es auch für Java und C++ (&#8230;). Es handelt sich hierbei um die sogenannten &#8216;Ternary Operators&#8217; (engl. Dreifach-Operatoren). Am Anfang etwas gewöhnungsbedürftig, möchte man sie später (einmal verinnerlicht) nicht mehr missen.<br />
Mit dem PHP-Befehl <em>sprintf</em> läßt sich der Quellcode ebenfalls oftmals verürzt und übersichtlicher darstellen.</p>
<pre>
<span style='color:#aaa;'>/* Beipiel herkömmliche Schreibweise */</span>
&lt;?php
$query = "SELECT telefon
          FROM kunde
          WHERE vorname = '".addslashes($vorname)."'
          AND name = '".addslashes($name)."'
          AND strasse = '".addslashes($strasse)."'";
$result = mysql_query($query);
...
<span style='color:#aaa;'>/* Nicht sehr übersichlich, oder?!
Dann schauen Sie sich mal dieses Beispiel an*/</span>

$query = sprintf("SELECT telefon
                  FROM kunde
                  WHERE vorname= '%s'
                  AND name = '%s'
                  AND strasse = '%s'",
                  addslashes($vorname),
                  addslashes($name),
                  addslashes($strasse));
$result = mysql_query($query);
?&gt;
</pre>
<p>Hierbei werden im Quellcode Platzhalter (Literale) eingesetzt, die anschließend in der gleichen Reihenfolge durch die angefügten Parameter ersetzt werden.<br />
Ein <em>%s</em> bedeutet hierbei, dass an dieser Stelle ein String gesetzt wird. Es können auch Dezimalzahlen (<em>%d</em>) oder Zahlen vom Typ <em>float</em> (<em>%f</em>) übergeben werden. Zudem lassen sich neben anderen Angaben auch Ausrichtung und Länge einfügen, auf die ich hier aber nicht weiter eingehen werde (<a href='http://www.selfphp.de/funktionsreferenz/string_funktionen/sprintf.php' title='SELFPHP zu sprintf'>weiterführende Informationen</a>).</p>
<p>Tun Sie sich (und eventuell anderen) einen Gefallen und schreiben Sie lesbaren Quellcode!</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-06/quellcode-strukturieren-und-kuerzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript Ajax Ladebild</title>
		<link>http://einmal-am-tag.de/2009-06/javascript-ajax-ladebild/</link>
		<comments>http://einmal-am-tag.de/2009-06/javascript-ajax-ladebild/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 07:32:25 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Ladebild]]></category>
		<category><![CDATA[Load Picture]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=1063</guid>
		<description><![CDATA[

Wenn viel mit Javasript und Ajax gearbeitet wird, kommt es vor, dass der Benutzer bei der einen oder anderen Anwendung warten muss. Dann erscheint meist ein Ladebild oder Loadpicture, um dies zu symbolisieren. Für den Videomodus* habe ich ein neues gesucht und bin heute auf folgende Seite gestoßen:

Dort kann man verschiedene Ladebilder, seinen Vorstellungen angepasst, [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Wenn viel mit <strong>Javasript</strong> und <strong>Ajax</strong> gearbeitet wird, kommt es vor, dass der Benutzer bei der einen oder anderen Anwendung warten muss. Dann erscheint meist ein <strong>Ladebild</strong> oder <strong>Loadpicture</strong>, um dies zu symbolisieren. Für den <a class="videomodus">Videomodus*</a> habe ich ein neues gesucht und bin heute auf folgende <a href="http://www.ajaxload.info/" title="Webseite mit Ladebild-Generator">Seite</a> gestoßen:</p>
<p><a href="/wp-content/uploads/2009/06/ajaxload.jpg" rel="lightbox"><img src="/wp-content/uploads/2009/06/ajaxload-300x225.jpg" alt="Ajaxload-300x225 in " width="400" height="275"  /></a></p>
<p>Dort kann man verschiedene Ladebilder, seinen Vorstellungen angepasst, herunterladen. Vielleicht kannte es der eine oder andere noch nicht.<br />
(*Anmerkung: Der Videomodus ist nur im Firefox, Opera und IE8 verfügbar)</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-06/javascript-ajax-ladebild/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX und das XMLHttpRequest-Objekt</title>
		<link>http://einmal-am-tag.de/2009-06/ajax-xmlhttprequest-objekt/</link>
		<comments>http://einmal-am-tag.de/2009-06/ajax-xmlhttprequest-objekt/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 12:00:44 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Browserweiche]]></category>
		<category><![CDATA[Conditional Compilation]]></category>
		<category><![CDATA[XMLHttpRequest]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=1027</guid>
		<description><![CDATA[

Keine Sorge, ich möchte hier kein weiteres Tutorial über Ajax und das XMLHttpRequest-Objekt schreiben (es sei denn, es wird danach gefragt). Bestimmt wissen Sie, dass die verschiedenen Browser mit dem XMLHttpRequest-Objekt arbeiten, um Daten zwischen Server und Browser zu übertragen, ohne dass die Seite neu geladen werden muss.
Nur der Internet Explorer arbeitet mit einer MSXML-Komponente, [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Keine Sorge, ich möchte hier kein weiteres Tutorial über <strong>Ajax</strong> und das <strong>XMLHttpRequest</strong>-Objekt schreiben (es sei denn, es wird danach gefragt). Bestimmt wissen Sie, dass die verschiedenen Browser mit dem XMLHttpRequest-Objekt arbeiten, um Daten zwischen Server und Browser zu übertragen, ohne dass die Seite neu geladen werden muss.<br />
Nur der Internet Explorer arbeitet mit einer MSXML-Komponente, die als ActiveX-Objekt geladen wird. Aus diesem Grund wird in fast allen Ajax-Tutorials eine Browserweiche eingebaut, um an das benötigte Objekt zu gelangen. Hier möchte ich Ihnen einen kürzeren Weg vorstellen.<span id="more-1027"></span><br />
Zunächst zwei übliche Browserweichen.<br />
try/catch-Block:</p>
<pre>
function erzXMLHttpRequestObject(){

<span style="color:#aaa">/* try/catch */</span>
var resObjekt = null; <span style="color:#aaa">//Object-Variable deklarieren</span>
try{
   resObjekt = new ActiveXObject("Microsoft.XMLHTTP");<span style="color:#aaa">//IE alt</span>
  }
   catch(Error){
     try{
	  resObjekt = new ActiveXObject("MSXML2.XMLHTTP");<span style="color:#aaa">//IE neu</span>
     }
      catch(Error){
	  try{
	     resObjekt = new XMLHttpRequest();<span style="color:#aaa">//IE7+, Firefox, Chrome, Opera, Safari</span>
	  }
	  catch(Error){
		alert("Erzeugung eines XMLHttpRequest-Objekts ist nicht möglich");
	  }
      }
  }
	return resObjekt;<span style="color:#aaa">//Rückgabe des Objekts !</span>
}
</pre>
<p>Oder über eine if/else-Abfrage:</p>
<pre>
<span style="color:#aaa">/* if/else */</span>
function erzXMLHttpRequestObject()
{
var resObjekt = null;
if (window.XMLHttpRequest)
  {
  <span style="color:#aaa">// IE7+, Firefox, Chrome, Opera, Safari</span>
  resObjekt = new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  {
  <span style="color:#aaa">// IE6, IE5</span>
  resObjekt = new ActiveXObject("Microsoft.XMLHTTP");
  }
else
  {
  alert("Erzeugung eines XMLHttpRequest-Objekts ist nicht möglich!");
  }
  return resObjekt;
}
</pre>
<p>Bei <a href="http://de.wikipedia.org/wiki/XMLHttpRequest" title="Wikipedia XMLHttpRequest">Wikipedia</a> finden Sie auch noch eine Möglichkeit, die beides kombiniert.<br />
<script type="text/javascript"><!--
google_ad_client = "pub-0193958220934844";
/* 468x60, Erstellt 05.06.09 */
google_ad_slot = "5369890293";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Bei meinen endlosen Recherchen habe ich eine weitere Lösung gefunden, die ich schon seit längerem ohne Probleme einsetze und die auf Microsofts <strong>Conditional Compilation</strong> (engl. bedingte Ausführung) basiert. Auf diese Weise lässt sich Javascript-Code vor allen Browsern bis auf den Internet Explorer &#8220;verstecken&#8221;. Dabei handelt es sich um ein Javascript-Kommentar.</p>
<pre> /*@cc_on ... @*/
</pre>
<p>Während alle anderen Browser dies ignorieren (da Kommentar), erkennt der IE in <em>&#8216;@cc_on&#8217;</em> (Conditional Compilation &#8211;> CC) eine Anweisung und behandelt den Text zwischen öffnendem und schliessendem <em>&#8216;@&#8217;</em>-Zeichen als normalen Javascript-Code.<br />
Durch diesen Sonderfall lässt sich eine schöne XMLHttpRequest-Erkennung basteln.</p>
<pre>
/*@cc_on @
    if (@_win32 &#038;&#038; @_jscript_version >= 5)
      if (!window.XMLHttpRequest)
	 window.XMLHttpRequest = function() {
           return new  ActiveXObject('Microsoft.XMLHTTP')
         }
@end @*/

resObjekt = new XMLHttpRequest();
</pre>
<p>Durch <em>(!window.XMLHttpRequest)</em> wird dabei getestet, ob der <em>XMLHttpRequest</em> nicht schon existiert, was beim IE bis Version 6 ausgeschlossen ist. Der IE ab Version 7 kennt es dann endlich und lässt die Bedingung aus bzw. nutzt dann ebenfalls den &#8220;normalen&#8221; XMLHttpRequest.<br />
Eine nette Geschichte, wie ich finde. Gefunden habe ich es 	hier: <a href="http://design-noir.de/webdev/JS/XMLHttpRequest-IE/" title="design-noir.de">design-noir.de</a>. Vielen Dank!<br />
Übrigens lassen sich so auch noch weitere Konstrukte bauen.</p>
<pre>
if (/*@cc_on ! @*/ false) {
alert("Dies würde nur im IE ausgeführt werden, da bei allen anderen Browsern die Negation durch '!' nicht greift!");
}
</pre>
<p>Bei den ständigen Problemen mit den IEs für Webworker bestimmt ein interessanter Ansatzpunkt.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-06/ajax-xmlhttprequest-objekt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scroll Top Link (Teil 3)</title>
		<link>http://einmal-am-tag.de/2009-06/scroll-top-link-teil3/</link>
		<comments>http://einmal-am-tag.de/2009-06/scroll-top-link-teil3/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 19:56:12 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Scroll Top]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=908</guid>
		<description><![CDATA[

Im dritten Teil möchte ich Ihnen nun einen Scroll Top Link ohne Verwendung von jquery zeigen. Dies ist vor allem dann wichtig, wenn Sie sich mit der Programmierung beschäftigen und etwas hinter die Kulissen schauen wollen. Oder aber, Sie suchen lediglich eine „schlanke“ Möglichkeit für einen Scroll Top Link.
Natürlich kann ich hier nicht den Komfort [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4>Im dritten Teil möchte ich Ihnen nun einen Scroll Top Link ohne Verwendung von jquery zeigen. Dies ist vor allem dann wichtig, wenn Sie sich mit der Programmierung beschäftigen und etwas hinter die Kulissen schauen wollen. Oder aber, Sie suchen lediglich eine „schlanke“ Möglichkeit für einen Scroll Top Link.</h4>
<p>Natürlich kann ich hier nicht den Komfort bieten, wie dies ein ausgewachsenes Framework wie zum Beispiel jquery mit all seinen Funktionen ermöglicht. Aber das will ich auch gar nicht. Mein Anliegen beschränkt sich auf schlichten, funktionierenden und besonders schlanken Code, mit dem sich ein Scroll Top Link realisieren lässt (309 Byte).<br />
Hierbei gehe ich wieder Schritt für Schritt vor, damit Sie mir auch folgen können, wenn Sie sich noch nicht so gut in der Programmierung auskennen.<span id="more-908"></span></p>
<p><strong>1. Scroll Top Link modifizieren</strong><br />
Zunächst muss der Scroll Top Link in unserer Webseite modifiziert werden. Es reicht nun nicht mehr aus, diesem lediglich eine ID zuzuweisen und dann einfach über die click-Funktion von jquery zu „horchen“, ob dieser betätigt wurde. Wir erinnern uns &#8230;</p>
<pre>
...
$(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(){
...
</pre>
<p>Denn (richtig!), wir verwenden kein jquery mehr und müssen nun alles selber programmieren. Dazu benötigen wir zunächst einen so genannten <em>event-Handler</em>, mit dem auf ein Anwender-Ereignis, in unserem Fall der Klick auf den Scroll Top Link, eingegangen werden kann. Und dieser heißt, welch Zufall <img src='http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif' alt="Icon Wink in " class='wp-smiley' />  , <strong><em>onclick</em></strong>-Event-Handler. </p>
<h5 class="trigger">(Anmerkung)</h5>
<div>
In der Programmierung dreht sich sehr viel um Ereignisse, auf die der Programmierer dann eingehen kann. Jedes Betriebssystem (Windows, Linux, MAC, …) und jede Software mit einer <a href='http://de.wikipedia.org/wiki/Graphical_User_Interface' title='Erklärung zu GUI bei Wikipedia'>GUI</a> (Graphical User Interface &#8211;> grafische Benutzeroberfläche) wartet im Grunde auf ein Ereignis des Benutzers, um anschließend etwas „zu machen“ bzw. auszuführen. Dazu benutzt der Programmierer die schon angesprochenen Event-Handler, die meines Wissens in jeder Programmiersprache vorhanden sind (zumindest in den mir bekannten). Oder aber sogenannte <em>Listener</em>, die auf eine Action warten und dann etwas ausführen (ein sehr gutes Beispiel wäre in diesem Fall Java oder C++ &#8230;). Für Javascript verweise ich Sie auf die Seite von <a href='http://de.selfhtml.org/javascript/sprache/eventhandler.htm' title='Event-Handler'> Selfhtml.org</a>. Dort können Sie alle verfügbaren Event-Handler dieser Programmiersprache nachlesen und kennen lernen, was ich Ihnen an dieser Stelle wärmstens empfehlen möchte. Natürlich nur, sofern Sie daran interessiert sind.
</div>
<p>Dieses <em>onclick</em>-Ereigniss verbinden wir nun mit unserem Scroll Top Link:</p>
<pre>
<span style='color:#6699cc'> &lt;a href='#' id='top' title='Nach oben' <span style='color:red'>onclick='toTop()'</span>&gt; &lt;/a&gt; </span>
</pre>
<p>Wenn nun der Benutzer auf dieses Element „klickt“, dann wird durch das <strong>onclick</strong>-Ereignis die Funktion <em>toTop()</em> angesprochen/ aufgerufen, die wir nun programmieren werden.</p>
<p><strong>2. Scroll Top Funktion programmieren</strong><br />
In unserer Scroll Top Funktion müssen wir zunächst feststellen, ob sich unsere Webseite bereits am oberen Punkt oder aber weiter unten befindet. Um dies feststellen zu können, benutzen wir das <em>pageYOffset-Objekt</em>, welches die momentane vertikale Position unserer Seite beinhaltet. Wie immer kocht der Internet-Explorer der Redmonder sein eigenes Süppchen und dort lässt sich die vertikale Position mit <em>document.body.scrollTop</em> ermitteln.<br />
Nachdem nun anhand der aktuellen Position festgestellt werden kann, ob gescrollt werden muss/ kann, kommt nun die Javascript-Funktion <em>scrollBy()</em> zum Einsatz. </p>
<pre>
<span style="color:#999;">/* Javascript-Funktion scrollBy() mit Parameter */ </span>
scrollBy(0, -20);
</pre>
<p>Dieser Funktion können Parameter übergeben werden, welche die Seite um eine angegebene Anzahl von Pixeln scrollen lässt. Dabei spricht der erste Parameter die <em>x-Achse</em> und der zweite Parameter die <em>y-Achse</em> unserer Webseite an.<br />
Die x-Achse würde nun den Wert 0 erhalten, da wir ja nach oben scrollen wollen. Der y-Achse geben wir den Wert -20, so dass die Seite um 20 Pixel nach oben scrollt (sofern sie noch nicht oben angelangt ist).<br />
Jetzt werden Sie sich eventuell fragen, warum nur 20 Pixel … ich möchte doch ganz nach oben. Das ist richtig, aber wir möchten einen Scroll-Effekt erzielen und nicht sofort oben ankommen. Dazu ist es nötig, immer wieder 20 Pixel nach oben zu scrollen, was letztendlich den Eindruck erzeugt, dass die Seite langsam nach oben gleitet. Dazu ist es wiederum nötig, dass sich die Funktion solange selber aufruft, bis das obere Ende unserer Webseite erreicht wurde. Betrachten wir dazu den nötigen Quellcode:</p>
<pre>
/*&lt;![CDATA[*/
<span style='color:#999'>/* Unsere scrollTop-Funktion */</span>
function toTop() {
<span style='color:#999'>/* Variable für die aktuelle Position deklarieren */</span>
var seitenposition = 0;
<span style='color:#999'>/* Aktuelle Position ermitteln */</span>
if (typeof window.pageYOffset != 'undefined') { <span style='color:#999'>/* Für normale Browser <img src='http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif' alt="Icon Wink in " class='wp-smiley' />  ... */</span>
   seitenposition = window.pageYOffset;
}
else if (typeof document.compatMode != 'undefined'
&#038;&#038; document.compatMode != 'BackCompat'){ <span style='color:#999'>/* ... und für den IE */</span>
   seitenposition = document.documentElement.scrollTop;
}
else if (typeof document.body != 'undefined') {
   seitenposition = document.body.scrollTop;
}

<span style='color:#999'>/* Wenn sich die Seite nicht oben befindet (Seitenposition größer 0) … */</span>
if (seitenposition > 0) {
    scrollBy(0, -20); <span style='color:#999'>/* ... dann scrolle um 20 Pixel nach oben  … */</span>
    setTimeout("toTop()", 5); <span style='color:#999'>/* ... ‘warte’ kurz und rufe die Funktion wieder auf ! */</span>

 }
/*]]&gt;*/
</pre>
<p>Achten Sie bitte da drauf, dass vor <em>pageYOffset</em> das oberste Objekt der Objektfamilie, <em>&#8220;window&#8221;</em>,  mit aufgeführt wird. <a href='http://de.selfhtml.org/javascript/objekte/window.htm' title='Link zur selfhtml.org-Seite'>Selfhtml.org</a> sagt hier zwar aus, dass dieses Objekt auch weg gelassen werden darf, &#8230;</p>
<blockquote><p>
window oder self können auch weggelassen werden.
</p></blockquote>
<p>&#8230; ich kann Ihnen aber versichern, dass dies zum Beispiel auf den IE7 nicht zutrifft (Fehler: &#8216;pageYOffset&#8217; ist undefiniert).<br />
Die einzelnen Werte für den Scroll-Schritt und die Wartezeit können Sie Ihren Vorstellungen anpassen.<br />
Damit ist unsere selbstprogrammierte scrollTop-Funktion fertig und muss nur noch als Javascript-Datei in unsere Webseite integriert werden.<br />
<script type="text/javascript"><!--
google_ad_client = "pub-0193958220934844";
/* 468x60, Erstellt 05.06.09 */
google_ad_slot = "5369890293";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Wirklich fertig? Wenn Sie sich Teil 1 und Teil 2 durchgelesen haben, dann müsste Ihnen aufgefallen sein, dass ein wichtiger Schritt noch fehlt.<br />
Genau! Um das „springen“ vor dem animierten „nach oben gleiten“ zu unterdrücken, müssen wir noch das <em>href</em>-Attribut unseres Scroll Top Links entfernen.<br />
Hierfür bedarf es einer weiteren Funktion:</p>
<pre>
<span style='color:#999'>/*  Nodes/Attribute entfernen */</span>
function removeAttribute() {
<span style='color:#999'>/* Wenn der ScrollTop Link vorhanden ist (HTML-Elementzugriff über id-Attribut) ... */</span>
  if(document.getElementById(<span style='color:red'>'top'</span>)){
      <span style='color:#999'>/* ... dann speichere den Rückgabewert (Element-Objekt) in der Variablen d ... */</span>
      var d = document.getElementById(<span style='color:red'>'top'</span>);
      <span style='color:#999'>/* ... schaue nach, ob das href-Attribute (bzw. das Attributknoten-Objekt) vorhanden ist ... */</span>
      if(d.getAttributeNode(<span style='color:red'>'href'</span>)){
           <span style='color:#999'>/*  ... und wenn ja, speichere wiederum den Rückgabewert (des Attributknoten-Objekts) in der Variablen href … */</span>
           var href = d.getAttributeNode(<span style='color:red'>'href'</span>);
           <span style='color:#999'>/* ... und entferne diesen Attributknoten von unserem Scroll Top Link (Element-Objekt) */</span>
           d.removeAttributeNode(href);
      }
   }
}
<span style='color:#999'>/* Diese Funktion wird automatisch aufgerufen, sobald die gesamte Seite vollständig geladen wurde (window.onload)! */</span>

window.onload=removeAttribute;
</pre>
<p>Durch diese Funktion wird über das DOM (Document Object Model) gezielt auf das href-Attribut unseres Scroll Top Links zugegriffen und dieses letztendlich entfernt ( &#8230; oder vielleicht besser gesagt, aus dem DOM-Baum ausgehängt. Denn im Quelltext ist es weiterhin  vorhanden &#8230;).<br />
Hier genauer auf das Document Object Model einzugehen, würde den Rahmen dieses Tutorials sprengen. </p>
<h5 class="trigger">(Ich möchte sofort eine kurze und einfache Erklärung)</h5>
<div>
Dennoch möchte ich Ihnen eine kurze und einfache Erklärung liefern <img src='http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif' alt="Icon Wink in " class='wp-smiley' />  .<br />
Betrachten Sie Ihre Webseite als einen Baum mit Stamm, den Ästen, den Blättern …!<br />
Der Baum als Gesamtbild entspricht dabei dem obersten Objekt, dem <em>window</em> (das gesamte Browserfenster). Innerhalb unserer removeAttribut-Funktion könnte man das <em>window</em>-Objekt noch mit aufführen:</p>
<pre>
      var d = <span style='color:red'>window.</span>document.getElementById('scrolltop');
</pre>
<p>Dies ist aber an dieser Stelle nicht notwendig und kann weggelassen werden, da hier direkt das <em>document</em>-Objekt folgt. Dieses Ausgangsobjekt unseres Element-Baumes entspricht dem Stamm (Inhalt des Browserfensters), über den alle folgenden (HTML-) Elemente erreicht werden können.<br />
Die einzelnen Elemente, Attribute und Eigenschaften einer Webseite können nun über entsprechende Funktionen (Methoden) angesprochen und verändert werden. Auf unser Baum-Beispiel bezogen würde das folgendermaßen aussehen:<br />
Über unser Gesamtbild des Baumes (window) kann über den Stamm (document) und über die Äste (HTML-Elemente wie a, p, div, span, …) auf deren Blätter (href, title, alt, style, …) zugegriffen werden. Hierzu existieren verschieden Wege, um dies zu bewerkstelligen. Es kann über den Namen &#8230;</p>
<pre>
 ... name=’scrolltop’ ...
... document.getElementsByName(’scrolltop’)[0] ...
</pre>
<p> &#8230; die ID &#8230; </p>
<pre>
... id=’scrolltop’ ...
... document.getElementByID(’scrolltop’) ...
</pre>
<p>&#8230; oder eine Klasse &#8230;</p>
<pre>
... class=’scrolltop’ ...
... document.getElementsByClassName(’scrolltop’) ...
</pre>
<p>&#8230; in Verbindung mit dem so genannten Knotenpunkt &#8230;</p>
<pre>
... getAttributeNode('href') ...
</pre>
<p>&#8230; ein bestimmter Teil eines Elementes angesprochen werden.<br />
Dazu „hangeln“ Sie sich praktisch von oben nach unten durch. Dafür ist es natürlich notwendig, die bereitstehenden Funktionen (Methoden) zu kennen. Sollte Ihr Interesse geweckt sein, dann finden Sie unter <a href='http://de.selfhtml.org/javascript/index.htm' title='Javascript/DOM'> Javascript/DOM</a> umfangreiche Informationen.
</div>
<p>Aber anstatt das <em>href</em>-Attribut zu entfernen, gibt es noch eine einfachere Lösung. Und zwar indem wir unserem Scroll Top Link nach dem Aufruf der toTop-Funktion ein <em>return false;</em> anhängen.</p>
<pre>
<span style='color:#6699cc'> &lt;a href='#' id='top' title='Nach oben' <span style='color:red'>onclick='toTop(); return false';</span>&gt; &lt;/a&gt; </span>
</pre>
<p>Dadurch wird das href-Attribut nicht mehr ausgeführt.<br />
Es reicht also aus, unsere toTop-Funktion, wie schon in <a href=“http://einmal-am-tag.de/2009-05/scroll-top-link-teil1/“ title=“Scroll Top Link Teil1“> Scroll Top Link Teil1</a> beschrieben wurde, entweder direkt (<em>CDATA</em> nicht vergessen) oder als externe Javascript-Datei in den Header unserer Webseite einzufügen.<br />
Nun haben sie drei Möglichkeiten, Ihre Webseite um einen Scroll Top Link zu erweitern.<br />
Ich hoffe, dass Sie mir auf Grund der vielen Umwege nicht böse sind. Aber so erhalten Sie einen tieferen Einblick in das Thema.<br />
Falls Ihnen die Tutorials Spaß bereitet haben und verständlich waren, würde ich mich über ein kurzes Feedback freuen.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-06/scroll-top-link-teil3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Scroll Top Link (Teil 2)</title>
		<link>http://einmal-am-tag.de/2009-05/scroll-top-link-teil2/</link>
		<comments>http://einmal-am-tag.de/2009-05/scroll-top-link-teil2/#comments</comments>
		<pubDate>Sat, 30 May 2009 19:22:07 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Scroll Top]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=848</guid>
		<description><![CDATA[

Wie angekündigt nun der Scroll Top Link mit der jQuery.scrollTo-Funktion von Ariel Flesler (&#8230; hier noch mal die Demo-Seite) .
Hierzu laden wir uns zunächst die neueste Version (momentan scrollTo-1.4.2) besagter scrollTop-Funktion herunter.
Dann entpacken wir die gezippte Datei in einen beliebigen vorher erstellten Order auf unserem PC und schieben die nun verfügbare Javascript-Datei auf unseren Webspace. [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4>Wie angekündigt nun der Scroll Top Link mit der jQuery.scrollTo-Funktion von <a href='http://flesler.blogspot.com/' title='Homepage von Ariel Flesler'>Ariel Flesler</a> (&#8230; hier noch mal die <a href='http://demos.flesler.com/jquery/scrollTo/' title='jQuery.scrollTo-Demo'>Demo-Seite</a>) .</h4>
<p>Hierzu laden wir uns zunächst die neueste Version (momentan <a href='http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.2.zip' title='scrollTo-Version 1.4.2 herunterladen'>scrollTo-1.4.2</a>) besagter scrollTop-Funktion herunter.<br />
Dann entpacken wir die gezippte Datei in einen beliebigen vorher erstellten Order auf unserem PC und schieben die nun verfügbare Javascript-Datei auf unseren Webspace. Bei lokal installiertem Webserver in das entsprechende Verzeichnis auf unserem Rechner … zum Beispiel beim xampp in <em>“c:/xampp/<b>htdocs</b>/&#8230;/scrollto-1.4.2-min.js“</em>. <span id="more-848"></span><br />
Anschließend folgt fast die gleiche Prozedur, die schon im ersten Teil beschrieben wurde. Unter der bereits eingefügten <em>jquery.js</em> im Head-Bereich Ihrer Webseite binden wir zunächst die soeben heruntergeladene <em>scrollTo.js</em> ein.</p>
<pre>
&lt;html&gt;
<span style='color:red'>&lt;head&gt;</span>
&lt;title&gt;Scroll Top Link&lt;/title&gt;
<span style="color:#999">&lt;!-- jquery.js --&gt;</span>
<span style='color:#6699cc'>&lt;script src=‘http://code.jquery.com/jquery-latest.js‘ type=‘text/javascript‘&gt;&lt;/script></span>

<span style="color:#999">&lt;!-- ... und die scrollTo.js --&gt;</span>
<span style='color:#6699cc'>&lt;script src=‘http://ihre_domain.de/wp-content/themes/ihr_theme/js/jquery.scrollTo-1.4.2-min.js‘ type=‘text/javascript‘&gt;&lt;/script></span>
<span style='color:red'>&lt;/head&gt;</span>
&lt;body&gt;
…
</pre>
<p>Anschließend öffnen wir wieder einen Editor unserer Wahl und erstellen eine Datei mit folgendem Inhalt:</p>
<pre>
<span style='color:#6699cc'>/*&lt;![CDATA[*/
<span style='color:#999'>/* ###### Unsere Scroll Top Funktion ###### */</span>
<span style='color:#999'>/* Sobald die Webseite fertig geladen wurde ... */</span>
$(document).ready(<span style='color:#003300'>function</span>(){
  <span style='color:#999'> /* ... und der Scroll Top Link angeklickt wird ... */</span>
   $(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(event){
       <span style='color:#999'> /* ... unterdrücke die normale Funktion des a-Tags  ... */</span>
        event.preventDefault();
       <span style="color:#999"> /* ... und scrolle nach oben! */</span>
        $.scrollTo( 0, 4000);
       <span style="color:#999"> /* ... hier wird jetzt anstatt der animate-Funktion
            aus dem ersten Teil die scrollTo-Funktion eingefügt */</span>
   });
});
/*]]&gt;*/</span>
</pre>
<p>Diese speichern Sie dann wieder, wie in Teil 1 beschrieben,  unter einem beliebigen Namen ab und ermöglichen den Zugriff, in dem Sie diese wiederum in Head-Bereich einbinden. </p>
<h5 class="trigger">(Hinweis)</h5>
<div>
Da ich davon ausgehe, dass Sie in Zukunft noch weitere Javascript-Funktionen verwenden werden, erstellen Sie sich einfache eine <em>main.js</em>, in der Sie alle weiteren zukünftigen Funktionen zusammenfassen:</p>
<pre>
<span style="color:#999"> /* ### MEINE JAVASCRIPT FUNKTIONEN ### */</span>
<span style="color:#999"> /* --- SCROLLTO --- */</span>
$(document).ready(<span style='color:#003300'>function</span>(){
   $(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(event){
        event.preventDefault();
        $.scrollTo( 0, 4000);
   });
});
<span style="color:#999"> /* --- SCROLLTO ENDE --- */</span>

<span style="color:#999"> /* --- WEITERE FUNKTION --- */</span>
…
<span style="color:#999"> /* --- WEITERE FUNKTION ENDE --- */</span>
</pre>
<p>Diese wird lediglich einmal angelegt, beinhaltet all Ihre Funktionen, ist gut überschaubar und kann beliebig erweitert werden!</p>
</div>
<p>Wenn Sie den ersten Teil gelesen haben, dann werden Sie spätestens jetzt gemerkt haben, dass kein großer Unterschied zu diesem Scroll Top Link besteht. Nur dass bei diesem noch eine weitere Javascript-Datei herunter geladen und eingebunden werden muss.<br />
Allerdings bietet die hier eingebundene <em>scrollTo.js</em> noch weitere Möglichkeiten zum animierten Scrollen, wie auf der <a href='http://demos.flesler.com/jquery/scrollTo/' title='jQuery.scrollTo-Demo'>Demo-Seite</a> ersichtlich ist (hierfür ist die vollständige 8 KB-Version nötig).<br />
<script type="text/javascript"><!--
google_ad_client = "pub-0193958220934844";
/* 468x15, Erstellt 07.06.09 */
google_ad_slot = "1534332581";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Aber so schön diese auch anzusehen sind &#8230; mir ist der Sinn noch nicht so ganz klar geworden ist. Ein Einsatz wäre für mich eventuell bei einer Bildergallerie nützlich, um über ein Menü ein bestimmtes Bild anzusteuern.<br />
Ein Unterschied besteht aber: Diese Scroll-Funktion passt sich der Seitenlänge an, wie ich beobachten konnte. Bei kurzen Seiten mit wenig Text wird langsamer gescrollt als bei längeren Seiten mit mehr Textinhalt, obwohl wie bei der animate-Funktion die Scroll-Geschwindigkeit festgelegt wurde.<br />
Ich setze auf dieser Seite die hier vorgestellte Version ein, allerdings lässt sich die <em>animate</em>-Funktion mindestens genauso gut anpassen. Hierzu müssten lediglich einzelne animate-Funktionen gekoppelt werden. Die erste scrollt schnell bis zu einer vorgegebenen Stelle, zum Beispiel 300 Pixel unter dem oberen Rand. Anschließend folgt eine weitere animate-Funktion und scrollt etwas langsamer bis 200 Pixel unter dem oberen Rand usw.!</p>
<pre>
<span style="color:#999"> /* Angepasstes Scrollen */</span>
...
 $(<span style='color:red'>'html, body'</span>) .animate({scrollTop:300}, 2000).animate({scrollTop:200}, 2300).animate({scrollTop:100}, 2600).animate({scrollTop:0}, 3000);
...
</pre>
<p>Je näher ich mir das momentan anschaue, umso mehr gelange ich zu der Einsicht, nur noch die animate-Funktion einzusetzen und meinen Bedürfnissen anzupassen (wie dies bereits beim Videomodus geschehen ist).<br />
Entscheiden Sie für sich selber, welche Möglichkeit Sie nutzen möchten!</p>
<p>Im folgenden dritten Teil zeige ich noch eine komplett eigenständig programmierte Version… ohne <em>jquery</em> und ohne die hier vorgestellte <em>scrollTop.js</em>!<br />
Da ich persönlich noch weitere auf jquery basierende Funktionen auf meiner Seite implementiert habe, kommt dies für mich nicht in Betracht. Aber ich denke, dass der eine oder andere, der nur wenig Javascript auf seiner Seite einsetzt, seinen Nutzen daraus ziehen kann. Zudem lassen sich so einige KB sparen …!</p>
<p><a href='http://einmal-am-tag.de/2009-06/scroll-top-link-teil3/' title='ScrollTop Link (Teil 3)'>Scroll Top Link (Teil 3)</a></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-05/scroll-top-link-teil2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scroll Top Link (Teil 1)</title>
		<link>http://einmal-am-tag.de/2009-05/scroll-top-link-teil1/</link>
		<comments>http://einmal-am-tag.de/2009-05/scroll-top-link-teil1/#comments</comments>
		<pubDate>Tue, 26 May 2009 10:32:37 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Scroll Top]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=662</guid>
		<description><![CDATA[

Nachdem wir nun in der Einleitung zu diesem Tutorial das jquery-Framework eingebunden haben, erstellen wir als nächstes eine eigene Scroll Top Funktion, die auf der jquery-Funktion animate aufbaut.
Dazu öffnen wir zunächst eine neue Datei in einem Editor (zum Beispiel  Notepad++) und kopieren folgenden Quellcode hinein:

/*&#60;![CDATA[*/
/* ###### Unsere Scroll Top Funktion ###### */

/* Sobald die [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4>Nachdem wir nun in der <a href="http://einmal-am-tag.de/2009-05/javascript-spezial-scroll-top-link/">Einleitung</a> zu diesem Tutorial das jquery-Framework eingebunden haben, erstellen wir als nächstes eine eigene Scroll Top Funktion, die auf der jquery-Funktion <strong>animate</strong> aufbaut.</h4>
<p>Dazu öffnen wir zunächst eine neue Datei in einem Editor (zum Beispiel  <a href="http://notepad-plus.sourceforge.net/de/download.php" title="Notepad++ Downloadseite">Notepad++</a>) und kopieren folgenden Quellcode hinein:</p>
<pre>
<span style='color:#6699cc'>/*&lt;![CDATA[*/
<span style='color:#999'>/* ###### Unsere Scroll Top Funktion ###### */</span>

<span style='color:#999'>/* Sobald die Webseite fertig geladen wurde ... */</span>
$(document).ready(<span style='color:#003300'>function</span>(){
  <span style='color:#999'> /* ... und der Scroll Top Link angeklickt wird ... */</span>
   $(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(){
       <span style='color:#999'> /* ... entferne das href-Attribut ... */</span>
        $(<span style='color:red'>this</span>).removeAttr('href');
       <span style="color:#999"> /* ... und scrolle nach oben! */</span>
        $(<span style='color:red'>'html, body'</span>).animate({scrollTop:0},'slow')
   });
});
/*]]&gt;*/</span>
</pre>
<p>Der Quelltext dürfte sich durch die eingefügten Kommentare selbst erklären. <span id="more-662"></span><br />
Das <em>href</em>-Attribut wird durch die <em>removeAttr</em>-Funktion entfernt, da die Seite sonst beim Betätigen des Scroll Top Links erst zum Top der Webseite <em>springen</em> würde, um dann anschließend (wieder unten beginnend) animiert nach oben zu scrollen. Sollte Javascript deaktiviert sein, wird das <em>href</em>-Attribut nicht entfernt und der Scroll Top Link funktioniert ebenfalls (ohne Animation) &#8230; sehr schön!</p>
<p>Anstatt das <em>href</em>-Attribut zu entfernen, kann man auch ein Klick-Ereignis anhängen. </p>
<p>Mit <a href="http://msdn.microsoft.com/de-de/library/bb397489.aspx" title="Infoseite zu preventDefault()"><em>event.preventDefault()</em></a> verhindert man die standardmäßige DOM-Ereignisaktion. Bei einem <em>&lt;a&gt;</em>-Tag mit <em>href</em> wäre das der normale Link Effekt, also das Weiterleiten zu einer anderen Seite.</p>
<pre>
<span style='color:#6699cc'>/*&lt;![CDATA[*/
<span style='color:#999'>/* ###### Unsere Scroll Top Funktion ###### */</span>
<span style='color:#999'>/* Sobald die Webseite fertig geladen wurde ... */</span>
$(document).ready(<span style='color:#003300'>function</span>(){
  <span style='color:#999'> /* ... und der Scroll Top Link angeklickt wird ... */</span>
   $(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(event){
       <span style='color:#999'> /* ... unterdrücke die normale Funktion des a-Tags  ... */</span>
        event.preventDefault();
       <span style="color:#999"> /* ... und scrolle nach oben! */</span>
        $(<span style='color:red'>'html, body'</span>).animate({scrollTop:0},'slow')
   });
});
/*]]&gt;*/</span>
</pre>
<p>Sie sehen, in der Programmierung <cite>führen viele Wege nach Rom</cite>.</p>
<p>Übrigens, den Wert <em>&#8217;slow&#8217;</em> der <em>animate</em>-Funktion können Sie neben <em>&#8216;middle&#8217;</em> oder <em>&#8216;fast&#8217;</em> auch durch einen Zahlenwert ohne Hochkomma (Millisekunden, z.B. 5000) ersetzen und so die Scroll-Geschwindkeit Ihren Vorstellungen anpassen.</p>
<p>Diese Datei speichern Sie nun zum Beispiel als <em>scrolltop.js</em> ab und fügen diese ebenfalls in den Header Ihrer Seite <strong>unter</strong> der <em>jquery.js</em> ein (&#8230;).<br />
Es besteht auch die Möglichkeit, den Quelltext direkt in den <em>Head</em>-Bereich einzufügen. </p>
<pre>
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Scroll Top Link&lt;/title&gt;
<span style='color:#999'>&lt;!-- jquery  --&gt;</span>
&lt;script src='http://code.jquery.com/jquery-latest.js' type='text/javascript'&gt;&lt;/script&gt;
<span style='color:#999'>&lt;!-- ScrollTop-Funktion --&gt;</span>
&lt;script type='text/javascript'&gt;
<span style='color:#6699cc'>/*&lt;![CDATA[*/
$(document).ready(<span style='color:#003300'>function</span>(){
   $(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(){
        $(this).removeAttr('href');
        $(<span style='color:red'>'html, body'</span>').animate({scrollTop:0},'slow')
   });
});
/*]]&gt;*/</span>
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
...
</pre>
<p>Das kann jedoch schnell unübersichtlich werden. Daher ist es anzuraten, alle Javascript-Dateien in einem eigenen Ordner unterzubringen.<br />
Beachten Sie hierbei bitte, den Quellcode mit <a href="http://de.wikipedia.org/wiki/CDATA" title="Informationen zu CDATA auf Wikipedia">CDATA</a> zu verpacken. Dem <a href="http://validator.w3.org/" title="Link zum W3C Markup Validation Service">Validator</a> wird dadurch mitgeteilt, dass es sich im CDATA-Tag um Text (Character Data) handelt, welcher nicht als XHTML anzusehen ist. Ältere Browser verstehen diesen Tag nicht, daher wird er einfach auskommentiert, was für den Validator wiederum keine Bedeutung hat.</p>
<p>Damit ist die erste Möglichkeit, einen animierten Scroll Top Link in die eigene Webseite einzufügen, abgeschlossen.<br />
Noch mal die einzelnen Schritte:</p>
<ul>
<li>Den Scroll Top Link wie in der <a href="http://einmal-am-tag.de/2009-05/javascript-spezial-scroll-top-link#scroll_top_link">Einleitung</a> im Fußbereich oder unter dem Inhalt platzieren</li>
<li>Das jquery-Framework im Header der Webseite integrieren</li>
<li>Unter vorigem Framework die erstellte ScrollTop-Funktion einfügen</li>
</ul>
<p>Zum Schluss fügen Sie in Ihre CSS-Datei noch folgende Formatierung für unseren Scroll Top Link ein:</p>
<pre>
#top {
&nbsp;&nbsp;cursor:pointer;
&nbsp;&nbsp;margin:0;
&nbsp;&nbsp;padding:3px;
&nbsp;&nbsp;position:absolute;
&nbsp;&nbsp;bottom:0;
&nbsp;&nbsp;left:310px;
        /*oder 'right' , je nachdem, was Sie bevorzugen*/
 }
</pre>
<p>Die Werte für <em>left</em> oder <em>right</em> können Sie Ihren Bedürfnissen anpassen. Probieren Sie einfach selber etwas herum.<br />
An dieser Stelle möchte ich noch erwähnen, das die <em>animate</em>-Funktion sehr viel mächtiger ist und es ermöglich, mehrere Eigenschaften auf einmal zu ändern (Sichtbarkeit, Rahmen, Farbe &#8230;). Der Bereich für die <a class="einstellungen" title="Einstellungen">Einstellungen</a> oder der <a class="videomodus">Video-Modus</a> auf dieser Seite sind ein gutes Beispiel dafür (nur verfügbar im IE8, Firefox und Opera bei aktiviertem Javascript!).</p>
<h5 class="trigger">(Bei mir funktioniert es nicht!)</h5>
<div>
Der Quellcode wurde natürlich getestet. Wenn es bei Ihnen nicht sofort klappen sollte (was bei mir, wie in der Programmierung üblich, ebenfalls oft der Fall ist), soll Ihnen diese Liste als Hilfe dienen:
<ul>
<li>Ist Javascript im Browser aktiviert? (z.B. im Firefox oben unter &#8220;Extras&#8221; -> &#8220;Einstellungen&#8221; -> &#8220;Javascript aktivieren&#8221;)</li>
<li>Ist das jquery-Framework ordnungsgemäß im Head-Bereich der Seite eingebunden? (Stimmt der Pfad, alle Hochkomma gesetzt, alle öffnenden und schließenden Tags vorhanden)</li>
<li>Wurde wie vorher jquery unsere scrollTop-Funktion ordnungsgemäß und <strong>unter</strong> jquery eingebunden? Gehen Sie noch mal den Quellcode durch, wurden alle Tags oder ID-Namen innerhalb der runden Klammern in Hochkomma gesetzt (abgesehen von &#8216;this&#8217;); sind alle schließenden Semikolon vorhanden etc.)</li>
<li>Stimmt die ID des Scroll Top Links mit der ID des Klick-Events in unserer Funktion überein?!</li>
<li>Verwenden Sie zusätzlich zu jquery noch ein weiteres Framework (z.B. Mootools)? Wenn ja, dann ersetzen Sie alle &#8216;$&#8217;-Zeichen durch &#8216;jQuery&#8217; für den noConflict &#8211; Mode oder fügen Sie     <a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries" title="noConflict-Funktion">&#8216;jQuery.noConflict()&#8217;</a> direkt über &#8216;$(document).ready(function() &#8230;&#8217; im Quellcode ein. Die verschiedenen Frameworks verwenden teilweise ebenfalls den &#8216;$&#8217;-Variablenname und behindern sich gegenseitig</li>
<li>Löschen Sie zwischendurch den Browser-Cache (z.B. im Firefox unter &#8220;Extras&#8221; -> &#8220;Private Daten löschen &#8230;&#8221; dort jedoch den Haken bei Chronik entfernen, sonst verlieren Sie die zuletzt besuchten Seiten)</li>
</ul>
<p>
Fast immer sind es <strong>Kleinigkeiten</strong>, wenn etwas nicht funktioniert: irgendwo fehlt ein Hochkomma oder Semikolon, eine falsche Klammer (z.B. rund anstatt geschweifte), kein öffnender oder schließender Tag, eine falsche ID &#8230;
</p>
</div>
<p><a href="http://einmal-am-tag.de/2009-05/scroll-top-link-teil2/" title="Scroll Top Link Teil 2">Scroll Top Link (Teil 2)</a></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-05/scroll-top-link-teil1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scroll Top Link (Einleitung)</title>
		<link>http://einmal-am-tag.de/2009-05/scroll-top-link-einleitung/</link>
		<comments>http://einmal-am-tag.de/2009-05/scroll-top-link-einleitung/#comments</comments>
		<pubDate>Mon, 25 May 2009 23:15:09 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Scroll Top]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=623</guid>
		<description><![CDATA[

In diesem Tutorial möchte ich erklären, wie ein Scroll Top Link in die Webseite integriert werden kann.
Ein Scroll Top Link ermöglich es den Besuchern, nachdem sie die Seite fertig gelesen haben, bequem an den Seitenanfang zurück zu gelangen, ohne den Scrollbalken (oder die Nach-Oben-Taste) benutzen zu müssen. Dies gehört zum Usability und sollte auf keiner [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4>In diesem Tutorial möchte ich erklären, wie ein <strong>Scroll Top Link</strong> in die Webseite integriert werden kann.</h4>
<p>Ein Scroll Top Link ermöglich es den Besuchern, nachdem sie die Seite fertig gelesen haben, bequem an den Seitenanfang zurück zu gelangen, ohne den Scrollbalken (oder die Nach-Oben-Taste) benutzen zu müssen. Dies gehört zum Usability und sollte auf keiner Seite fehlen, die viel Content und somit lange Seiten enthält. Dadurch wird dem Benutzer das <em>Durchforsten</em> der Webseite erleichert.</p>
<p>Dies kann auf 2 Arten realisiert werden. Bei der ersten <em>springt</em> die Seite direkt zum Anfang (Top) der Seite. Bei der zweiten Variante erfolgt dies animiert durch Javascript, dabei scrollt bzw. gleitet die Seite bis nach oben. Letzteres sieht elegant (smooth) aus und wird ihnen gefallen. Es erfordert jedoch aktiviertes Javascript im Browser.<span id="more-623"></span><br />
Der Scroll Top Link in diesem Tutorial beinhaltet beide Möglichkeiten, funktioniert also mit (animiert ) wie auch ohne Javascript. Javascript-Funtionalitäten sollten stets eine Alternative bieten. Vor allem dann, wenn grundsätzliche Dinge wie zum Beispiel das Menü damit realisiert werden.</p>
<p>Da sich der Scroll-Top Link im unteren Bereich der Webseite befindet, bietet es sich an, diesen im <em><acronym title=“Fussbereich“>Footer</acronym></em> zu platzieren. Unter Wordpress wäre dieser in der (/wp-content/theme/dein_theme/) <em>footer.php</em> zu finden. Da in meiner Seite der Footer sehr schmall ist, habe ich den Scroll Top Link in der <em>index.php</em> nach den Loop gesetzt (&#8230; unter den Textbereich). Es besteht aber auch die Möglichkeit, den Link ständig im Blickwinkel (position:fixed) anzuzeigen. Dieser kann zum Beispiel automatisch eingeblendet werden, sobald der Benutzer beginnt nach unten zu scrollen. </p>
<p>Ob man sich für ersteres oder letzteres entscheidet, wird letztendlich durch die Zuweisungen im (Cascading) Stylesheet definiert. Dafür wird dem Link eine <em>ID</em> zugewiesen, über die er angesprochen werden kann.<br />
<a name="scroll_top_link"></a></p>
<pre>
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Scroll Top Link&lt;/title&gt;
 &lt;/head&gt;
&lt;body&gt;
&lt;div <span style='color:red'>id=“container“ &gt;</span>
	&lt;div <span style='color:red'>id=“header“</span>&gt;...&lt;/div&gt;
	&lt;div <span style='color:red'>id=“navi“</span>&gt;...&lt;/div &gt;
	&lt;div <span style='color:red'>id=“content“</span>&gt;...&lt;/div &gt;
	&lt;div <span style='color:red'>id=“footer“</span>&gt;
       <span style='color:#6699cc'> &lt;a href=“#“ <span style='color:red'>id=“top“</span> title=“Nach oben“ &gt; &lt;/a&gt; </span>
	&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Der so eingefügte Scroll Top Link wäre in dieser Variante bereits voll funktionsfähig. Es fehlt lediglich noch der Text (Nach oben) oder aber eine Grafik. Ein Beispiel dafür sieht man unten auf dieser Seite.<br />
Im Internet finden sich teilweise Anleitungen, bei denen ein <em>Anker</em> im Header der Seite platziert wird:</p>
<pre>
&lt;a name=“top“&gt; &lt;/a&gt;
</pre>
<p>Dieser wird dann über den Scroll Top Link angesprochen/ aufgerufen, um nach oben zu gelangen:</p>
<pre>
… &lt;a href=“#top“ title=“Nach oben“ &gt; &lt;/a&gt; …
</pre>
<p>Oder der <em>Header</em> wird über die <em>ID</em> angeprochen:</p>
<pre>
… &lt;a href=“#header“ title=“Nach oben“ &gt; &lt;/a&gt;  …
</pre>
<p>Eine weitere Lösung implementiert Javascript direkt im <em>href</em>-Attribut des <em>a</em>-Tags:</p>
<pre>
… &lt;a href=“javascript:scroll(0,0)“ title=“Nach oben“ &gt; &lt;/a&gt; …
</pre>
<p>Welche Möglichkeit eingesetzt wird ist Geschmacksache. Die hier gezeigte Variante über <em>href=“#“</em> ist wohl die einfachste. Letztere funktioniert nur bei aktiviertem Javascript und sollte vermieden werden.</p>
<p>Kommen wir nun nun zu unserer animierten Scroll Top Funktion.<br />
Um diese zu realisieren, besteht die Möglichkeit, selbstständig etwas in Javascript zu programmieren oder aber ein <strong>Javascript-Framework</strong> einzusetzen. Neben <strong>Mootools</strong>, <strong>Script.aculo.us</strong>, <strong>Prototype</strong>, <strong>Dojo</strong> und anderen verweise ich hier auf <strong>jquery</strong>. </p>
<p>Dieses schlanke Framework hat sich etabliert und bietet eine große Anzahl unterschiedlichster Funktionen, um eine Webseite ansprechend gestalten zu können.<br />
Um jquery nutzen zu können, muss das Framework zunächst in die Webseite integriert werden. Ich werde dies Schritt für Schritt erklären, damit auch Nutzer mit weniger oder keinen Kenntnissen zum Ziel gelangen.<br />
Für den einfachen Weg binden Sie jquery direkt über die Herstellerseite von jquery <strong>oder</strong> über googleapis  im Header Ihrer Seite ein:</p>
<pre>
&lt;html&gt;
<span style='color:red'>&lt;head&gt;</span>
&lt;title&gt;Scroll Top Link&lt;/title&gt;
<span style="color:#999">&lt;!-- jquery Herstellerseite --&gt;</span>
<span style='color:#6699cc'>&lt;script src=‘http://code.jquery.com/jquery-latest.js‘ type=‘text/javascript‘&gt;&lt;/script></span>

<span style="color:#999">&lt;!-- ... oder googleapis --&gt;</span>
<span style='color:#6699cc'>&lt;script src=‘http://ajax.googleapis.com/ajax/lips/jquery/1.3.2/jquery.min.js‘ type=‘text/javascript‘&gt;&lt;/script></span>
<span style='color:red'>&lt;/head&gt;</span>
&lt;body&gt;
…
</pre>
<p>Für welche Quelle man sich dabei entscheidet ist <em>wurscht</em>. Ich bevorzuge die dritte Möglichkeit, in dem man sich die neueste <a href="http://docs.jquery.com/Downloading_jQuery" title="Neueste Version von jquery runterladen">jquery-Version</a> von der Webseite des Herstellers herunterladet und in einem Ordner auf seinem eigenen Webspace entpackt. Diese bindet man anschließend wie eine von den beiden erstgenannten Möglichkeiten im Header der eigenen Webseite ein:</p>
<pre>
<span style="color:#999">&lt;!-- Lokal vorliegende jquery-Version einbinden --&gt;</span>
<span style='color:#6699cc'>&lt;script src=‘http://meinedomain.de/pfad_zum_ordner/jquery-min.js‘ type=‘text/javascript‘&gt;&lt;/script></span>
</pre>
<p>So fühle ich mich einfach wohler, zumal die Dateigröße von jquery nicht ins Gewicht fällt. Für Unerfahrene ist die Einbindung über eine der beiden erstgenannten Wege eventuell empfehlenswerter, da unproblematischer.<br />
Nachdem das Framework nun verfügbar ist, stehen uns mehrere Möglichkeiten für das ScrollTop-Ereignis zur Verfügung</p>
<ul>
<li> Wir verwenden die schon vorhandene <em>Animate</em>-Funktion in Verbindung mit der <em>scrollTop</em>-Eigenschaft und schreiben uns eine eigene Funktion</li>
<li> Wir verwenden <a href="http://flesler.blogspot.com/" title="jQuery.ScrollTo runterladen">jQuery.ScrollTo</a> von Ariel Flesler (<a href="http://demos.flesler.com/jquery/scrollTo/" title="jquery.ScrollTo Demo">Demo</a>)</li>
<li> Wir verwenden kein Framework und programmieren uns unsere eigene ScrollTop-Funktion</li>
</ul>
<p>Ich werde auf alle drei Möglichkeiten eingehen &#8230; allerdings zeigt die Uhr gerade 01:11 Uhr an und es wird Zeit ins Bett zu gehen. Ich wünsche eine gute Nacht, morgen geht es weiter!</p>
<p><a href="http://einmal-am-tag.de/2009-05/scroll-top-link-teil1/" title="Scroll Top Link Teil 1">Scroll Top Link (Teil 1)</a></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-05/scroll-top-link-einleitung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
