Beiträge von Sempervivum

    Das konntest Du auch nicht wissen, weil es im jsfiddle ein wenig versteckt ist: Das Skript benutzt d3.js und das musst Du einbinden:

    Code
    <script src="https://d3js.org/d3.v6.min.js">

    Oben in dem head-Abschnitt.

    Und das Einbinden des Skriptes script.js nach dem HTML, vor dem schließenden </body>.

    (Die Wortwahl mit "pano" passt für deine Anwendung wahrscheinlich nicht mehr so, aber erst Mal sehen, dass es so funktioniert).

    Und dann musst Du das HTML genau so lassen, weil das Skript auf die Elemente mit der ID zugreift:

    Code
      <!-- <div class="zaun">
        <img src="zaun_cplatz_300px.jpg" alt="TV 1861 Amberg">
      </div> -->
    
        <div id="pano-outer">
          <img id="pano-img" src="zaun_cplatz_300px.jpg">
        </div>
        <svg width="600" height="300"></svg>
    Zitat

    der Positionsanzeiger ist (unabhängig vom Wert) extrem lang. Wie kann ich diesen variieren?

    Die Länge des Anzeigers ist nicht durch einen festen Wert definiert sondern stellt sich proportional nach dem Seitenverhältnis des Bildes ein. D. h. seine Länge ist im Verhältnis zum Umfang des Ovals genau so groß wie der Schieber der Scrollbar im Verhältnis zu ihrer gesamten Breite, so dass genau der sichtbare Bereich des Bildes angezeigt wird. Mein Bild ist noch nicht besonders lang gestreckt, deshalb ist der Anzeiger relativ lang. Verwende ich ein Platzhalter-Bild mit der Größe, die Du früher angegeben hast, 30000x120, sieht es gleich ganz anders aus:

    https://jsfiddle.net/Sempervivum/pwhfv8xm/1/

    Die Startposition lässt sich relativ leicht ändern, indem man die Positionen pos1, pos2, pos3, pos4 anpasst. Ich werde auch dafür eine Demo machen. Wo möchtest Du die Startposition denn haben?

    Zitat

    Aber kann man das dann auch an die Scrollbar eines div´s hängen?

    Selbstverständlich, statt an das input-Event kann man das Javascript auch an das scroll-Event eines scrollbaren Containers hängen:

    https://jsfiddle.net/Sempervivum/o8ra72nk/3/

    Zitat

    Kann man die Funktion von Link 2 mit der Grafik aus Link 1 kombinieren?

    Selbstverständlich, man muss ja zu dem rechten Kreisbogen nur die schmalen Rechtecke oben und unten und den linken Kreisbogen hinzu fügen:

    https://jsfiddle.net/Sempervivum/w5Lpzgnc/1/

    Dann braucht es noch ein paar Fallunterscheidungen um je nach Scrollposition den Anzeiger in das richtige Element zu positionieren.

    Ich bin gern bereit, dich dabei zu unterstützen, kann ja einiges über d3.js dabei lernen. Aber erst Mal klären, ob das Beispiel in dem Fiddle oben deinen Anforderungen entspricht.

    Guten Morgen und frohe Ostern!

    Erst mal klären, wie Du dir das mit dieser Minimap vorstellst: Eine ganz einfache Grafik kann man auf einfachem Wege mit HTML und CSS erzeugen, ich habe hier mal eine Demo gemacht, zunächst ohne Slider und Animation:

    https://jsfiddle.net/Sempervivum/yon4qfxc/2/

    Der grüne Punkt würde darin die Position angeben. U. U. müsste dieser etwas länglich sein, weil der Bildausschnitt je eine gewisse Breite hat. Für den Kreisbogen habe ich auch eine Demo gemacht:

    https://jsfiddle.net/Sempervivum/x4g06njk/

    Ich nehme an, wenn Du von Google Maps sprichst, stellst Du dir ein Satellitenbild vor. Dafür kenne ich als Quellen nur Google und Bing. Es gibt ja auch Openstreetmap aber das bietet, AFAIK, nur einfache Karten an. Technisch ist das auch kein Problem aber dann kommen die Lizenzfragen ins Spiel, u. U. braucht man einen Key und da bin ich jetzt nicht im Bilde wie der aktuelle Stand ist. Möglicher Weise ist es einfacher, wenn man ein statisches Bild in einem iFrame anzeigt.

    Ich habe noch ein wenig darüber nachgedacht und ich glaube, jetzt verstehe ich es besser: Das Bild B willst Du genau wie Bild a in einem scrollbaren Container anzeigen und zusätzlich möchtest Du zur Orientierung für den Benutzer solch eine Minimap unter dem großen Bild anzeigen, wo man auf dem Oval die Position des sichtbaren Ausschnittes erkennen kann?

    Zitat

    Wenn du möchtest kann ich dir mal den Entwurf zu Bild A schicken?

    Gern, poste es ruhig mal. Interessanter wäre allerdings B weil Du ja schreibst, dass die Lösung für A kein großes Problem ist. Bedeutet das, dass es sich um Grafiken handelt, die schon vorhanden sind bzw. sein werden, also jpg oder png, oder ... und wo nur noch das Scrolling bzw. die Positionsanzeigen hinzu kommen soll?

    Das ist kein allzu großes Problem. Was meinst Du denn in diesem Zusammenhang mit "Bild"? Hast Du schon Grafiken von diesen Flächen bzw. bei B von der ovalen Bahn oder soll das erst modelliert werden?

    Häufig ist es hilfreich, wenn man weiß, in welchem Zusammenhang eine Aufgabe steht.

    Guten Morgen Stefan,

    das hatte ich schon vermutet, dass das ein Problem wird: toFixed erwartet einen numerischen Wert als Parameter, das data-Attribut enthält jedoch einen String. Das kann man sehr leicht beheben, indem man den String in einen integer umwandelt:

    parseInt(cell.dataset.kmph).toFixed(1)

    Zusätzlich kann man das toFixed sehr gut verketten, dann wird der Code etwas kompakter: 

    Hätte es doch komplett testen sollen. Das Problem ist, dass ich die ID vom span-Element verwendet habe, die Funktion convertUnit braucht jedoch die Tabellenzelle. Wenn Du dies für den Update verwendest, sollte es besser funktionieren:

    Und in der Funktion convertSpeed musste ich auch noch eine Kleinigkeit ändern: Der km/h-Wert muss auch beim Update gespeichert werden.

    OK, wie ich vermutet hatte, da gibt es ein <span> in der Tabellenzelle für die Formatierung.

    Ich habe das mal so umgestellt:

    Soweit getestet und funktioniert.

    Beim Update musst Du dann nur das DOM-Element der Tabellenzelle und false übergeben:

    Dieses nicht getestet, wenn es nicht funktioniert, versuche den Fehler zu finden und melde dich, wenn es nicht gelingt.

    Zitat

    Der Wert in der besagten Zelle wird alle 200 ms aktualisiert (GPS-Signal).

    Wie geschieht denn das? Vermutlich indem die Daten mit Ajax geholt werden oder durch Neuladen der Seite. Wenn ersteres, dann brauchst Du gar kein zusätzliches setInterval sondern kannst den Wert im success- oder then-Callback aktualisieren.

    Wie soll es denn funktionieren?

    a) Soll der Wert auf km/h zurück gesetzt werden? Dann müssen wir die Klassen und data-Attribute einfach in Grundstellung bringen. Bzw. wenn die Seite neu geladen wird, brauchen wir gar nichts zu tun.

    oder

    b) Soll die letzte Einheit nach der Aktualisierung erhalten bleiben? Dann müssen wir die Klassen und data-Attribute ebenfalls entspr. setzen.

    BTW: Diese Code

    var interval = window.setInterval("convertSpeed(id=tempPos1)", 500);

    ist fehlerhaft:

    Als Parameter muss das Element selber übergeben werden, also so:

    convertSpeed(document.getElementById('tempPos1')

    Bevor dann der Thread gesperrt wird, versuche dies:

    Wenn auch noch in andere Maßeinheiten umgerechnet werden soll, wird es ein klein wenig komplizierter:

    Offenbar versteht Datatables die Struktur, die deine API liefert, nicht. Der einfachste Weg ist, die Antwort vorzuverarbeiten und in ein Format für Datatables zu bringen. Dieses funktioniert bei mir:

    Ich war der Meinung, dass die Ausgabe nur Sinn macht, wenn man das Datum mit anzeigt, daher habe ich es hinzu gefügt.

    Datatables unterstützt auch Ajax und man kann auch dort ein Vorverarbeitung durchführen:

    https://datatables.net/reference/option/ajax.dataSrc

    Damit geht es dann etwas kompakter und eleganter: