Antworten auf deine Fragen:
Neues Thema erstellen

Javascript Script vereinfachen/verallgemeinern

Coulyo

Director

Hallo,

ich habe vor kurzem angefangen mich mit Javascript zu beschäftigen und habe nun mein erstes eigenes Script geschrieben. Ich ändere damit das Farb-Schema meiner Website. Das ganze funktioniert auch ganz gut, allerdings denke ich, dass man es noch wesentlich verbessern könnte, indem man die Funktion allgemein gestaltet, um das Script auch in zukünftigen Projekten verwenden zu können.
Ich könnte aus dem unten stehenden Code 3 oder 4 allgemeine Funktionen machen, um jeden Fall abzudecken. Das hätte dann aber den Nachteil, dass ich um das Farbschema anzupassen, alle diese Funktionen aufrufen müsste, anstatt nur die Funktion changeColor().
Ich würde das Script also gerne so umschreiben, dass der Methode changeColor() entweder ein Class Name oder ein Tag Name übergeben wird. Dann müsste ja geprüft werden, was der Methode als Parameter übergeben wurde und davon ausgehend möchte ich dann in der Funktion weitere Abfragen machen im Stil von:

wenn class xy das BackgroundImage grau90.png hat, dann änder das bitte in weiß90.png

Oder equivalent mit der Schriftfarbe.

So, nun hab ich aber keine Ahnung, wie ich das zu Stande bringe. Aus Java ist mir das überladen von Methoden bekannt, mit dem man ja zumindest das Übergeben verschiedener Parametertypen an die Funktion lösen könnte (auch wenn es dann faktisch trotzdem mehrere Funktionen mit dem selben Namen wären), allerdings weiß ich nicht, ob sowas auch in Javascript geht.
Zweitens weiß ich nicht wie man oben genannte Abfrage für das Hintergrundbild, oder die Schriftfarbe, oder eine beliebige andere Eigenschaft im Code formuliert.

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt und irgendjemand kann mir helfen! Ich bin mir ziemlich sicher, dass das Problem für Kenner ein Klacks ist, aber als Anfänger ... :D

Danke schonmal! :)

Code:
<script type="text/javascript">
	
	var change = 0;
	
	function changeColor(){
		
		if(change == 0){
			
		for (var i = 0; i < document.getElementsByTagName("div").length; i++){
			document.getElementsByTagName("div")[i].style.backgroundImage = "url('img/weiß90.png')";
		}
		for (var i = 0; i < document.getElementsByClassName("navigation").length; i++){
			document.getElementsByClassName("navigation")[i].style.backgroundImage = "url('img/weiß90.png')";
		}
		for (var i = 0; i < document.getElementsByClassName("navLink").length; i++){
			document.getElementsByClassName("navLink")[i].style.color = "#000";
		}
		for (var i = 0; i < document.getElementsByClassName("navLinkSub").length; i++){
			document.getElementsByClassName("navLinkSub")[i].style.backgroundImage = "url('img/weiß90.png')";
			document.getElementsByClassName("navLinkSub")[i].style.color = "#333";
		}
		for (var i = 0; i < document.getElementsByClassName("divider").length; i++){
			document.getElementsByClassName("divider")[i].style.backgroundImage = "none";
		}
		for (var i = 0; i < document.getElementsByClassName("blogHeading").length; i++){
			document.getElementsByClassName("blogHeading")[i].style.backgroundImage = "none";
		}
		for (var i = 0; i < document.getElementsByTagName("p").length; i++){
			document.getElementsByTagName("p")[i].style.color = "#333";
		}
		for (var i = 0; i < document.getElementsByTagName("span").length; i++){
			document.getElementsByTagName("span")[i].style.color = "#333";
		}
		
		for (var i = 0; i < document.getElementsByClassName("datumLarge").length; i++){
			document.getElementsByClassName("datumLarge")[i].style.backgroundImage = "none";
		}
		for (var i = 0; i < document.getElementsByClassName("date").length; i++){
			document.getElementsByClassName("date")[i].style.color = "#FFF";
		}
		
		change = 1;
		}
		
		else{
			
		for (var i = 0; i < document.getElementsByTagName("div").length; i++){
			document.getElementsByTagName("div")[i].style.backgroundImage = "url('img/grau90.png')";
		}
		for (var i = 0; i < document.getElementsByClassName("navigation").length; i++){
			document.getElementsByClassName("navigation")[i].style.backgroundImage = "url('img/grau90.png')";
		}
		for (var i = 0; i < document.getElementsByClassName("navLink").length; i++){
			document.getElementsByClassName("navLink")[i].style.color = "#FFF";
		}
		for (var i = 0; i < document.getElementsByClassName("navLinkSub").length; i++){
			document.getElementsByClassName("navLinkSub")[i].style.backgroundImage = "url('img/grau90.png')";
			document.getElementsByClassName("navLinkSub")[i].style.color = "#FFF";
		}
		for (var i = 0; i < document.getElementsByClassName("divider").length; i++){
			document.getElementsByClassName("divider")[i].style.backgroundImage = "none";
		}
		for (var i = 0; i < document.getElementsByClassName("blogHeading").length; i++){
			document.getElementsByClassName("blogHeading")[i].style.backgroundImage = "none";
		}
		for (var i = 0; i < document.getElementsByTagName("p").length; i++){
			document.getElementsByTagName("p")[i].style.color = "#FFF";
		}
		for (var i = 0; i < document.getElementsByTagName("span").length; i++){
			document.getElementsByTagName("span")[i].style.color = "#CCC";
		}
		
		for (var i = 0; i < document.getElementsByClassName("datumLarge").length; i++){
			document.getElementsByClassName("datumLarge")[i].style.backgroundImage = "none";
		}
		for (var i = 0; i < document.getElementsByClassName("date").length; i++){
			document.getElementsByClassName("date")[i].style.color = "#FFF";
		}
		
		change = 0;
		}
	}
	</script>
 

Duddle

Posting-Frequenz: 14µHz

AW: Javascript Script vereinfachen/verallgemeinern

Möchtest du:
a) das CSS global ändern, also bspw. "die Klasse .date hat jetzt folgende Eigenschaften", oder
b) ein Farbschema anwenden, so ähnlich wie es jetzt funktioniert?

Im Moment sehe ich das Hauptproblem darin, dass du fest definierte Klassen und Tags änderst. Wenn du per JS die komplette CSS-Datei auswechseln würdest, hättest du das der Erweiterbarkeit und Allgemeinheit sofort gelöst (das ist ja auch der Zweck von CSS).

Aber vielleicht willst du ja bspw. dem Nutzer Kontrolle über die Feinheiten geben, dann bräuchtest du eine Funktion, die ein Element (bzw. eine Liste von Elementen), die gewünschte CSS-Eigenschaft und den neuen Wert annimmt - ähnlich dem, was jQuery mit .css() macht.


Duddle
 

Coulyo

Director

AW: Javascript Script vereinfachen/verallgemeinern

Auf die einfachsten Sachen kommt man manchmal nicht...
Ich möchte das CSS global ändern, der Nutzer soll keine Kontrolle über das Aussehen erhalten.
Wie tauscht man denn die CSS Datei per Javascript aus? :)
 

Duddle

Posting-Frequenz: 14µHz

AW: Javascript Script vereinfachen/verallgemeinern

Hier ist ein Ansatz mit Cookies (was sicher dein nächster Schritt wäre), hier ist die simpelste Variante.


Duddle
 

Coulyo

Director

AW: Javascript Script vereinfachen/verallgemeinern

Danke, das mit den Cookies hab ich wirklich als nächstes geplant :)
Aber der zweite Link funktioniert leider nicht.
 

layoutbraut

Codegirl

AW: Javascript Script vereinfachen/verallgemeinern

Ich nutze für größenspezifische CSS-Änderungen folgenden, einfachen Code:

Code:
<script language="JavaScript" type="text/javascript">
    if(screen.width >= 800){
        //Weiterleiten auf Dokument
        document.write('<link href="stylea.css" rel="stylesheet" type="text/css">');
    } else { document.write('<link href="styleb.css" rel="stylesheet" type="text/css">');
        }
</script>
 

Coulyo

Director

AW: Javascript Script vereinfachen/verallgemeinern

Ok, das funktioniert, wenn ich es ein wenig umschreibe :)

Aber mal eine Frage, die etwas Offtopic ist:
Ich möchte meine Seite auf Wordpress aufbauen und soweit ich weiß muss die CSS Datei da style.css heißen. Wenn ich jetzt auf eine andere wechsle, die xyz.css heißt, funktioniert das dann noch?
 

Duddle

Posting-Frequenz: 14µHz

AW: Javascript Script vereinfachen/verallgemeinern

Ja, natürlich. Einer Website ist es egal, woher die Style-Informationen kommen. Die Festlegung auf "style.css" ist wohl nur, damit Wordpress einfach sagen kann "binde style.css im Ordner foobar ein". Wenn du danach zusätzliche / andere .css-Dateien einbindest, bzw. die aktuelle ersetzt, lädt der Browser diese dazu.


Duddle
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.635
Beiträge
1.538.454
Mitglieder
67.558
Neuestes Mitglied
StarsMan
Oben