+ Antworten
Ergebnis 1 bis 10 von 10

Thema: if else Anweisung funktioniert nicht

  1. #1
    TP-Junior oszone1 macht alles soweit korrekt
    Registriert seit
    Apr 2009
    Beiträge
    5

    if else Anweisung funktioniert nicht

    Hallo allerseits, ich bin sowohl ein Neuling in diesem Forum, als auch ein Anfänger in Sachen Javascript, der nur rudimentäre Kenntnisse (wenn überhaupt) besitzt, aber nicht locker lassen möchte. Bevor ich nun hier mein Problem poste, habe ich auch nichts unversucht gelassen, selber den richtigen Weg zu finden, aber es klappt einfach nicht...
    Daher würde ich mich sehr freuen, wenn mir jemand aus diesem Forum eine Hilfestellung leisten kann...

    Genug geplaudert, hier mein problem:

    Das Ziel ist eine funktionierende Bildergalerie, die aus Hoch- und Querformaten besteht. Das Javascript soll nun meine Bilder immer mittig zentriert positionieren, was aber leider nicht funktioniert. Die Bilder liegen in einem div, welches selber in einem festpositioniertem div liegt. Über eine margin-left Angabe möchte ich nun die Hochformaten samt div verschieben (funktioniert) und die Querformate nicht (setze den margin Wert auf 0 - funktioniert aber nicht).

    Eine Funktion soll nun über eine if else Anweisung die Positionierung steuern:

    Code:
    function moveImg(){
    bildplatz = document.getElementById("bh");
    bildp = bildQ[current_index];
    bildp.width = bildQ.width;
      if (bildp.width = "514px") {
        bildplatz.style.marginLeft = "84px";
      } else {
        bildplatz.style.marginLeft = "0px";
      }
    }
    Damit möchte ich die Breite meines Bildes abfragen, wenn es 514px breit ist, soll es verschoben werden, ansonsten eben nicht... das "ansonsten" funktioniert aber leider nicht...

    Die Bilder werden vorher durch ein Array mit einer Schleife eingeladen:

    Code:
    var bildQ=new Array();
    for(i=0;i<15;i++){
    	bildQ[i]="img/ga"+i+".jpg";
    }
    var current_index = 1;
    var len_bildQ = bildQ.length;
    function vor(){
    	if (current_index == (bildQ.length - 1)) {
    		current_index = 1;
    	}
    	else {
    		current_index++;
    	}
    	var bild = document.getElementById("bild");
    	bild.src = bildQ[current_index];
    }
    
    function zurueck(){
    	if (current_index == 1) {
    		current_index = (bildQ.length - 1);
    	}else {
    		current_index--;
    	}
    	var bild = document.getElementById("bild");
    	bild.src = bildQ[current_index];
    	}
    und zuletzt noch ein html auszug:

    HTML-Code:
    <div id="bildcontainer">
      	  <div id="bh"><img id="bild" src="img/ga1.jpg"/ ></div>
      	  <div id="hg_bu"><img src="img/hg_button.jpg" /></div>
    	  <div id="minus"><a href="#" onclick="zurueck()"><img src="img/back.jpg" /></a></div>
    	  <div id="plus"><a href="#" onclick="vor()"><img src="img/next.jpg" /></a></div>
    </div>
    Ich hoffe, ich hab mich einigermaßen ausgedrückt und würde mich sehr über hilfreiche Hinweise freuen

  2. #2
    TP-Moderator Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Avatar von Malleus
    Registriert seit
    Aug 2004
    Ort
    Homburg / Saarland
    Beiträge
    711
    Hallo oszone1,
    hast Du Dein Beispiel irgendwo online?

    Die Funktion moveImg sieht etwas seltsam aus:

    Code:
    function moveImg(){
    bildplatz = document.getElementById("bh");
    bildp = bildQ[current_index];
    bildp.width = bildQ.width;
      if (bildp.width = "514px") {
        bildplatz.style.marginLeft = "84px";
      } else {
        bildplatz.style.marginLeft = "0px";
      }
    }
    "bildp" ist ein String und zwar der current_index -te Eintrag Deines Arrays.
    Du behandelst aber diesen String anscheinend als IMAGE Element.
    "bildQ" hat auch keine "width" Eigenschaft, da ja bildQ ein Array ist.

    Es wäre wirklich besser, wenn Du ein echtes Beispiel zum Testen hättest.

    Tschau

    Frank

    P.S. ...und Herzlich Willkommen im "Traum-Projekt"

  3. #3
    TP-Junior oszone1 macht alles soweit korrekt
    Registriert seit
    Apr 2009
    Beiträge
    5
    Hallo Frank, erstmal danke für deine Antwort, ich fühle mich geschmeichelt, dass Du meine Funktion nur "etwas" seltsam findest... ich scheine da ja ein grundsätzliches Unverständnis zu haben.
    Dein Hinweis, dass ein Array keine width Eigenschaft besitzen kann, leuchtet irgendwie ein.
    Ist es denn möglich, die im Array befindlichen Bilder auszulesen und ihre Eigenschaften (in diesem Falle die Bildgröße) zu definieren und dann einer Variablen zuzuordnen? Oder bin ich auch da auf dem Holzweg? Letztendlich will ich ja erreichen, dass: wenn image width = 514px soll div id "bh" margin left 84 px, ansonsten wenn image width 682 px soll div id "bh" = 0px....

    hab mal alles hochgespielt zum besseren Verständnis:

    http://www.willnauer.com/saigen/galerie.html#

    und nochmals Danke für Deine Anteilnahme!!!!

  4. #4
    TP-Moderator Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Avatar von Malleus
    Registriert seit
    Aug 2004
    Ort
    Homburg / Saarland
    Beiträge
    711
    Es gibt jetzt zwei Möglichkeiten:

    Die erste richtig tolle:
    Da Du erst nach dem asynchronen Laden der Images deren Größe kennst, müßtest Du eine Art "PreLoading" programmieren. Das ist aber etwas umständlicher.

    ...oder aber Du gehst einfach hin und erzeugt ein zweites Array

    Code:
    var isHeightImage= [ true, false,true, true ,false ]
    , das Du natürlich noch an Deine Anzahl anpassen mußt

    Dann

    Code:
    function moveImg(){
    // ...
    if ( isHeightImage[current_index]  )
    {
      bildplatz.style.marginLeft = "84px";
    }
    else
    {
      bildplatz.style.marginLeft = "0px";
    }
    Das wäre wahrscheinlich um einiges einfacher.


    Tschau
    Frank

  5. #5
    TP-Junior oszone1 macht alles soweit korrekt
    Registriert seit
    Apr 2009
    Beiträge
    5
    Hallo Frank, es gibt einen Preloader, der über den js link im head angesteuert wird...

    der Code sieht so aus:
    Code:
    var bildObjekt=new Array();
    function bilderQuellenVorladen(bildQuellen){
    	for (var i=0;i<bildQuellen.length;i++){
    	     bildObjekt[i]=new Image();
    	     bildObjekt[i].src=bildQuellen[i];
    	}
    }
    meinst Du sowas in etwa???

    Ansonsten werd ich mich mal mit Deinem zweiten Ansatz auseinandersetzen, der erscheint mir etwas erträglicher für mein "know how"...

    Besten Dank

    Florian

  6. #6
    TP-Moderator Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Avatar von Malleus
    Registriert seit
    Aug 2004
    Ort
    Homburg / Saarland
    Beiträge
    711
    Vielleicht könnte dann auch folgendes funktionieren:

    Code:
     if (bildObjekt[current_index].width = "514px") {
        bildplatz.style.marginLeft = "84px";
      } else {
        bildplatz.style.marginLeft = "0px";
      }
    , aber eigentlich müßtest Du einen onload-Eventhandler integrieren. Ich denke aber mal, daß die zweite Version in Deinem Fall ausreichen sollte.

    Tschau
    Frank

  7. #7
    TP-Junior oszone1 macht alles soweit korrekt
    Registriert seit
    Apr 2009
    Beiträge
    5
    Hallo Frank, ich hab den Code nun dahingehend verändert, aber es funktioniert einfach nicht...

    http://www.willnauer.com/saigen/galerie.html#

    Ich rufe auch über onload die Funktion "init" auf, in der sowohl die Bilder vorgeladen werden sollen als auch "moveIng aufgerufen wird....

    Das merwürdig ist, das ich den Wert "bildObjekt[current_index].width = "514px" beliebig verändern kann und das Script trotzdem den Margin Left Wert annimmt...

    Und das verstehe ich nicht wirklich, denn ich dachte, dass durch das Erzeugen der Instanz "new Image" (siehe Code) sämtlich Eigenschaften der Bilder im Browser geladen sind, also auch die width Eigenschaft und diese somit doch übergeben werden könnten????
    Code:
    var bildObjekt=new Array();
    function bilderQuellenVorladen(bildQuellen){
    	for (var i=0;i<bildQuellen.length;i++){
    	     bildObjekt[i]=new Image();
    	     bildObjekt[i].src=bildQuellen[i];
    	}
    }
    var bildQ=new Array();
    for(i=0;i<15;i++){
    	bildQ[i]="img/ga"+i+".jpg";
    }
    Gruß
    Florian

  8. #8
    TP-Moderator Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Avatar von Malleus
    Registriert seit
    Aug 2004
    Ort
    Homburg / Saarland
    Beiträge
    711
    Da hat sich ein kleiner Fehler eingeschlichen. Ein Vegleich macht man mit "==". Eine Zuweisung mit "=".

    ... Das hab' ich glatt übersehen, das kommt wohl davon, daß ich kaum noch Javascript mache, momentan nur noch Silverlight und VB.

    Code:
    function moveImg(){
    	var bildplatz = document.getElementById("bh");
    if (bildObjekt[current_index].width == "514px") {
        bildplatz.style.marginLeft = "84px";
      } else {
        bildplatz.style.marginLeft = "0px";
      }
    }
    Versuch's mal damit.

  9. #9
    TP-Junior oszone1 macht alles soweit korrekt
    Registriert seit
    Apr 2009
    Beiträge
    5
    Hallo Frank, danke für deinen Tip... aber es will einfach nicht...
    nach einem sonnigen Samstag hat der Sonntag am Rechner leider nicht zum Erfolg geführt...

    Wenn ich den Zuweisungsperator zu einem Vergleichsoperator machen, reagiert das Script gar nicht mehr, obwohl Dein Hinweis eigentlich logisch klingt.

    Der Fehler scheint in meiner bildObjekt Variable zu stecken....Wenn ich die Methode alert (bildObjekt[current_index]); einbinde, ist der Rückgabewert [object HTMLImageElement], aber ich sollte doch eigentlich das entsprechende Bild als Index zurückbekommen, also <img id="bild" src="img/ga6.jpg"/ > oder <img id="bild" src="img/ga9.jpg"/ >.... je nach dem...

    also kann der current_index nicht ausgelesen werden, sehe ich das richtig oder auch wieder ein Holzweg???

    funktion habe ich umbenannt, nicht wundern...

    http://www.willnauer.com/saigen/galerie_test.html#

    Gruß
    Florian

  10. #10
    TP-Moderator Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Avatar von Malleus
    Registriert seit
    Aug 2004
    Ort
    Homburg / Saarland
    Beiträge
    711
    Sorry,
    daß ich mich erst jetzt wieder melde.

    Ist das ganze noch aktuell? Wenn ja, dann schau' ich mir's nochmal an.

    Tschau

    Frank

+ Antworten

Ähnliche Themen

  1. MySQL-Anweisung funktioniert nur mit Datenbankangabe
    Von rotkaeppchen90 im Forum Traum-Dynamik
    Antworten: 4
    Letzter Beitrag: 10.10.2008, 14:13
  2. Antworten: 1
    Letzter Beitrag: 21.11.2006, 18:16
  3. css anweisung border greift nicht bei <tr> tag
    Von zmiti1 im Forum HTML & CSS
    Antworten: 2
    Letzter Beitrag: 04.10.2006, 19:43
  4. If-Anweisung funktioniert nicht, wie sie soll!
    Von Dome im Forum Traum-Dynamik
    Antworten: 6
    Letzter Beitrag: 03.07.2005, 17:54
  5. mpg funktioniert nicht
    Von pussy im Forum Flash & Multimedia
    Antworten: 3
    Letzter Beitrag: 21.02.2005, 17:41

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51