tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
18
ZUGRIFFE
852
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Matthias_Nordwig Tutorials.de Gastzugang
    Hallo, ich habe mir bisher folgendes Script geschrieben um das Flash immer an die maximal mögliche Größe anzupassen, ohne dabei das Verhältniss "800:600,1024:768,..." zu verlieren:

    width = document.body.offsetWidth;
    height = document.body.offsetHeight;
    fla_width = 0;
    fla_height = 0;
    function check_window()
    {
    if ((height!=document.body.offsetHeight) || (width!=document.body.offsetWidth))
    {
    height=document.body.offsetHeight;
    width=document.body.offsetWidth;
    set_fla();
    }
    }
    function set_fla()
    {
    if ((width/height)<(800/600))
    {
    fla_width = width-3;
    fla_height = (fla_width*600)/800;
    }
    else
    {
    fla_height = height-3;
    fla_width = (fla_height*800)/600;
    }
    document.getElementById("uhr").style.width=fla_width;
    document.getElementById("uhr").style.height=fla_height;
    //document.getElementById("uhr2").style.width=fla_width;
    //document.getElementsByName("uhr").style.height=""fla_height;
    _______________________________________________________
    Hier ist das Problem:
    Das was dort als Kommentar markiert ist(//document.getElementById("uhr2").style.width=fla_width;
    //document.getElementsByName), funktioniert zwar in Opera, jedoch nicht im ie. Umgekehrt, wenn ich das so anspreche wie das nicht auskommentierte(document.getElementById("uhr").style.width=fla_width;
    document.getElementById("uhr").style.height=fla_height, dann das im ie jedoch nicht im Opera.
    Hat jemand dafür eine Lösung? Ich möchte auf keinen Fall einen Browserswitch machen, da diese sich ja maskieren lassen. bzw. Mein Opera wird als ie anerkannt.
    _______________________________________________________


    }
    set_fla();
    window.setInterval("check_window()",100);

    Mit freundlichen Grüßen

    Matthias Nordwig
     

  2. #2
    Registriert seit
    Mar 2004
    Ort
    Basisrealität
    Beiträge
    12.118
    Blog-Einträge
    7
    Hi,

    auch wenn ich aus Deiner Beschreibung nicht ganz schlau werde... eine Browserweiche mit
    PHP-Code:
    if (document.getElementById("Uhr")) {
        
    // it might be internet-explorer
    } else if (document.getElementsByName("Uhr")) {
        
    // it might be opera
    } else {
        
    // it might be something very strange

    dürfte jedenfalls unabhängig von Maskierungen laufen.

    Gruß

    P.S.: eine andere Möglichkeit wäre, die SWF in eine Tabelle oder ein DIV mit relativen Größenangaben zu setzen (wobei das SWF die relativen Angaben width=100% und height=100% bekommt).
    Geändert von Datic (29.07.04 um 19:57 Uhr)
     

  3. #3
    Matthias_Nordwig Tutorials.de Gastzugang
    1. Nein das habe ich net gesucht
    Das im Übrigen auch nicht da Opera auch ID's kennt.
    Aber: Die Logik währe zu gebrauchen. Hat IE und Opera sonst irgendeinen besonderen Unterschied, der nach Boolean zu unterschiedlichen Ergebnissen führt?

    2. ich möchte ja das verhältniss von Länge und Höhe beibehalten das sich das nicht verzieht.

    Trotzdem danke!

    Mit freundlichen Grüßen

    Matthias Nordwig
     

  4. #4
    Matthias_Nordwig Tutorials.de Gastzugang
    Hier nocheinmal der exakte unterschied:

    Opera:

    document.getElementById("uhr2").style.width=fla_width;
    document.getElementById("uhr2").style.height=fla_height;

    (Ich schpreche hier ein <EMBED> an)

    IE:

    document.getElementById("uhr").style.width=fla_width;
    document.getElementById("uhr").style.height=fla_height;

    (Ich spreche hier ein <Objekt> an)

    Sorry hatte das Problem falsch beschireben.
    Nun müsste ich diese ggf. switchen, da der für Opera beim ie ein Exception hervorruft. p.s. "getElementsByName" scheint das alles nicht zu unterstützen.

    Mit freundlichen Grüßen

    Matthias Nordwig
     

  5. #5
    Registriert seit
    Mar 2004
    Ort
    Basisrealität
    Beiträge
    12.118
    Blog-Einträge
    7
    Hi,

    ach so...

    Ich habe es vor einiger Zeit mal so gemacht:
    PHP-Code:
    document.flashname.width=640;
    document.flashname.height=480
    Dabei ist "flashname" die ID im Object und der Name im Embed... habe es allerdings nicht mit Opera getestet.

    Zu 2.: Die Seitenverhältnisse werden beibehalten, wenn Du kein <scale="exactfit"> oder <scale="noborder"> verwendest.

    Gruß
     

  6. #6
    Matthias_Nordwig Tutorials.de Gastzugang
    Hi

    Thx nochmal.

    Ich habe zwar herausgefunden woran der Fehler lag.
    Nun möchte ich jedoch gar kein <objekt> mehr verwenden,
    sondern nur noch embed, da der eine höhere Browserkompatibilität aufweist.
    Dummerweise geht das da nicht so einfach, da kein Browser das so wie du das beschrieben hast beim embed unterstützt.
    Der IE hingegen unterstützt zwar:
    "document.getElementById("uhr").width"
    Aber Opera nicht
    Und
    "document.getElementById("uhr").style.width"

    unterstützt zwar Opera aber IE nicht. Letzterer gibt zu allem Überfluss auch noch ein Exception aus zu allem Übel auch noch ein Exception aus.
    Und exactfit ist das einzige was sich 1. verändern lässt, 2. ohne das es Dinge die über den Rand hinausgehen anzeigt.

    Mit freundlichen Grüßen

    Matthias Nordwig
     

  7. #7
    Matthias_Nordwig Tutorials.de Gastzugang
    Hi Habs jetzt.
    Wen es interessiert:

    width = document.body.offsetWidth;
    height = document.body.offsetHeight;
    fla_width = 0;
    fla_height = 0;
    function check_window()
    {
    if ((height!=document.body.offsetHeight) || (width =document.body.offsetWidth))
    {
    height=document.body.offsetHeight;
    width=document.body.offsetWidth;
    set_fla();
    }
    }
    function set_fla()
    {
    if ((width/height)<(800/600))
    {
    fla_width = width-3;
    fla_height = (fla_width*600)/800;
    }
    else
    {
    fla_height = height-3;
    fla_width = (fla_height*800)/600;
    }
    document.getElementById("uhr").style.width=fla_width;
    document.getElementById("uhr").style.height=fla_height;
    }
    set_fla();
    window.setInterval("check_window()",100);

    Weis net warum ich das nict gleich so gemacht habe. Wahrscheinlich genug gearbeitet heute.
     

  8. #8
    Registriert seit
    Mar 2004
    Ort
    Basisrealität
    Beiträge
    12.118
    Blog-Einträge
    7
    Nun möchte ich jedoch gar kein <objekt> mehr verwenden, sondern nur noch embed, da der eine höhere Browserkompatibilität aufweist
    äh. Du willst ernstlich das <Object>-Tag weglassen?
    Bedenke: mit dem Object-Tag erzeugst Du gültiges HTML - das Embed-Tag dient eigentlich nur der Kompatibilität zu Netscape-basierten Browsern (siehe SELFHTML)

    ich würde Dir raten, diese Entscheidung doch noch einmal zu überdenken...

    Gruß
     

  9. #9
    Matthias_Nordwig Tutorials.de Gastzugang
    Stimmt.
    Hattest übrigens recht lol hab das vorhin anscheinend nicht richtig gelesen:
    Ab in nen div damit !

    MfG
    Matthias
     

  10. #10
    Registriert seit
    Dec 2002
    Ort
    Schalke
    Beiträge
    2.498
    Ohne Object geht meines Wissens im IE gar nix, oder habe ich da was verpennt - das letzte Mal, das ich das probiert habe, war das jedenfalls so ....

    Ausserdem solltet ihr euch gut überlegen, ob ihr JavaScript UND Flash verwoben auf einer Page einsetzt, meiner Meinung nach schliesst ihr damit zuviele Leute aus, zumal man ein solches Provbelm locker mit Flash / PHP lösen kann.....ohne Browserinkompatibilitäten und den ganzen Murks.

    Grüsse
    B
     
    Num qui exsules restituti? Unum aiebat, praeterea neminem !
    http://monalisaoverdrive.de

  11. #11
    Registriert seit
    Mar 2004
    Ort
    Basisrealität
    Beiträge
    12.118
    Blog-Einträge
    7
    Zugegebenermaßen halte ich es auch für verfehlt, JS und Flash zu mischen, wenn es nicht unbedingt notwendig ist (mit PHP hat, kann man sich (siehe Deinen neuesten Thread) auch sehr elegant behelfen - allerdings nicht unbedingt, wenn die Größe des Objekts die ganze Zeit nachgeregelt werden soll) - die Skalierung mit JS habe ich einmal in einer Datei verwendet, die nur zum persönlichen Gebrauch im IE bestimmt war.
    Ich habe eine Flash-Datei bislang noch nie dynamisch dem Browserfenster anpassen wollen - schließlich entwickle ich für eine bestimmte Größe (und etwaige Änderungen lassen sich bei Bedarf Flash-intern lösen, z.B: durch Skalierung einzelner MCs).

    Gruß
     

  12. #12
    Matthias_Nordwig Tutorials.de Gastzugang
    Hallo nochmal:

    Also ich glaube, dass jeder der ein Flashplugin zulässt auch Javascript aktiviert hat. und jene welche es nicht haben (0,00000...%) können sich das .swf eben nur in 800x600 anschauen. Na und?

    Vielmehr empfinde ich Flash an sich als problematisch, bezüglich des Ausschließens.

    p.s. Ich habe das ganze jetzt übrigens folgender Maßen gelöst:

    <body bgcolor="#666666" scroll="no">
    <div id="hlayer" style="position: absolute; width:800px; height:600px; z-index: 1; left: 0px; top: 0px" >
    <p>
    <OBJECT classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000"
    codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
    WIDTH="100%" HEIGHT="100%" id="Uhr" ALIGN="top">
    <PARAM NAME=movie VALUE="Uhr.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=scale VALUE=exactfit> <PARAM NAME=wmode VALUE=transparent> <PARAM NAME=bgcolor VALUE=#666666>
    <EMBED src="Uhr.swf" quality=high scale=exactfit wmode=transparent bgcolor=#666666 WIDTH="100%" HEIGHT="100%" NAME="Uhr" ALIGN="top"
    TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
    </OBJECT></div></p>
    <script language="javascript">
    <!--
    width =document.body.offsetWidth;
    height = document.body.offsetHeight;
    fla_width = 0;
    fla_height = 0;
    function check_window()
    {
    if((height!=document.body.offsetHeight)||(width!=document.body.offsetWidth))
    {
    height=document.body.offsetHeight;width=document.body.offsetWidth;set_fla();
    }
    }

    function set_fla()
    {
    if((width/height)<(800/600))
    {
    fla_width = width-3;
    fla_height = (fla_width*600)/800;
    }
    else
    {
    fla_height=height-18;
    fla_width=(fla_height*800)/600;
    }
    document.getElementById("hlayer").style.width=fla_width;
    document.getElementById("hlayer").style.height=fla_height;
    center_fla();
    }
    function center_fla()
    {
    document.getElementById("hlayer").style.left=(width-fla_width)/2;
    document.getElementById("hlayer").style.top=(height-fla_height)/2;
    }
    set_fla();
    window.setInterval("check_window()",100);
    //--></script>

    </body></HTML>

    Mit freundlichen Grüßen

    Matthias Nordwig
     

  13. #13
    Registriert seit
    Mar 2004
    Ort
    Basisrealität
    Beiträge
    12.118
    Blog-Einträge
    7
    nochmal Hi,

    schön, dass es anscheinend funktioniert, aber mal eine persönliche Frage:

    Willst Du wirklich Deine ganze Flashseite an die Fenstergröße anpassen? Flexibilität in allen Ehren, aber kommt da nicht irgendwann ein "Sumba-Flair" auf? Bei ausschließlicher Verwendung von Vektorgrafiken funktioniert das sicher ganz gut, aber Bitmaps und Pixelfonts können m.E. durch Skalierung ganz schön versaut werden... Nein, ich will Dich hier nicht kritisieren, ich bin einfach nur interessiert, wie das Ergebnis aussieht. Ist es die selbe URL wie in den HP-Reviews?

    Gruß
     

  14. #14
    Matthias_Nordwig Tutorials.de Gastzugang
    Hi,

    kannst mich ruhig kritisieren.
    Dazu poste ich ja hier. Schliesslich währe ich ohne deine bzw. eure Hilfe noch nicht so weit.

    Ja ist die selbe URL.
    p.s.: Wegen der Grafiken habe ich mir ja eben die Mühe gemacht dieses Script zu schreiben: Um Verzerrung zu verhindern. Das funktioniert wie folgt:

    800/600=1,33

    1024/768=1,33

    usw.

    deswegen: x/y=1,33

    Solange dieses Verhältniss eingehalten wird stimmt alles.
    Und da setzt das Skript an. Wenn nämlich x/y<800/600
    dann ist y überproportional groß. Wenn x/y>800/600 dann ist x überproportional groß.

    Es muss sich am verhältnissmäßig kleineren Wert ausgerichtet werden, um die maximal mögliche Größe nutzen zu können ohne Verzerrung hervorzurufen.
    sprich dieser wird dann als Größe für das .swf eingesetzt.
    und der andere Wert lässt sich ja aus den 3 Werten berechnen: Beispiel

    x steht fest, also errechnet sich y aus (x*600)/800

    Das ist das Prinzip der ganzen Aktion.
    Im übrigen würde es generell komisch aussehen, wenn der Film beispielsweise 100 x 800 o.ä. angezeigt wird.

    Mit freundlichen Grüßen

    Matthias Nordwig
     

  15. #15
    Registriert seit
    Dec 2002
    Ort
    Schalke
    Beiträge
    2.498
    ....

    glaub mir, ich sitze wie eine Glucke auf meinen Statistikergebnissen des letzten Jahres, und aus den 283.437 Einträgen kannst du ersehen, das FLash an sich ab Player Version 6,000 zu 93% vorhanden war - die Kombination FlashPlayer / JavaScript aber nur zu 81% - das nenn ich statistisch signifikant.

    Es ist eben das bekannte Drittel der User mit Sicherheitsbedenken, bzw die Firmennetzwerke mit Alt-Administratoren, die die Sache schwer machen - mit Flash sind viele von denen angefixt, aber JavaScript halten viele für unnötig, gefährlich und nicht lohnend, so ist das nun mal.

    Ausserdem ist ein wesentlicher Grund mit Flash zu operieren die Browserunabhängigkeit, die du mit deinem Script leichtfertig aufgibst.

    Aber jeder wie er will....


    B
     
    Num qui exsules restituti? Unum aiebat, praeterea neminem !
    http://monalisaoverdrive.de

Ähnliche Themen

  1. Flash Film an Fenster anpassen
    Von mgraf im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 23.05.06, 16:17
  2. Fenster öffnen und anpassen
    Von RealSuain im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 19.01.05, 01:21
  3. Flash an Fenster anpassen
    Von calippo im Forum Flash Plattform
    Antworten: 11
    Letzter Beitrag: 07.08.04, 19:39
  4. php-Fenster anpassen/verschieben
    Von GFX-Händchen im Forum HTML & XHTML
    Antworten: 6
    Letzter Beitrag: 29.01.04, 09:51
  5. Fenster anpassen an Bildschirmauflösung!
    Von Dark Dämon im Forum HTML & XHTML
    Antworten: 4
    Letzter Beitrag: 12.02.02, 15:33