Beiträge von Sempervivum

    Zitat

    addGlobalStyle('img:hover { background: yellow;transform:scale(1.5);transition: all 2s;border:1px solid red; }');

    was muss ich da ändern ,das bei mouseout der effekt auch funktioniert

    Du brauchst das transition nur dem img ohne hover zuzuweisen:

    Code
    addGlobalStyle('img:hover { background: yellow; transform:scale(1.5); border:1px solid red; }');
    addGlobalStyle('img { transition: all 2s; }');

    Noch zu dieser Frage:

    Zitat

    kann man bei userscripte eigentlich die css auch so nehmen wie man die im netz findet

    Eine alternative Möglichkeit könnte dieses sein:

    Code
        var stl = document.createElement("style");
        stl.innerHTML = "body {color: red;}";
        document.body.appendChild(stl);

    Ist das CSS umfangreicher, müsstest Du es auf eine Zeile komprimieren. Das wäre aber genau so gut bei dem Verfahren mit addGlobalStyle() möglich.

    PS: Test ergibt, dass es so nicht funktioniert, weil man auf diese Weise offenbar nur Attribute auswerten kann und keine CSS-Eigenschaften. Dies funktioniert jedoch:

    CSS

    Code
            *[class*='magnify']:hover {
                transform: scale(1.2);
            }

    JS

    Code
                var elems = document.querySelectorAll("*");
                for (var i = 0; i < elems.length; i++) {
                    var ele = elems[i];
                    if (Object.values(ele.style).indexOf('background-image') > -1) ele.classList.add('magnify');
                }

    Mal sehen, vielleicht findest Du dafür ja auch noch eine einfachere Lösung :)

    Zitat

    addGlobalStyle('img:hover { background: yellow;transform:scale(1.5);border:1px solid red; }');

    Geniale Idee, so ist es noch viel einfacher!

    Zitat

    ich habe auch ein paar bilder die als background images gespeichert sind,also in url(bild). wie kann ich das bild den vergrössern, weil in meinen fall ist das element ein div ...ein css mit div erstellen währe etwas doof weil auf der seite noch mehr div ist was da nicht mit spielen soll.

    Du kannst einen CSS-Selektor auf Grund von Attributen verfeinern:

    https://www.mediaevent.de/css/css-selekt…utselektor.html

    Also in deinem Fall:

    Code
    div[background-image] {transform: scale(1.5)}
    div[background*='url('] {transform: scale(1.5)}

    Nebeneffekt: Auch der Inhalt des div wird vergrößert. Will man das vermeiden, müsste man intensiver nachdenken.

    PS: Man kann das Ganze stark vereinfachen, wenn man CSS und transform:scale() verwendet. Das hat zusätzlich den Vorteil, dass sich das Layout beim Vergrößern nicht verschiebt.

    Du brauchst nicht auf die Bilddaten selber zuzugreifen, sondern musst nur die entspr. Attribute manipulieren. Statt deines Ansatzes mit mousemove empfehle ich, mouseover und mouseout zu verwenden, dann kannst Du auf eine Neuigkeitsauswertung verzichten.

    Dieses funktioniert bei mir im Tampermonkey:

    Zitat

    da ich ein userscript bauen will

    Was meinst Du damit? So ein Skript für Tampermonkey o. ä., das man auf eine fremde Seite anwenden kann?

    Du musst berücksichtigen, dass, wenn ein Bild in Originalgröße eingebunden ist, dieses sich nur mit Qualitätsverlust vergrößern lässt.

    Ein img-Element ist inhaltsleer, es hat keinen Inhalt in deinem Sinne, auf den Du mit innerHTML oder textContent zugreifen könntest.

    Außerdem ist es verfehlt, in einem onmousemove-Handler ein alert anzubringen, weil dieser den ganzen Browser blockiert und das onmousemove-Element wiederholt triggert.

    Zitat

    Ganz am Schluss will ich versuchen mit den Daten aus dem Formular dann zu arbeiten.

    Zitat

    Wenn ich das richtig verstehe, muss ich die Variablen aus der Funktion herausholen

    Aus der Funktion heraus holen geht nur über einen Rückgabewert oder globale Variablen. Ersteres geht nicht bei einem Eventhandler und letzteres würde ich nicht empfehlen.
    Statt dessen empfehle ich, die weitere Verarbeitung ebenfalls in der Funktion ausgabe() zu machen:

    Code
    function ausgabe (event)
        {
        event.preventDefault();
        var autoerzeuger = document.getElementById ('autohersteller').value;
        var farbevonauto = document.getElementById ('farbeauto').value;
        var maxgeschw = document.getElementById ('maxgeschwindigkeit').value;
        
        document.getElementById("anzeige").innerHTML = "Hersteller: " + autoerzeuger + "Farbe: " + farbevonauto + " maximale Geschwindigkeit: " + maxgeschw;
        // hier die weitere Verarbeitung
      }

    Außerdem empfehle ich, auf document.write() zu verzichten. Das Verhalten ist u. U. schwer einzuschätzen. Besser die Daten mit innerHTML in einen Container eintragen.

    Der Grund ist wahrscheinlich etwas unerwartet: Durch das Submit des Formulars wird das Formular abgeschickt, d. h. die unter "action" angegeben PHP-Seite wird aufgerufen und die Parameter werden übergeben. Ist "action" nicht definiert, wird einfach die aktuelle Seite aufgerufen bzw. neu geladen. Dabei geht alles, was Du mit Javascript definiert und in den Ausgabe-Container geschrieben hast, verloren.

    Um den Fehler zu beheben, musst Du die Default-Aktion des Submit, d. h. das Laden der Seite, unterdrücken. Das geschieht mit event.preventDefault():

    Kann beim Lesen keinen Fehler entdecken. Bei meinen Tests war $woerter anfangs leer, weil ich die Datei gesamt.txt anfangs nicht UTF8-kodiert gespeichert hatte. Dann schlägt das Kodieren nach JSON fehl, wenn Umlaute oder ß vorhanden sind und das Array ist leer.

    Wenn Du es damit nicht beheben kannst, dann lade den Code hoch und poste die URL. Du kannst ja eine Kopie anlegen, damit das, was funktioniert, online bleibt.

    Der Ansatz ist schon richtig, sofern $woerter ein Array ist, wird auch Wortliste eines sein. Dann kannst Du ein zufälliges Wort wie folgt auswählen:

    PHP
            var woerter = <?php echo json_encode($woerter); ?>;
            console.log(woerter);
            var idx = Math.floor(Math.random() * woerter.length);
            var zufallswort = woerter[idx];
            console.log(zufallswort);

    Ja, jetzt wo ich das sehe, verstehe ich, was Du vor hast. Da warst Du aber fleißig, ein Array mit 600 Wörtern! Oder ist das mit PHP generiert?

    Mein Code funktioniert bei mir einwandfrei. Ich hatte ihn zunächst nur mit Ziffern getestet und mit Wörtern funktionierte er nicht. Dann habe ich ihn korrigiert und in meinem Posting geändert. Hast Du vielleicht vorher die fehlerhafte Version genommen?

    Wenn Du bei jedem Druck auf Start ein neues Wort auswählen willst, wäre es natürlich besser, das ganze Array in JSON zu kodieren und von PHP an JS zu übergeben.

    Wenn die Wörter untereinander, durch Zeilenumbruch getrennt, stehen, kann man sie viel einfacher mit der Funktion file() in ein Array einlesen.

    Für den oberen Grenzwert bei Aufruf von rand() besser die Anzahl der Wörter durch count() ermitteln.

    Wenn Du im PHP nur ein einziges Wort ausgibst, brauchst Du dieses nicht mit jcon_encode() zu kodieren.

    Dieses funktioniert bei mir:

    PHP
        <?php
        $woerter = file('gesamt.txt', FILE_IGNORE_NEW_LINES);
        $idx = rand(0, count($woerter) - 1);
        ?>
        <script>
            var zufallswort = "<?php echo $woerter[$idx]; ?>";
            console.log(zufallswort);
        </script>
    Zitat

    Jetzt muss ich nur meine Textdatei mit den Wörtern in einen Array bekommen

    Würde ich automatisch mit einem PHP-Skript machen. Poste die Struktur der Textdatei, dann kann man dir die wenigen Zeile Code geben.

    Zitat

    Hab versucht mit json_encode einen php Array zu übergeben.

    Das ist sicher der richtige Ansatz. Hast Du es so versucht?:

    PHP
    var woerter = <?php echo json_encode($woerter); ?>;

    Das Problem liegt offenbar hier:

    Code
    <img src="FA/Hello.png" onload="play('bild1');" id="bild1" />

    Dieses onload feuert nicht nur, wenn die Seite zum ersten Mal geladen wird, sondern auch jedesmal, wenn Du das src-Attribute änderst, um ein neues Bild anzuzeigen, denn dabei wird dieses Bild jeweils geladen.

    Durch die vielen Mini-Funktionen ist der Code schwer zu lesen, ich empfehle, es zu straffen.

    Außerdem empfehle ich, die Bildadressen in einem Objekt abzulegen:

    Code
    var bilder = {};
    bilder.a = "FA/FA_A.png";
    bilder.b = "FA/FA_B.png";
    bilder.c = "FA/FA_C.png";
    bilder.d = "FA/FA_D.png";
    // usw.

    Dann kann der ganze Switch entfallen und es reduziert sich auf:

    Code
    document.getElementById(a).src = bilder[a];