Hast Du auch jQuery eingebunden? Ich hatte den Code getestet und er funktioniert.
Beiträge von Sempervivum
-
-
Schau mal, ob dir dies hilft:
http://stackoverflow.com/questions/6534…website-addressPersönlich schätze ich es aber weniger, wenn mein Browser nicht den wirklichen Dateinamen anzeigt.
-
Dieses sollte funktionieren:
https://jsfiddle.net/Sempervivum/tazpjqwk/9/Ich habe den areas noch jeweils ein Klasse area1 und area2 gegeben und diesen für das Hover das entspr. Hintergrundbild.
-
Übrigens:
Zitatauf meiner Seite liegen nachher ca. 20 verschiedene hover-Bilder natürlich dann auch mit jeweils unterschiedlichen areas und ausgehenden Verweisen
Wenn es so viele sind, könntest Du überlegen, die Daten in einer Liste abzulegen und daraus das HTML bzw. DOM zu generieren, entweder mit JS oder mit PHP. Etwa so:
JavaScriptvar data = [{ image: "url des Bildes", bg_hover; "url des Hintergrundbildes bei Hover", areas: [{ top: obere Position, left: linke Position, width: Breite, height: Höhe, linklabel: Beschriftung des Links im Menü linkurl: URL des Links },{ top: obere Position des zweiten Bereichs; left: }] }, { Daten für den zweiten Content }]; -
Wenn Du es so gemacht hast:
CSS.area:hover { position: absolute; border: 0.5px dotted red; }.area1:hover { background-image: url("http://wallpaper-gallery.net/images/wallpaper-red/wallpaper-red-17.jpg"); }würde ich eigentlich erwarten, dass es funktioniert. Wenn nicht, dass lege doch mal ein Fiddle oder eine Testseite mit zwei content-Containern an, damit man es testen kann.
-
Ich habe mal dieses ausgearbeitet (ohne Tabelle). Schau mal, ob es das ist, was Du brauchst:
Code
Alles anzeigen<div id="row1"> <img class="productimg" src="http://lorempixel.com/output/abstract-q-g-200-200-10.jpg" data-src-sel="http://lorempixel.com/output/abstract-q-c-200-200-8.jpg" data-src="http://lorempixel.com/output/abstract-q-g-200-200-10.jpg" data-name="Name1-1" data-price="8,50"> <img class="productimg" src="http://lorempixel.com/output/abstract-q-g-200-200-7.jpg" data-src-sel="http://lorempixel.com/output/abstract-q-c-200-200-9.jpg" data-src="http://lorempixel.com/output/abstract-q-g-200-200-7.jpg" data-name="Name1-2" data-price="11,50"> <span class="productinfo"></span> </div> <style> .productinfo { display: inline-block; width: 200px; height: 200px; vertical-align: top; } </style> <script> $(".productimg").on("click", function() { if ($(this).hasClass("active")) { $(this).removeClass("active"); $(this).attr("src", $(this).attr("data-src")); } else { var selimg = $(this).siblings(".productimg.active"); selimg.attr("src", selimg.attr("data-src")).removeClass("active"); $(this).addClass("active"); $(this).attr("src", $(this).attr("data-src-sel")); var htm = $(this).attr("data-name") + "<br>"; htm += $(this).attr("data-price"); $(this).siblings("span.productinfo").html(htm); } }); </script> -
Zitat
wird also nach der Auswahl dargestellt mit Preis und Name im separaten <td>
Soll diese Zelle als letzte in der Reihe mit den Bilder angezeigt werden?
-
So funktioniert es:
https://jsfiddle.net/Sempervivum/tazpjqwk/6/Ich habe lediglich das HTML des zweiten Fiddle, ohne #wrapper, in das div#content1 hineinkopiert und dem div#content1 zusätzlich die Klasse .content gegeben. Danach waren die area-divs zunächst nicht sichtbar. Das lag an dieser CSS-Anweisung:
Sie macht auch die area-divs unsichtbar. So funktioniert es:
Dies macht nur das unmittelbare Kindelement in der ersten Stufe unsichtbar.
Um bei mehreren content-Containern und ihren Inhalten den Überblick zu bewahren, empfehle ich eine zweistufige Nummerierung, so wie ich es im Fiddle gemacht habe:
Z. B. area1-3 im ersten div#content1, entspr. dann z. B. area2-4 im zweiten div#content2.
(War es dies, was Du mit hover-Nummer meintest?)
Das HTML und das CSS ist jetzt so umfangreich geworden, dass es schwer fällt, in den kleinen Fenstern des Fiddle den Überblick zu behalten. -
Manche sagen "geht nicht - gibt' nicht" und ich bin ganz optimistisch, dass sich dein Vorhaben realisieren lässt. Allerdings verstehe ich nicht richtig, was Du vor hast und wo das Problem liegt. Du hast da zwei fiddles gepostet, das erste mit einem Aufklappmenü links und Content rechts. Das zweite mit dem Bild und den hover-Menüs an den Bereichen. Soll jetzt dieser Inhalt aus dem zweiten fiddle der Content im ersten werden?
-
Gar nicht verwirrend. Ich hatte es zunächst auch so verstanden, aber dann in meine Testdatei gesehen, die ich früher von dir übernommen hatte und dort keine Skriptdatei gefunden. In deiner endgültigen Seite habe ich es jedoch gefunden. Wenn Du mein Skript in deins übernimmst, das Du im Header einziehst, musst Du es in das document-ready schreiben:
JavaScript
Alles anzeigen$(document).ready(function() { $('.menubutton').click(function() { $('nav').slideToggle('slow'); }); window.addEventListener("beforeunload", function () { window.localStorage.setItem("scrollLeft" + window.location.pathname, $(window).scrollLeft()); window.localStorage.setItem("scrollTop" + window.location.pathname, $(window).scrollTop()); }); var leftPos = window.localStorage.getItem("scrollLeft" + window.location.pathname); var topPos = window.localStorage.getItem("scrollTop" + window.location.pathname); $(window).scrollLeft(leftPos); $(window).scrollTop(topPos); }); -
Ganz korrekt ist dein Entwurf noch nicht, es muss so aussehen:
JavaScriptwindow.addEventListener("beforeunload", function () { window.localStorage.setItem("scrollLeft" + window.location.pathname, $(window).scrollLeft()); window.localStorage.setItem("scrollTop" + window.location.pathname, $(window).scrollTop()); }); var leftPos = window.localStorage.getItem("scrollLeft" + window.location.pathname); var topPos = window.localStorage.getItem("scrollTop" + window.location.pathname); $(window).scrollLeft(leftPos); $(window).scrollTop(topPos);Wenn Du das in eine Datei, z. B. scrollto.js schreibst, musst Du diese, analog zu jQuery, so einziehen:
ggf. mit Verzeichnis, wenn Du sie in ein Unterverzeichnis legst.
-
Was das Einbinden von jQuery betrifft: Wenn Du diese Zeile schon hast, solltest Du jQuery nicht ein zweites Mal einbinden.
Natürlich kannst Du das Javascript in eine Datei einziehen und auf allen Seiten verwenden. Du musst jedoch bedenken, dass es nur bei einem Neuladen der gleichen Seite funktioniert. Wenn Du eine neue Seite lädst, wird die Scrollposition der vorigen Seite eingestellt und das ist ja sicher nicht das, was Du willst. Man kann das aber ändern, indem man die URL der Seite in den Item-Namen mit aufnimmt, etwa so:
-
Ich habe da mal etwas ausgearbeitet:
https://jsfiddle.net/ao6Le32x/3/Damit brauchst Du nur ein zusätzliches, rot eingefärbtes Bild.
Statt einer image-map habe ich für jeden Bereich ein div über das Bild gelegt. Das funktioniert natürlich nur mit rechteckigen Bereichen, aber ich glaube, das trifft bei dir zu.
Schau mal, ob das das ist, was Du dir vorgestellt hast. -
Um es browserübergreifend zum Laufen zu bringen, musste ich jquery verwenden. Binde es im head ein:
und füge dieses Javascript am Ende des body, vor dem schließenden </body> ein:
JavaScript<script> window.addEventListener("beforeunload", function () { window.localStorage.setItem("scrollLeft", $(window).scrollLeft()); window.localStorage.setItem("scrollTop", $(window).scrollTop()); }); var leftPos = window.localStorage.getItem("scrollLeft"); var topPos = window.localStorage.getItem("scrollTop"); $(window).scrollLeft(leftPos); $(window).scrollTop(topPos); </script> -
Zitat
nun lädt die Seite ja immer neu und springt dabei nach oben. Gibt es eine Funktion, dass die Seite "stehen bleibt" auch wenn sie neu lädt?
Ja, man kann die Scrollposition im Localstorage speichern und beim Neuladen die wieder herstellen. Mache ich dann ...
Sehr gelungenes Design!
-
Dann mach es doch so:
HTML<area shape="rect" coords="510,32,640,328" href="javascript:showMenu('menu4');" onmouseover="changeImage('bild_40.png'); document.getElementById('menu4').style.display = 'block';" onmouseout="changeImage('bild.png');"/>HTML<div id="menu4" onmouseout="this.style.display = 'none';"> Menu 4 <a href="link1.htm">Link1</a> <a href="link2.htm">Link2</a> <a href="link3.htm">Link3</a> </div>Eleganter wäre es jedoch, das Menü so zu positionieren, dass es die Area überlappt, so dass man ohne Unterbrechung von einem zum anderen hovern kann.
-
Tabellen für Layoutzwecke sind heutzutage stark verpönt. Ich empfehle, die Elemente mit CSS nebeneinander anzuordnen:
Oder so:
-
Zitat
Jetzt müssen meine Menüs nur noch visible bleiben, bis ich die "Menü-Fläche" oder die auslösende area im Hauptbild verlasse...
Das verstehe ich nicht: Dass das Menü beim Verlassen der Area wieder unsichtbar wird, hast Du doch schon programmiert. Aber wenn das so ist, ist das Menü doch gar nicht bedienbar, weil es ja verschwindet, wenn man die Maus dorthin bewegt.
Oder möchtest Du, dass das Menü erscheint, wenn man mit der Maus die Area betritt und erst verschwindet, wenn man mit der Maus das Menü verlässt?Du hast es jetzt zwar mit dem Wechsel des Bildes gelöst, aber man kann das Einfärben der Bereiche auch dynamisch mit Javascript machen:
http://www.netzgesta.de/mapper/Das wäre zu empfehlen, wenn Du später noch weitere Areas hinzu fügen möchtest, dann musst Du nicht jedes Mal ein neues Bild anfertigen.
Hast Du auch bedacht, was auf Touch-Geräten passiert, die kein Mouseover haben?
-
So, mit dem Einfügen des Bildes und der Tags im Kopf bin ich fertig. Du kannst es ja noch nach deinen Vorstellungen stylen.
PHP
Alles anzeigen<?php error_reporting(E_ALL); ini_set('display_errors', '1'); /* #################################################################################### Ein einfacher Audio-Player auf HTML5 Basis. Browser: IE 9+, Chrome (auch iOS), Safari (auch iOS), Firefox ab V. 21, neue Opera http://webdesign.weisshart.de 2014 Lizenz: CC BY-NC-SA 3.0 DE ##################################################################################### */ /* ################### hier die .mp3 Dateien (Streams gehen als https nicht) ######## */ $url = array(); $image = array(); $title = array(); $artist = array(); $album = array(); $composer = array(); $genre = array(); $year = array(); $comment = array(); // include getID3() library (can be in a different directory if full path is specified) require_once 'getID3-1.9.12/getid3/getid3.php'; // Initialize getID3 engine $getID3 = new getID3; // $files = glob("audio/*.mp3"); $files = glob("S-Test_mp3/*.mp3"); foreach ($files as $filename) { $url[] = $filename; // Analyze file and store returned data in $ThisFileInfo $ThisFileInfo = $getID3->analyze($filename); //var_dump($ThisFileInfo); if(isset($ThisFileInfo['comments']['picture'][0])){ $image[] = 'data:'.$ThisFileInfo['comments']['picture'][0]['image_mime'].';charset=utf-8;base64,'.base64_encode($ThisFileInfo['comments']['picture'][0]['data']); } else { $image[] = ''; } if(isset($ThisFileInfo['tags']['id3v2']['title'][0])) $title[] = $ThisFileInfo['tags']['id3v2']['title'][0]; else $title[] = ''; if(isset($ThisFileInfo['tags']['id3v2']['artist'][0])) $artist[] = $ThisFileInfo['tags']['id3v2']['artist'][0]; else $artist[] = ''; if(isset($ThisFileInfo['tags']['id3v2']['album'][0])) $album[] = $ThisFileInfo['tags']['id3v2']['album'][0]; else $album[] = ''; if(isset($ThisFileInfo['tags']['id3v2']['composer'][0])) $composer[] = $ThisFileInfo['tags']['id3v2']['composer'][0]; else $composer[] = ''; if(isset($ThisFileInfo['tags']['id3v2']['genre'][0])) $genre[] = $ThisFileInfo['tags']['id3v2']['genre'][0]; else $genre[] = ''; if(isset($ThisFileInfo['tags']['id3v2']['year'][0])) $year[] = $ThisFileInfo['tags']['id3v2']['year'][0]; else $year[] = ''; if(isset($ThisFileInfo['tags']['id3v2']['comment'][0])) $comment[] = $ThisFileInfo['tags']['id3v2']['comment'][0]; else $comment[] = ''; } /* ##################### ab hier nicht mehr editieren ########################## */ $aufruf =""; $direktlink =""; function isIOS($user_agent=NULL) { if(!isset($user_agent)) { $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; } return (strpos($user_agent, 'iPhone') !== FALSE || strpos($user_agent, 'iPad') !== FALSE || strpos($user_agent, 'iPod') !== FALSE ); } /* den uebergebenen Titel abfragen */ if (isset($_REQUEST['titel'])) { $autoplay="autoplay"; /* kein Autoplay in iOS */ $neuer_titel=true; for ($i = 1; $i <= count($url); $i++) { if ($_REQUEST["titel"] == $i) {$titel = $url[$i-1];} } } else { $titel = $url[0]; $autoplay = ""; } /* Das Infofeld generieren */ if (isset($_REQUEST['titel'])) $activei = $_REQUEST['titel'] - 1; else $activei = 0; $infofield = '<img id="infoimg" width="150" height="150" src="' . $image[$activei] . '">'; $infofield .= '<ul id="infolis">'; $infofield .= '<li>Titel: ' . $title[$activei] . '</li>'; $infofield .= '<li>Interpret: ' . $artist[$activei] . '</li>'; $infofield .= '<li>Album: ' . $album[$activei] . '</li>'; $infofield .= '<li>Komponist: ' . $composer[$activei] . '</li>'; $infofield .= '<li>Genre: ' . $genre[$activei] . '</li>'; $infofield .= '<li>Jahr: ' . $year[$activei] . '</li>'; $infofield .= '<li>Kommentar: ' . $comment[$activei] . '</li>'; $infofield .= '</ul>'; /* die Linkliste generieren */ for ($i = 1; $i <= count($url); $i++) { $aufruf .= '<li><a href="?titel=' . $i . '"> ' . $title[$i - 1] . ' - ' . $artist[$i - 1]; if ($titel == $url[$i - 1]) { $aufruf .= "<span class='star'> ✔︎</span>"; } $aufruf .= "</a></li>\n"; $direktlink .= '<li><a style="color:#000" href="'.$url[$i-1].'"> '.$title[$i-1].'</a>'; $direktlink .= '</li>'; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> <link rel="stylesheet" type="text/css" media="screen" href="S-Test_css/audiotest.css" /> <title>HTML5 Audio und Radio Player</title> <!-- <script src="modernizr.custom.29132.js"></script> --> <?php if(isIOS()) { echo ' <style> #player {background: #e1e1e1;border: 2px solid #aaa;} li a {color:#000 !important;} li {border-top: 1px solid #aaa} audio {margin: 10px 0 5px 0} </style> '; } ?> </head> <body onload="Lautstaerke()"> <!-- <h2>HTML5 Audio- und Radio-Player</h2> --> <div id="h2"></div> <script> if (top.location == self.location) { // Seite in einem Frame geladen document.getElementById('h2').innerHTML='<h1>HTML5 Audio- und Radio-Player</h1>'; } </script> <div id="ie_fallback"></div> <div id="player"> <div id="mp3infos"><?php echo $infofield; ?></div> <!-- erstaunlich: ohne <source> tag gehts auch mit VO auf iOS --> <audio id="innerplayer" src="<?php echo $titel; ?>" controls <?php echo $autoplay; ?>></audio> <ul> <?php echo $aufruf; ?> </ul> </div> <div id="down_hinweis"></div> <!-- <p id="gemafrei" class="bem">Gemafreie Demo-mp3: <a href="http://www.MP3-GEMA-frei.de">MP3-GEMA-frei.de</a></p> --> <?php $neuer_titel = 0; if (isset($_REQUEST['titel'])) {$neuer_titel=1;} ?> <script> // if (!Modernizr.audio.mp3) { // document.getElementById('player').style.display = 'none'; // document.getElementById('ie_fallback').innerHTML='<p>Ihr Browser kann leider keine Audios im MP3-Format abspielen. Das tut uns leid. <br />Ersatzweise hier die Links zum Abspielen in einem installierten Player oder zum Download (rechte Maustaste).</p> <ul><?php echo $direktlink; ?></ul>'; // } /* Damit Screen Reader Ausgaben nicht uebertoent werden: */ function Lautstaerke() { document.getElementById("innerplayer").volume=0.7; /* Fokus auf Player setzen nach Anwahl */ var neu = <?php echo $neuer_titel; ?>; if ( neu === 1 ) { document.getElementById('innerplayer').focus(); } } </script> </body> </html> -
Zitat
Bei mir sollen ja "nur" 8 Tags pro mp3 ausgelesen werden.
Diese Zeile im PHP:
liest alle Tags aus. Welche man dann verwendet, spielt keine Rolle.ZitatLasse Dich nicht irritieren: Es ist exakt der html5-List-Player von dem Herrn Weisshart > erl ässt sich via CSS anders layouten! Das habe ich gemacht.
Man kann das Umfeld des Player layouten, aber der Player selbst mit seinen Controls sieht in jedem Browser anders aus. Das Layout in deiner Grafik ist das von Firefox. Probiere es mal mit einem anderen Browser!
Aber wir können das erst Mal zurück stellen.Was das Laden betrifft, habe ich es gerade mit deiner Testseite ausprobiert und diese lädt wirklich sehr schnell. Wenn das so ist, können wir das Neuladen wahrscheinlich akzeptieren und ich werde jetzt mit dem Einfüge der Tags in den Kopf weiter machen.