Wie kann man einen atemberaubenden jQuery Style Switcher erstellen
() translation by (you can also view the original English article)
In diesem Tutorial zeige ich Ihnen, wie Sie mit jQuery und PHP einen stilvollen Switcher erstellen können. Das Endergebnis ist ein unaufdringlicher und anpassungsfähiger stilvolles Switcher, der schnell und einfach zu bedienen ist.
Schritt 1: Der HTML-Code
Zuerst müssen wir unsere grundlegende HTML-Datei erstellen und sie als index.php speichern:
1 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2 |
<html xmlns="http://www.w3.org/1999/xhtml"> |
3 |
<head>
|
4 |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
5 |
<title>Style Switcher</title> |
6 |
<?php
|
7 |
// Checks for, and assigns cookie to local variable:
|
8 |
if(!empty($_COOKIE['style'])) $style = $_COOKIE['style'];
|
9 |
// If no cookie is present then set style as "day" (default):
|
10 |
else $style = 'day';
|
11 |
?>
|
12 |
|
13 |
<!-- StyleSheet -->
|
14 |
<link id="stylesheet" type="text/css" href="css/<?php echo $style ?>.css" rel="stylesheet" /> |
15 |
|
16 |
<!-- jQuery -->
|
17 |
<script type="text/javascript" src="js/jquery.js"></script> |
18 |
|
19 |
<!-- Our plugin -->
|
20 |
<script type="text/javascript" src="js/styleswitcher.jquery.js"></script> |
21 |
|
22 |
</head>
|
23 |
<body>
|
24 |
<div id="container"> |
25 |
<h1>Style-Switcher Example</h1> |
26 |
<ul id="nav"> |
27 |
<li><a href="#">Home</a></li> |
28 |
<li><a href="#">About</a></li> |
29 |
<li><a href="#">Services</a></li> |
30 |
<li><a href="#">Products</a></li> |
31 |
<li><a href="#">Links</a></li> |
32 |
<li><a href="#">Contact</a></li> |
33 |
</ul>
|
34 |
<div id="banner"></div> |
35 |
<div id="content"> |
36 |
<h2>NETTUTS Tutorial Example</h2> |
37 |
<p>Page content...</p> |
38 |
</div>
|
39 |
<div id="foot"> |
40 |
<p>Footer stuff...</p> |
41 |
</div>
|
42 |
|
43 |
<!-- StyleSheet selection: -->
|
44 |
<div id="style-switcher"> |
45 |
<h4>Choose your style:</h4> |
46 |
<ul>
|
47 |
<li id="day"><a href="style-switcher.php?style=day">Day</a></li> |
48 |
<li id="night"><a href="style-switcher.php?style=night">Night</a></li> |
49 |
</ul>
|
50 |
</div>
|
51 |
|
52 |
</div>
|
53 |
|
54 |
<script type="text/javascript"> |
55 |
$('#style-switcher a').styleSwitcher(); // Calling the plugin... |
56 |
</script>
|
57 |
|
58 |
</body>
|
59 |
</html>
|
Sie werden sehen, dass es ein PHP-Code, der gerade unter dem Titel-Attribute im Header der Seite befindet. Es ist sehr einfach - alles, was hier los ist, ist dies ein Test für das Vorhandensein von Cookies «style» genannt ist - wenn es vorhanden ist, ist es an die aktuellen Variablen zugewiesen wird (auch als «style»), und wenn das Cookie nicht vorhanden ist, das Thema vorbelegt ("day") auf die Variable $style
. Dann wird diese Variable in den href Attribut-Referenzen genannt werden (href="css/.sss"/?php echo $style?>.css"
).
Sie werden sehen, dass die Div-Style-Switcher-Ebene oben in unserem HTML-Code angezeigt wird. Keine Notwendigkeit, fügen Sie es mit Hilfe von JavaScript, da die Methode, die wir verwenden, um den Schalter zu Arbeitsstil ermöglicht es, auch wenn JavaScript deaktiviert ist. Zwei Links (und Day und Night) führen direkt in eine Datei namens style-switcher.php mit zusätzlichen Zeichenfolge in der Abfrage ein relevantes Thema zu definieren (z.B. href=„style-switcher.php?style=day“
).
Ich habe das Plugin auch für jQuery styleSwitcher benannt. Es ist noch in der Entwicklungsphase (na ja, sind wir für den Moment gemacht, wenn Sie den Artikel zu lesen), so halten Sie auf! ... Wir werden dieses Plugin in Schritt 4 der Lektion schreiben.
Schritt 2: CSS
Jetzt müssen wir ein paar CSS-Stylesheets für unseren HTML-Code erstellen. Ich habe beschlossen, nur zwei Tabelle zu schaffen - du wirst das Thema "Day" haben, und das andere wird das Thema "Night" haben, und ich habe sie entsprechend genannt. (day.css & night.css)
Day Thema



Night Thema



Es empfiehlt sich, einen Stil zu erstellen und dann alle Selektoren in eine andere Tabelle zu kopieren. Alles, was Sie ändern müssen, ist das Hinzufügen anderer CSS-Regeln und -Konstrukte. Natürlich können Sie so viele Tabellen haben, wie Sie möchten, aber in dieser Lektion verwenden wir nur zwei. Darüber hinaus sind day und night gut kombiniert!
day.css:
1 |
#dummy-element{width:2px;} /* Necessary to check if StyleSheet has loaded */ |
2 |
|
3 |
/* Quick Reset */
|
4 |
body,ul,ol,li,img,form,p,h1,h2,h3,h4,h5,h6,blockquote { |
5 |
margin: 0; |
6 |
padding: 0; |
7 |
border: none; |
8 |
list-style: none; |
9 |
font-weight: normal; |
10 |
}
|
11 |
|
12 |
/* General / Header */
|
13 |
body {background: #98beeb url(../img/day-body-bg.jpg) repeat-x; } |
14 |
#container { |
15 |
width: 60%; |
16 |
margin: 0 auto; |
17 |
min-width: 400px; |
18 |
max-width: 800px; |
19 |
position: relative; |
20 |
}
|
21 |
h1 { |
22 |
text-align: left; |
23 |
text-transform: uppercase; |
24 |
color: white; |
25 |
font-size: 1.4em; |
26 |
padding: 45px 30px 10px 30px; |
27 |
}
|
28 |
|
29 |
/* Navigation */
|
30 |
#nav { |
31 |
padding: 5px 5px 0 0; |
32 |
overflow: hidden; |
33 |
}
|
34 |
#nav li {display: inline;} |
35 |
#nav a { |
36 |
float: left; |
37 |
color: #6195ce; |
38 |
font-weight: bold; |
39 |
text-decoration: none; |
40 |
padding: 3px 6px; |
41 |
margin-left: 5px; |
42 |
background: white; |
43 |
}
|
44 |
#nav a:hover {color: #2c5a8c;} |
45 |
|
46 |
/* Banner */
|
47 |
#banner { |
48 |
height: 125px; |
49 |
background: url(../img/day-banner.jpg) center; |
50 |
border: 5px solid white; |
51 |
clear: both; |
52 |
}
|
53 |
|
54 |
/* Content Area */
|
55 |
#content { |
56 |
border: 10px solid white; |
57 |
background: white; |
58 |
color: #2c5a8c; |
59 |
margin: 5px 0; |
60 |
}
|
61 |
#content a {font-weight: bold;} |
62 |
#content a:hover {text-decoration: underline;} |
63 |
h2 { |
64 |
padding: 0.3em 0; |
65 |
font-size: 1.4em; |
66 |
}
|
67 |
p {padding: 0.3em 0;} |
68 |
|
69 |
/* Footer */
|
70 |
#foot { |
71 |
background: white; |
72 |
color: #1f3a57; |
73 |
text-align: center; |
74 |
border: 10px solid white; |
75 |
clear: both; |
76 |
}
|
77 |
#foot a { |
78 |
text-decoration: none; |
79 |
font-weight: bold; |
80 |
color: #2c5a8c; |
81 |
}
|
82 |
#foot a:hover {text-decoration: underline;} |
83 |
|
84 |
/* Style-Switcher */
|
85 |
#style-switcher { |
86 |
position: absolute; |
87 |
width: 100%; |
88 |
top: 0; |
89 |
left: 0; |
90 |
right: 0; |
91 |
height: 34px; |
92 |
background: #79a3cc url(../img/day-ss-bg.jpg); |
93 |
border-bottom: 1px solid white; |
94 |
}
|
95 |
#style-switcher ul { |
96 |
border-right: 1px solid white; |
97 |
float: right; |
98 |
}
|
99 |
#style-switcher h4 { |
100 |
display: inline; |
101 |
color: #153c67; |
102 |
font-weight: bold; |
103 |
line-height: 34px; |
104 |
padding: 0 10px; |
105 |
float: left; |
106 |
border-left: 1px solid white; |
107 |
}
|
108 |
#style-switcher li {display: inline;} |
109 |
#style-switcher li a { |
110 |
float: left; |
111 |
line-height: 26px; |
112 |
color: white; |
113 |
background: #90a6bb; |
114 |
text-decoration: none; |
115 |
padding: 0 13px; |
116 |
display: inline; |
117 |
margin: 4px 4px 4px 0; |
118 |
}
|
119 |
#style-switcher li a:hover {background: #3a5a7c;} |
night.css:
1 |
#dummy-element{width:2px;} /* Necessary to check if StyleSheet has loaded */ |
2 |
|
3 |
/* Quick Reset */
|
4 |
body,ul,ol,li,img,form,p,h1,h2,h3,h4,h5,h6,blockquote { |
5 |
margin: 0; |
6 |
padding: 0; |
7 |
border: none; |
8 |
list-style: none; |
9 |
font-weight: normal; |
10 |
}
|
11 |
|
12 |
/* General / Header */
|
13 |
body { |
14 |
font-family: Calibri,"Arial Narrow",Arial,Sans-Serif; |
15 |
background: #072952 url(../img/night-body-bg.jpg) repeat-x; |
16 |
}
|
17 |
#container { |
18 |
width: 60%; |
19 |
margin: 0 auto; |
20 |
min-width: 400px; |
21 |
max-width: 800px; |
22 |
position: relative; |
23 |
}
|
24 |
h1 { |
25 |
text-align: left; |
26 |
text-transform: uppercase; |
27 |
color: white; |
28 |
font-size: 1.4em; |
29 |
padding: 45px 30px 10px 30px; |
30 |
font-family: "Times New Roman", Times, serif; |
31 |
}
|
32 |
|
33 |
/* Navigation */
|
34 |
#nav { |
35 |
padding: 5px 5px 0 0; |
36 |
overflow: hidden; |
37 |
}
|
38 |
#nav li {display: inline;} |
39 |
#nav a { |
40 |
float: left; |
41 |
color: #010e2e; |
42 |
font-weight: bold; |
43 |
text-decoration: none; |
44 |
padding: 8px 6px 3px 6px; |
45 |
font-size: 0.8em; |
46 |
text-transform: uppercase; |
47 |
font-weight: 700; |
48 |
margin-left: 5px; |
49 |
background: white url(../img/night-nav-bg2.jpg) repeat-x; |
50 |
}
|
51 |
#nav a:hover {color: #2c5a8c;} |
52 |
|
53 |
/* Banner */
|
54 |
#banner { |
55 |
height: 125px; |
56 |
background: url(../img/night-banner.jpg) center; |
57 |
border: 5px solid white; |
58 |
clear: both; |
59 |
}
|
60 |
|
61 |
/* Content Area */
|
62 |
#content { |
63 |
color: white; |
64 |
margin: 20px 0; |
65 |
padding: 5px 0; |
66 |
border-top: 4px double white; |
67 |
border-bottom: 4px double white; |
68 |
font-family: "Times New Roman", Times, serif; |
69 |
}
|
70 |
#content a {font-weight: bold;} |
71 |
#content a:hover {text-decoration: underline;} |
72 |
h2 { |
73 |
padding: 0.3em 0; |
74 |
font-size: 1.4em; |
75 |
}
|
76 |
p {padding: 0.3em 0;} |
77 |
|
78 |
/* Footer */
|
79 |
#foot { |
80 |
color: white; |
81 |
font-size: 0.8em; |
82 |
clear: both; |
83 |
}
|
84 |
#foot p { |
85 |
text-align: center; |
86 |
padding: 0; |
87 |
}
|
88 |
#foot a { |
89 |
text-decoration: none; |
90 |
font-weight: bold; |
91 |
color: white; |
92 |
}
|
93 |
#foot a:hover {text-decoration: underline;} |
94 |
|
95 |
/* Style-Switcher */
|
96 |
#style-switcher { |
97 |
position: absolute; |
98 |
width: 100%; |
99 |
top: 0; |
100 |
left: 0; |
101 |
right: 0; |
102 |
height: 34px; |
103 |
}
|
104 |
#style-switcher ul {float: left;} |
105 |
#style-switcher h4 { |
106 |
display: inline; |
107 |
color: white; |
108 |
font-weight: bold; |
109 |
line-height: 34px; |
110 |
padding: 0 10px; |
111 |
float: left; |
112 |
}
|
113 |
#style-switcher li {display: inline;} |
114 |
#style-switcher li a { |
115 |
float: left; |
116 |
line-height: 34px; |
117 |
color: white; |
118 |
text-decoration: none; |
119 |
padding: 0 4px; |
120 |
margin-left: 5px; |
121 |
display: inline; |
122 |
}
|
123 |
#style-switcher li a:hover { |
124 |
background: white; |
125 |
color: #13181c; |
126 |
background: white url(../img/night-ss-bg.jpg) repeat-x left bottom; |
127 |
}
|
In der Tatsache ist es keine CSS-Lektion, daher werde ich nicht auf alle Fragen antworten, aber wenn Sie sie haben, zögern Sie bitte nicht, sie in den Kommentaren zu stellen. Und ja, ich weiß, dass die Eigenschaft min-width in älteren Browsern nicht unterstützt wird! ;)
Schritt 3: style-switcher.php
Hier schreiben wir die Grundfunktionen des Style-Switches. In der Tat sind dies nur ein paar Zeilen von sehr einfachem PHP-Code. Sie müssen eine neue Datei namens "style-switcher.php" erstellen und folgendes hineinkopieren:
1 |
<?php
|
2 |
$style = $_GET['style']; |
3 |
setcookie("style", $style, time()+604800); // 604800 = amount of seconds in one week |
4 |
if(isset($_GET['js'])) { |
5 |
echo $style; |
6 |
} else { |
7 |
header("Location: ".$_SERVER['HTTP_REFERER']); |
8 |
}
|
9 |
?>
|
Der obige Code weist also der Variablen $ style den Wert der Variablen GET $style
zu. Mit anderen Worten, das Skript übernimmt den Wert der style-Eigenschaft aus der Abfragezeichenfolge (style-switcher.php? style =day). Dann erstellt er einen Cookie (für eine Woche), genannt "style" - wir können diesen Cookie über unsere Hauptindex.php-Datei mit dem in Schritt # 1 erstellten Code anfordern (denken Sie daran, das ist ein kleiner Teil des PHP in head
?). Das Skript überprüft dann, ob "js" zur Abfragezeichenfolge hinzugefügt wurde. Wenn dies der Fall ist, erfahren wir, dass die Anfrage mit JavaScript (das wir noch nicht erstellt haben) aufgetreten ist. Die else-Bedingung ist erfüllt, wenn der Benutzer JavaScript nicht aktiviert und die Umleitung verwendet (dh die Seite, von der sie gerade stammt) - sie wird klarer, sobald wir den jQuery-Code schreiben!
Schritt 4: Der jQuery-Code
Wenn du willst, kannst du hier aufhören! ... Unsere Lösung wird gut funktionieren, aber wie ich in der Einleitung gesagt habe, werden wir es mit jQuery noch steiler machen! Wir werden nicht nur dem Benutzer erlauben, sein Thema zu ändern, ohne die Seite zu aktualisieren, sondern wir werden auch einen coolen Fading-Effekt hinzufügen ... Ich meine, was wäre das für die Lektion von jQuery ohne den Effekt des Verblassens!?!?
Dies ist alles möglich, ohne ein Plug-in zu erstellen, aber ich denke, dass dies für alle von Ihnen eine gute Übung sein wird, und ermöglicht Ihnen auch, den Code schnell und einfach anzupassen und weiterzugeben.
Zuerst erstellen wir eine Datei namens "styleswitcher.jquery.js".
Das Erstellen eines neuen Plugins in jQuery ist sehr einfach. Sie müssen nur den folgenden Code schreiben:
1 |
jQuery.fn.styleSwitcher = function(){ |
2 |
// The code goes here...
|
3 |
}
|
Also zuerst wollen wir festlegen, was passiert, wenn Sie einen der Links-Stylesheets drücken (dh diejenigen Verbindungen, die in der Schicht aus div#style-switcher
sind):
1 |
/* "this" refers to each instance of the selected element,
|
2 |
* So, if you were to call the plugin like this:
|
3 |
* $('a').styleSwitcher(); then the following would occur
|
4 |
* when clicking on any anchor within the document:
|
5 |
*/
|
6 |
|
7 |
$(this).click(function(){ |
8 |
// We're passing this element object through to the
|
9 |
// loadStyleSheet function.
|
10 |
loadStyleSheet(this); |
11 |
// And then we're returning false.
|
12 |
return false; |
13 |
});
|
loadStyleSheet:
Jetzt müssen wir die Funktion loadStyleSheet
schreiben:
1 |
function loadStyleSheet(obj) { |
2 |
|
3 |
// Append new div to body:
|
4 |
$('body').append('<div id="overlay" />'); |
5 |
|
6 |
// Give body a height of 100% (to fix IE6 issue):
|
7 |
$('body').css({height:'100%'}); |
8 |
|
9 |
// Select newly created div and apply some styles:
|
10 |
$('#overlay') |
11 |
.css({ |
12 |
display: 'none', |
13 |
position: 'absolute', |
14 |
top:0, |
15 |
left: 0, |
16 |
width: '100%', |
17 |
height: '100%', |
18 |
zIndex: 1000, |
19 |
background: 'black url(img/loading.gif) no-repeat center' |
20 |
})
|
21 |
|
22 |
// Now fade in the div (#overlay):
|
23 |
.fadeIn(500,function(){ |
24 |
|
25 |
// The following will happen when the div has finished fading in:
|
26 |
|
27 |
// Request PHP script (obj.href) with appended "js" query string item:
|
28 |
$.get( obj.href+'&js',function(data){ |
29 |
|
30 |
// Select link element in HEAD of document (#stylesheet) and change href attribute:
|
31 |
$('#stylesheet').attr('href','css/' + data + '.css'); |
32 |
|
33 |
// Check if new CSS StyleSheet has loaded:
|
34 |
cssDummy.check(function(){ |
35 |
|
36 |
// When StyleSheet has loaded, fade out and remove the #overlay div:
|
37 |
$('#overlay').fadeOut(500,function(){ |
38 |
$(this).remove(); |
39 |
});
|
40 |
});
|
41 |
});
|
42 |
});
|
43 |
}
|
Ich hoffe, dass die Kommentare diesen Prozess ausreichend erklärt haben. Sie werden feststellen, dass wir im Moment eine undefinierte Funktion aufrufen (cssDummy.check()
). Aber mach dir keine Sorgen, darüber im nächsten Schritt ...
cssDummy:
Wir brauchen einen Weg, um zu überprüfen, ob das Stylesheet geladen ist. Wenn dies der Fall ist, verstecken wir die überlappende Ebene, aber wenn dies nicht der Fall ist, müssen wir die Überprüfung fortsetzen, bis sie startet. Ich habe im Netzwerk eine zuverlässige Testmöglichkeit gefunden. Es beinhaltet die Überprüfung der Breite des Dummy-Elements. Die Breite des Elements in CSS bestimmt werden - und somit wird die Zellenbreite auf die Breite in der CSS definiert gleich sein, wenn die Tabelle geladen. Ich hoffe, Sie werden jetzt verstehen, warum wir die "# dummy-element" -Regel in jede CSS-Datei einfügen mussten ...
Also, hier ist es:
1 |
var cssDummy = { |
2 |
init: function(){ |
3 |
// Appends "dummy-element" div to body:
|
4 |
$('<div id="dummy-element" style="display:none" />').appendTo('body'); |
5 |
},
|
6 |
check: function(callback) { |
7 |
|
8 |
// Checks if computed with equals that which is defined in the StyleSheets (2px):
|
9 |
if ($('#dummy-element').width()==2) callback(); |
10 |
|
11 |
// If it has not loaded yet then simple re-initiate this
|
12 |
// function every 200 milliseconds until it had loaded:
|
13 |
else setTimeout(function(){cssDummy.check(callback)}, 200); |
14 |
}
|
15 |
}
|
Am Ende unseres Plugins rufen wir die Funktion cssDummy.init
auf.
1 |
cssDummy.init(); |
Alles ist fertig! Jetzt sieht das Plugin so aus:
1 |
jQuery.fn.styleSwitcher = function(){ |
2 |
$(this).click(function(){ |
3 |
loadStyleSheet(this); |
4 |
return false; |
5 |
});
|
6 |
function loadStyleSheet(obj) { |
7 |
$('body').append('<div id="overlay" />'); |
8 |
$('body').css({height:'100%'}); |
9 |
$('#overlay') |
10 |
.css({ |
11 |
display: 'none', |
12 |
position: 'absolute', |
13 |
top:0, |
14 |
left: 0, |
15 |
width: '100%', |
16 |
height: '100%', |
17 |
zIndex: 1000, |
18 |
background: 'black url(img/loading.gif) no-repeat center' |
19 |
})
|
20 |
.fadeIn(500,function(){ |
21 |
$.get( obj.href+'&js',function(data){ |
22 |
$('#stylesheet').attr('href','css/' + data + '.css'); |
23 |
cssDummy.check(function(){ |
24 |
$('#overlay').fadeOut(500,function(){ |
25 |
$(this).remove(); |
26 |
});
|
27 |
});
|
28 |
});
|
29 |
});
|
30 |
}
|
31 |
var cssDummy = { |
32 |
init: function(){ |
33 |
$('<div id="dummy-element" style="display:none" />').appendTo('body'); |
34 |
},
|
35 |
check: function(callback) { |
36 |
if ($('#dummy-element').width()==2) callback(); |
37 |
else setTimeout(function(){cssDummy.check(callback)}, 200); |
38 |
}
|
39 |
}
|
40 |
cssDummy.init(); |
41 |
}
|
Wir können das jQuery-Plugin wie folgt aufrufen:
1 |
$('#style-switcher a').styleSwitcher(); |
Ende!
Wenn Sie sich über die Dateistruktur nicht sicher sind, laden Sie die Quelldateien herunter, um sie zu sehen. Ich hoffe, dir hat dieses Tutorial gefallen. Wie immer, wenn Sie Fragen haben, zögern Sie nicht, sie in den Kommentaren zu fragen! Wenn Ihnen unser Artikel gefallen hat, teilen Sie ihn bitte mit Digg!