Ja, das nervt natürlich. Es gibt da einige Optionen bei History und Hash und wahrscheinlich kann man dieses Verhalten ausschalten. Ich sehe es mir später an ...
Beiträge von Sempervivum
-
-
Bei solchen Plugins besser auf die originale Doku bauen und nicht auf Anleitungen dritter. Tue ich das, funktioniert es problemlos:
HTML
Alles anzeigen<!doctype html> <html> <head> <link rel="stylesheet" href="https://unpkg.com/swiper/css/swiper.min.css"> </head> <body> <div class="swiper_wrap"> <div class="slider-wrapper"> <div class="swiper-container mySwiper"> <div class="swiper-wrapper"> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> <div class="swiper-slide">Slide 4</div> </div> <!-- Add Pagination --> <div class="swiper-pagination"></div> <div class="swiper-button-next"></div> <div class="swiper-button-prev"></div> </div> </div> </div> <div class="swiper_wrap"> <div class="slider-wrapper"> <div class="swiper-container mySwiper1"> <div class="swiper-wrapper"> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> <div class="swiper-slide">Slide 4</div> <div class="swiper-slide">Slide 5</div> <div class="swiper-slide">Slide 6</div> <div class="swiper-slide">Slide 7</div> <div class="swiper-slide">Slide 8</div> </div> <!-- Add Pagination --> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> <div class="swiper-pagination"></div> </div> </div> </div> <script src="https://unpkg.com/swiper/js/swiper.js"></script> <script> var Swiper = new Swiper('.swiper-container', { slidesPerView: 1, spaceBetween: 10, autoplay: 3500, autoplayDisableOnInteraction: false, loop: true, // If we need pagination pagination: { el: '.swiper-pagination', }, // Navigation arrows navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, }); </script> </body> </html>Bei dir war das Problem, dass Du die Pfeil-Buttons an der falschen Stelle eingefügt hast:
Code
Alles anzeigen<div class="swiper_wrap"> <div class="slider-wrapper"> <!--<div class="swiper-button-prev"></div> nicht hier --> <div class="swiper-container mySwiper1"> <!-- sondern hier, innerhalb des Swiper-Containers, sonst findet das Skript die Buttons nicht --> <div class="swiper-button-prev"> <div class="swiper-wrapper"> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> <div class="swiper-slide">Slide 4</div> <div class="swiper-slide">Slide 5</div> <div class="swiper-slide">Slide 6</div> <div class="swiper-slide">Slide 7</div> <div class="swiper-slide">Slide 8</div> </div> <!-- Add Pagination --> <div class="swiper-pagination"></div> </div> <!-- <div class="swiper-button-next"></div> next-Button genau so --> </div> </div> -
Das sollte funktionieren, wenn Du die Hash-Navigation einschaltest:
https://swiperjs.com/api/#hash-navigation
d. h. wenn Du die Swiper-Seite mit
swiper-seite.html#slide1
sollte er automatisch zu dem betr. Slide gehen.
Auf der Seite mit den Thumbnails kannst Du den hash-Wert als data-Attribut ablegen (beim Thumbnail) und mit dataset auslesen:
-
Kommt mir fast so vor, als ob ich selber eine Erleuchtung brauche
Wenn ich das richtig verstehe, hast Du deine Daten in options.test im JSON-Format, die parst Du erfolgreich in die Variable dataJSON. Und jetzt weißt Du nicht, wie Du eine Callback-Funktion nach dem Parsen aktivieren kannst.Wenn Du deinen String mit JSON.parse parst, steht das Ergebnis sofort zur Verfügung und Du kannst sofort mit der Verarbeitung beginnen. Da gibt es nichts Asynchrones und daher auch keine Notwendigkeit für $.parseJSON und einen Callback.
Also einfach so:
Code
Alles anzeigenvar dataJSON = JSON.parse(options.test); /* //jQuery.data(dataJSON, function(rData) { jQuery.getJSON(options.source, function(rData) { //jQuery.parseJSON(options.test, function(rdata) { data = rData; */ console.log(dataJSON); rowsNum = dataJSON.length; // Ab hier verstehe ich nicht, wo option.itemsPerPage herkommt // pageCount = Math.ceil(rowsNum/options.itemsPerPage); rowsOnLastPage = rowsNum - (Math.floor(rowsNum/options.itemsPerPage) * options.itemsPerPage); dateStart = tools.getMinDate(); dateEnd = tools.getMaxDate(); var contTable = createContainer();Oder ist options.test gar kein JSON-String sondern eine Javascript-Struktur aus Arrays und Objekten?
-
Zitat
es soll ja aber so sein, dass man auf irgendeines der 20 klickt, dann geht die Swipe-Seite mit genau dem geklickten auf
Verstehe ich soweit, nur finde ich es in deinem Code nicht wieder. Es müsste dann doch Thumbs geben und wenn man darauf tippt, geht die Swiper-Seite auf, aber in deinem Code finde ich keine Thumbs. Swiper hat eine umfangreiche API und es wäre kein Problem, mit Javascript gleich zu einem bestimmten Bild zu gehen.
-
IMO ist Zeile 1 der richtige Ansatz. Wenn das nicht funktioniert, würde ich vermuten, dass die Syntax des JSON fehlerhaft ist.
Allerdings verstehe ich den Hintergrund nicht ganz: Wenn die Daten aus der DB geholt werden, muss es doch ein PHP-Skript geben, das das tut und Du musst dann das JSON, das mit echo ausgegeben wird, mit Ajax laden? Wenn dem so ist, besteht clientseitig gar kein Unterschied, sowohl das Lesen aus der Datei als auch das Aufrufen des PHP-Skripts liefert den JSON-String.
-
Anscheinend kann man in Chrome die SOP deaktivieren:
https://stackoverflow.com/questions/3102…olicy-in-chrome
Letzter Update vom Juni 2018, müsste man prüfen, ob es noch funktioniert.
-
Letzteres trifft zu, die Reihenfolge ist egal.
-
Meistens wird eher gewünscht, dass ein Tooltipp beim Hover oder Klick aufgeht, also ein kleines Fenster mit weiteren Informationen. Dafür gibt es zahlreiche vorgefertigte Lösungen. Bei deiner Aufgabe glaube ich eher nicht, dass es etwas komplett fertiges gibt. Für den Slider jedoch schon, da gibt es ebenfalls zahlreiche. Selber benutze ich Swiper, der hat eine API, die keine Wünsche offen lässt und funktioniert auch auf Touch-Geräten. Für den Rest ist dann wohl selber machen angesagt. Was ist das denn für ein Bild? Raster, also JPG, PNG o. ä. oder Vector (SVG)? Und soll das Ganze auch responsiv sein?
-
Javascript hat aber nur interaktiv Zugriff auf das lokale Dateisystem. Wäre das aktzeptabel? Statt csv würde ich in Betracht ziehen, eher das JSON-Format zu verwenden, weil Du da wesentlich freier in den Datenstrukturen bis.
-
Zitat
Wird hier trotzdem ein Server benötigt?Offenbar ja:
ZitatThe indexedDB API only works inside a webserver. When you navigate to it using the file system it won't work. The indexedDB API needs a domain context to work in and the file system doesn't provide that. Short you need an url to use the api.
https://stackoverflow.com/questions/1569…local-html-file
Bleibt dir wohl nichts anderes übrig, als einen lokalen Webserver zu installieren, wenn das bei euch zulässig ist.
-
OK, dann empfehle ich die zweite Variante. Als ID würde ich einen "sprechenden" String empfehlen, damit Du dir keine Nummern merken musst.
Etwa "superHeroes" in deinem Beispiel. Könnte dann auf PHP-Seite so aussehen:
PHP
Alles anzeigen<?php // die URLs mit ihren IDs $urlarray =[ 'superHeroes' => 'die-url-der-API-mit-key', 'andere-id' => 'die-url-einer-anderen-API-mit-key' // usw. ]; // die URL aus der Liste auslesen if (isset($_GET['id'] && isset(urlarray[$_GET['id']]) { $theurl = urlarray[$_GET['id']]; // die API auslesen $response = file_get_contents($theurl); // und den Inhalt ausgeben echo $response; } ?>Ungetestet. Die ID musst Du dann beim Aufruf des Skripts als GET-Parameter übergeben. Etwas komplizierter wird es, wenn Du neben dem Key noch andere Parameter übergeben musst.
-
Weiß nicht genau, wie deine Frage zu verstehen ist: Normaler Weise gibt es zu einer bestimmten API und URL einen Key. Möchtest Du mit getData.php mehrere verschiedene APIs abfragen? Das ginge, wenn Du die URL ohne Key als Parameter übergibst und dann im Skript den Key einsetzt. Oder nur eine ID als Parameter übergeben und anhand dessen aus einer Liste die URL einschl. Key holen - möglicher Weise die bessere Lösung. Einfacher wäre es aber, für jede API ein eigenes Skript zu schreiben.
-
Dann poste doch mal das HTML und das CSS der Tabelle.Wenn die Tabelle sehr lang ist, kannst Du sie auf ein paar Reihen kürzen.
-
Wie hast Du denn diese Tabelle gestaltet? Was hast Du für einen Editor? Hast Du das CSS selbst geschrieben oder ist es ein WYSIWYG-Editor, der es automatisch erzeugt?
-
Gute Frage! Früher habe ich mal gelernt, dass lokale Variablen innerhalb einer Funktion nicht mehr verfügbar sind, nachdem diese durchlaufen und verlassen wurde. In diesem Fall trifft das offenbar nicht zu. Javascript merkt sich diese und sie sind auch später verfügbar, wenn der Eventlistener triggert. Der Begriff dafür lautet "closure", wenn ich mich richtig erinnere. Ein Verfallsdatum gibt es nicht, die Variable bleibt beliebig lange verfügbar.
-
Ich würde versuchen, die Bilder testweise einzubetten. Dann müsstest Du im HTML-Inspektor oder in der Quelltextansicht des Browsers das src-Attribut mit dem Pfad des Bildes auslesen können.
-
Der Grund ist, dass window.onload nur eine Funktion aufnehmen kann. Mit der zweiten Zuweisung von readTestText2 überschreibst Du readTestText. Die Lösung ist einfach: Beides in eine Funktion packen:
Codewindow.onload = readTestText; function readTestText() { $('#absatzM').load('read.php'); $('#absatzZ').load('readZ.php'); }BTW: Du kannst auf das onload verzichten, wenn Du das Javascript ganz an das Ende des body stellst, vor das schließende </body>.
BTW2: Du kannst hier vorteilhaft mit einem einzigen PHP-Skript auskommen, wenn Du den Anfangsbuchstaben als Parameter übergibst. Aber einen Schritt nach dem anderen.
-
Dieses Skript eignet sich eher weniger dafür, mehrere verschiedene Galerien zu verwalten. Besser als es aufzubohren, ist wahrscheinlich, gleich ein ausgewachsenes Lightbox-Skript wie Fancybox 3 zu verwenden:
-
Zitat
ob es dafür einen Weg gibt um dies zu schützen aber ich meine ich habe dazu schonmal ein Thema gemacht
Ich kann mich auch erinnern, dass es dazu schon Mal einen Thread gab, aber ich finde ihn auf die Schnelle nicht wieder. Die Lösung besteht darin, die API in PHP z. B. mit file_get_contents zu lesen und auszugeben und im Javascript dann dieses PHP-Skript zu lesen. Dann ist der Key verborgen.