Javascript/DHTML-Kombifrage

Rebelution

Grünschnabel
Hallo zusammen,

ich habe für meine Homepage vor, in vertikaler Richtung laufende Grafiken einzubauen, die gleichtzeitig einen Klick-Link haben sowie ein MouseOver, bei dem die Grafik selber in der Bildschirmitte groß angezeigt wird.

Soll also quasi so aussehen, dass in einer etwas kleineren Spalte kleine Grafiken von oben nach unten laufen, die, wenn man:

- sie anklickt, einen Link in einem neuen Fenster öffnen

- sie "mouseovert", anhalten und gleichzeitig in voller Größe in der Bildschirmmitte anzeigen.


Es muss irgendwie gehen mit Javascript-Codes bzw. DHTML, die einzelnen Operationen stellen auch kein Problem dar, ich bekomme nur keinen Code zusammen, in dem alle drei Komponenten enthalten sind. Könnte mir da jemand weiterhelfen?
Perfekt wäre es dann noch, wenn die Grafiken, sobald sie alle "unten angekommen" sind, "umdrehen" und wieder nach oben laufen.

Also, liebe Profis oder alle, die mir hier weiterhelfen können, wäre super, wenn das jemand hinbekommt. Hab schon so gut wie alles probiert aber nix anständiges hinbekommen.

Mfg, danke schon für die Mühe,

Mau
 
Hi,

schau dir mal den Ticker von Sven Mintel an. Mit einigen Anpassungen sollte dein Vorhaben damit umzusetzen sein.

Beispiel:
Code:
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<script type="text/javascript">
  <!--
// Funktion zum Ein-/Ausblenden eines Bildes
function toggleImg(objImg, blnShow){
  document.getElementById("imgOut").getElementsByTagName("img")[0].src = (blnShow)? objImg.src : "";
  document.getElementById("imgOut").getElementsByTagName("img")[0].style.display = (blnShow)? "" : "none";
}

// Bild in PopUp öffnen
function popupImg(strUrl){
  window.open(strUrl, "PopUp");
}

/* * * * * * * * * * * * * * * * D I E  V A R I A B L E N * * * * * * * * * * * * * * * * * */

    //°°°°°°°°°°Interval in ms
intInterval =50;

    //°°°°°°°°°°Handler für Bilder
strImgHandler = ' onmouseover="clearInterval(objGo); toggleImg(this, true);" onmouseout="objGo=setInterval(\'DM_ticken()\','+intInterval+'); toggleImg(this, false);"';

    //°°°°°°°°°°Die News (im onclick-Event können die Links eingetragen werden)

tNews=new Array();
tNews.push('<img src="bild1.gif" width="60" height="60" border="0" alt=""' + strImgHandler + ' onclick="popupImg(\'http://www.tutorials.de/\');">');
tNews.push('<img src="bild2.gif" width="60" height="60" border="0" alt=""' + strImgHandler + ' onclick="popupImg(\'http://www.tutorials.de/\');">');
tNews.push('<img src="bild3.gif" width="60" height="60" border="0" alt=""' + strImgHandler + ' onclick="popupImg(\'http://www.tutorials.de/\');">');
tNews.push('<img src="bild4.gif" width="60" height="60" border="0" alt=""' + strImgHandler + ' onclick="popupImg(\'http://www.tutorials.de/\');">');
tNews.push('<img src="bild5.gif" width="60" height="60" border="0" alt=""' + strImgHandler + ' onclick="popupImg(\'http://www.tutorials.de/\');">');
tNews.push('<img src="bild6.gif" width="60" height="60" border="0" alt=""' + strImgHandler + ' onclick="popupImg(\'http://www.tutorials.de/\');">');


    //°°°°°°°°°°Laufrichtung(up,down,left,right)
strDir      ='up';

    //°°°°°°°°°°Delimiter zwischen den einzelnen News(nur bei left/right)
strDelimiter=' + + + ';

    //°°°°°°°°°°Stop bei mouseover?true:false
blnStopHover=false;

    //°°°°°°°°°°Falls Leeraum zwischen News...hier Wert erhoehen...minimum:1
intRepeat   =2;

    //°°°°°°°°°°Rahmen
strBorder   ='1px solid #818181';

    //°°°°°°°°°°Breite
intWidth    =200;

    //°°°°°°°°°°Höhe
intHeight   =200;

    //Abstand Rahmen->Inhalt
intPadding  =4;

    //Background-color
strBgc      ='#515151';

    //Text-color
strTxtc     ='#ffffff';

    //Textausrichtung
strAlign    ='left';

    //Schritt pro Durchlauf(px)
intStep=1;


/* * * * * * * * * * * * * * * * * * D E R  T I C K E R * * * * * * * * * * * * * * * * * * * * * */

    //IE ab V4?
IE=document.all&&!window.opera;
    //DOM-Browser(ausser IE)
DOM=document.getElementById&&!IE;


//läuft ab IE4 und in DOM-Browsern
if(DOM||IE)
  {
        //Ermitteln, ob Ticker horizontal oder vertikal laufen soll
    blnDir=(strDir=='up'||strDir=='down')?true:false;

        //Bei horizontalem Ticker wird ein nobr-, ansonsten ein div-Tag verwendet
    strNobr=(blnDir)?'div':'nobr';

        //Trennzeichen zwischen den Einzelnen Eintraegen
        //bei horizontalem Ticker gemäss Angabe in Variale strDelimiter
        //Ansonsten Zeilenumbrueche
    strDelimiter=(blnDir)?'<br><br>':strDelimiter;

        //String fuer Textausrichtung bei vertikalem Ticker
    strAlign=(blnDir)?'text-align:'+strAlign+';':'';

        //Variable zum Speichern des Intervals
    var objGo;
        //Variable zum Speichern der Position
    intPos=0;

        //String erzeugen fuer JS-Code, falls Ticker beim mouseover stoppen soll
    strStopHover=(blnStopHover)?'onmouseover="clearInterval(objGo)"onmouseout="objGo=setInterval(\'DM_ticken()\','+intInterval+')"':'';

        //Tickertext zu String zusammenfuegen
    strText=(blnDir)?tNews.join(strDelimiter)+strDelimiter:tNews.join(strDelimiter)+strDelimiter;
    strNews=strText;
    for(i=1;i<intRepeat;++i)
        {
        strNews+=strText;
        }

        //TickerCode zu String zusammenfuegen
    strTicker='<div style="position: relative; '+strAlign+'overflow:hidden;background-color:'+strBgc+
                    ';border:'+strBorder+';width:'+intWidth+'px;height:'+intHeight+'px;padding:'+intPadding+
                    'px;"><'+strNobr+'><div id="ticker"style="position:relative;color:'+strTxtc+';background-color:'+strBgc+
                    ';"'+strStopHover+'>'+strNews+'</div></'+strNobr+'></div>';

        //TickerCode im Dokument ausgeben
    document.write(strTicker);

        //Funktion, um Ticker ticken zu lassen
    function DM_ticken()
    {
        //Ticker-Objekt je nach Browser ermitteln
    objTicker=(IE)?document.all.ticker:document.getElementById('ticker');

        //Array fuer zu manipulierende Eigenschaften des Tickers je nach Richtung
        //Richtung=new Array(Pixelwert zur Aenderung der Position,Breite/Höhe des Tickers,zu andernder Positionswert);
    arrDir=new Array();
    arrDir['up']    =new Array(-1,objTicker.offsetHeight,'top');
    arrDir['down']  =new Array(1,objTicker.offsetHeight,'top');
    arrDir['left']  =new Array(1,objTicker.offsetWidth,'left');
    arrDir['right'] =new Array(-1,objTicker.offsetWidth,'left');

        //Ermitteln von Breite bzw. Höhe der anzuzeigenden Items
    dblOffset=arrDir[strDir][1]/intRepeat;

        //Neuen Positionswert ermitteln
    switch(strDir)
        {
        case'right':
            intPos=(Math.abs(intPos)>dblOffset)?0:intPos;break;
        case'left':
            intPos=(intPos>0)?-dblOffset:intPos;break;
        case 'up':
            intPos=(Math.abs(intPos)>dblOffset)?0:intPos;break;
        case 'down':
            intPos=(intPos>0)?-dblOffset:intPos;break;
        }
        //Neuen Positionswert zuweisen
    objTicker.style[arrDir[strDir][2]]=intPos + "px";

        //Positionswert hoch/heruntersetzen
    intPos+=intStep*arrDir[strDir][0];
    }
        //Erneut ticken lassen
    objGo=setInterval('DM_ticken()',intInterval);
  }
 //-->
</script>

<div id="imgOut">
  <img src="" style="display: none;">
</div>
</body>
</html>
Vielleicht hilft dir das weiter.

Ciao
Quaese
 
Danke dafür, ich werd's gleich mal ausprobieren. Der Ticker sieht jedenfalls schonmal ziemlich gut aus, vielleicht funktioniert's damit ja tatsächlich.

Mfg,

Mau
 
So, also, der Code funktioniert einwandfrei für meine Zwecke, vielen Dank nochmal dafür.

Hab noch eine Frage: und zwar, wenn ich den Code umstelle um von rechts nach links zu laufen, dann laufen die Bilder bis zu ner gewissen Stelle normal, nur beginnt das plötzlich alles von vorne. Es läuft also nicht am Stück durch wie ne ewige Warteschleife, sondern beginnt urplötzlich mittendrin wieder neu an der Ausgangstelle. Wie bekommt man das weg? Hab schon versucht am Intervall und am Repeat rumzudrehen, aber wird nich ...

Danke schonmal, Mfg,

Mau
 
Hi,

ich kann das hier nicht nachvollziehen. Wenn ich den Ticker von rechts nach links laufen lasse (strDir = 'right';), laufen die Bilder als Endlosschleife ohne Versatz durch.

Ciao
Quaese
 
solang ich in dem Code nicht als die Laufrichtung ändere, stimmt das, da muss ich dir Recht geben.
wenn ich nun aber die Bildgröße ändere, in meinem Fall auf 170x110px bei "bild1.gif", dann läuft das Bild etwa zur Hälfte nach links raus und plötzlich beginnt der Vorgang von Neuem. Ich hoffe, du kannst das nochvollziehen.
Danke für deine Mühe,

Mau
 
Hi,

es ist tatsächlich wie von dir beschrieben. Wenn du folgendes änderst (relative durch absolute ersetzen), sollte es funktionieren:
Code:
        //TickerCode zu String zusammenfuegen
    strTicker='<div style="position: relative; '+strAlign+'overflow:hidden;background-color:'+strBgc+
                    ';border:'+strBorder+';width:'+intWidth+'px;height:'+intHeight+'px;padding:'+intPadding+
                    'px;"><'+strNobr+'><div id="ticker"style="position:absolute;color:'+strTxtc+';background-color:'+strBgc+
                    ';"'+strStopHover+'>'+strNews+'</div></'+strNobr+'></div>';
Ciao
Quaese
 
Hi,

danke, genau so läuft's. Da muss man als Unerfahrener erstmal drauf kommen ...
btw: ich wünsch dir ein frohes neues Jahr und lass es dir gut gehn!

Eine abschließende Frage hab ich noch, wenn's dir keine Umstände bereitet:

Ist es möglich, dass das Bild beim MouseOver groß in einem anderen Frame erscheint? Oder dass, angenommen der Ticker läuft in einem Frame am Seitenrand, dass das Bild dann zentral in der Mitte angezeigt wird, über anderen Inhalten?
 
Hi,

wenn das Bild in einem anderen (i)Frame angezeigt werden soll, musst du die Funktion toggleImg entsprechend anpassen.
Code:
// Funktion zum Ein-/Ausblenden eines Bildes
function toggleImg(objImg, blnShow){
	top.frameTest.document.getElementById("imgOut").getElementsByTagName("img")[0].src = (blnShow)? objImg.src : "";
  top.frameTest.document.getElementById("imgOut").getElementsByTagName("img")[0].style.display = (blnShow)? "" : "none";
}
Damit wird das Bild in einem (i)Frame mit dem Namen frameTest angezeigt. Voraussetzung ist, dass im (i)Frame-Dokument ein Element der Form
Code:
<div id="imgOut">
  <img src="" style="display: none;">
</div>
existiert.

Soll das Bild über allen anderen Inhalt angezeigt werden, muss wohl entsprechen mit CSS ausgezeichnet werden (z.B. absolut positionieren und den z-index entsprechend setzen).

Ciao
Quaese
 
Hi Quaese,

Danke für deine Hilfe, ich komm nur leider echt nich weiter, weil ich's nich blick. Von CSS hab ich bisher so die Ahnung, dass man Pages ein vorgegebenes Layout verpasst, nur inwiefern hat das was damit zu tun, wie ein Bild angezeigt wird?

Ich hoffe, du kannst mir da nochmal weiterhelfen, da ich viel selbst probiert habe und es nicht funktioniert.
Ich bräuchte also, nochmal zusammenfassend, einen Javascript-Code, der es mir ermöglicht, Bilder aus einem Ticker beim MouseOver groß anzuzeigen, in der Bildschirmmitte, wobei das restliche Frameset der Homepage im Hintergrund bleibt und das Bild beim MouseOut wieder verschwindet.

sag's rechtzeitig, wenn ich nervig werd oder du der Meinung bist, ich sollte mir besser ein Buch zu Javascript kaufen, was wohl echt das klügste wäre. Aber vielen Dank für deine Hilfe!

Mfg,

Mau
 

Neue Beiträge

Zurück