2009-11-30 8 views
6

Ich versuche, eine Imagemap auf Fenstergrößenänderungsereignis zu ändern. Das nächste, was ich bekommen habe, ist ein Mausklick-Event, aber es muss Fenstergröße für das, was ich mache, sein. Ich benutze Firefox 3.5.5Größe der Imagemap bei Fenstergrößenänderung

Ich benutze jquery etwas. Hier ist mein Beispiel - der Bereich Taste I auf Fenster Größe ändern, um die Größe will in der oberen linken Seite (Klick auf dem Stadtplan und Knopf, um die Größe):

http://www.whitebrickstudios.com/foghornstour/imagemap3.html

Jede mögliche Hilfe würde geschätzt! Danke, Rich-

+0

Sie haben vielleicht einen Tippfehler in 'imageMapResize'. Du sagst 'scaleXY ('theMap'', wenn ich denke, dass du' scaleXY' meinst? –

+0

https://github.com/davidjbradshaw/image-map-resizer – Blazemonger

Antwort

-1

eine Funktion aufzurufen, wenn das Fenster verkleinert wird, versuchen Sie Folgendes:

$(window).bind('resize', function() { 
    // resize the button here 
}); 

Auch Linie 37 ist ein Dollarzeichen fehlt:

scaleXY('theMap',(window).width()); 

Es sollte be:

scaleXY('theMap',$(window).width()); 
+2

Obwohl du die Wahrheit sagst, macht das OP das schon wenn Sie sich die Mühe gemacht haben, den Code zu lesen –

+0

So funktioniert es, aber ich muss Firefox 6 mal anpassen, damit es funktioniert IE ist ein Durcheinander. Ich habe diese Änderungen vorgenommen. Das ist hilfreich, aber es sieht so aus, als ob Firefox und vor allem IE zu viele Probleme mit der Größenanpassung hätten. Ich denke jetzt, dass ich bei meinem ursprünglichen Plan bleibe und nur halbgenau positionierte divs benutze, um die Bildkartenknöpfe zu ersetzen. Verdammt. Ich werde darüber nachdenken, und wenn ich jemals kommen und antworten werde ich es posten. Danke für Ihre Hilfe Jungs. – Kozy

+0

Hier ist der Link: http://www.whitebrickstudios.com/foghornstour/imagemap3.html – Kozy

-1

Wenn Sie nur die Größe ändern müssen Alter, verwenden Sie diese Technik: http://www.cssplay.co.uk/layouts/background.html

Dank CSSPlay.

+2

Ich denke du verpasst den Punkt danigb. Ich möchte die Größe eines 'Imagemap-Bereichs' bei der Fenstergröße ändern. – Kozy

+0

Jetzt verstehe ich. In der Tat, ich habe Ihre URL geöffnet und es hat nicht funktioniert für mich (Chrom). Ich musste etwas Ähnliches tun und ich beendete divs anstelle von Imagemaps und setzte die Position: absolut; und oben, links, Breite und Höhe in% Einheiten. Wenn du was ich kann ein bisschen mehr erklären. cheers dani – danigb

+0

Hey Danigb, ich landete mit divs auch Bilder mit% s zu positionieren. Obwohl es immer noch cool wäre, Image Maps in einer zukünftigen Version zu verwenden. Das habe ich bisher für Imagemaps. http://home.comcast.net/~urbanjost/IMG/resizeimg4.html – Kozy

1

Ich denke, was Sie wollen, ist bei http://home.comcast.net/~urbanjost/semaphore.html

, wo ich verschiedene Beispiele zeigen, wie Ihr Bild Kartenkoordinaten ändern, wenn der Bildanzeigegröße Änderungen vorzunehmen.

+0

Ich habe tatsächlich einige von der Code in diesen Beispielen. Das Problem, auf das ich stieß, war, dass, obwohl die Imagemap die Größe für Ereignisse wie "Klick" änderte, sie nicht auf 'Fenstergröße' anpassen würde. - Nun, es muss nur die Größe des Browsers 6 mal geändert werden es funktioniert. Ich benutze FF 3.5 Sorry mein Link ging Pleite, es ist jetzt behoben: http://www.whitebrickstudios.com/foghornstour/imagemap3.html Ich habe mich entschieden, divs von% s positioniert, aber es ' Es ist wirklich cool, dass das eines Tages klappt. – Kozy

1

Dies ist ein alter Thread, aber für alle, die nach einer Lösung für ein ähnliches oder sogar identisches Problem suchen, scheint die ImageMapster jQuery Plugin die einfachste Lösung zu bieten. Sie können seine Größe ändern Methode verwenden (was auch die Größe neu bestimmen animieren können, falls gewünscht!) Ein Bild, um die Größe zusammen mit seinem Bild Karte folgt:

$('img').mapster('resize', newWidth, newHeight, resizeTime); 

Sie einen Link auf ImageMapster's demo Seite ein jsFiddle that demonstrates resizing ein Bild finden & seine Karte als Reaktion auf das Ändern des Browserfensters.

3

Ich schrieb eine einfache Funktion, um alle Kartenpunkte bei jedem Ereignis neu zu erstellen. Versuchen Sie dies

function mapRebuild(scaleValue) { 
    var map = $("#imgmap"); // select your map or for all map you can choose $("map").each(function() { map = $(this);.....}) 
    map.find("area").each(function() { // select all areas 
     var coords = $(this).attr("coords"); // extract coords 
      coords = coords.split(","); // split to array 
     var scaledCoords = ""; 
     for (var coord in coords) { // rebuild all coords with scaleValue 
       scaledCoords += Math.floor(coords[coord] * scaleValue) + ","; 
      } 
     scaledCoords = scaledCoords.slice(0, -1); // last coma delete 
     $(this).attr("coords", scaledCoords); // set new coords 
     }); 
    } 

scaleValue kann als oldWindowWidth/newWindowWidth berechnet werden. Natürlich müssen Sie den Wert von oldWindowWidth bei der Fenstergrößenanpassung beibehalten. Vielleicht meine Lösung nicht pünktlich, aber ich hoffe, dass dies für jemanden nützlich ist

+1

+1 Ich benutze diese Funktion, funktioniert wie ein Zauber. Aber ich habe 'img.width/img.naturalWidth' anstelle der Fensterbreite verwendet. So musste ich keine zusätzlichen Ränder, Ränder, Polsterungen etc. berücksichtigen. –

+1

Ich habe dies in eine kleine Lib erweitert, die die Map funktioniert, wenn das Bild in der Größe verändert wird und auch mit X und Y mit unterschiedlicher Skalierung zurechtkommt. Es berechnet auch die Skalierungswerte für Sie. https://github.com/davidjbradshaw/imagemap-resizer –

0

Als eine modifizierte Version von Viktors Antwort kann diese Version mehrere Größenänderungen behandeln. Es speichert die Anfangswerte für den Vergleich mit zukünftigen Größenänderungen. Dies verwendet auch waitForFinalEvent, so dass es bei der Größenänderung nicht über und über läuft.



    var mapImg = $('#mapImg'); 
    var naturalWidth = 1200; // set manually to avoid ie8 issues 
    var baseAreas = new Array(); 
    var scaleValue = mapImg.width()/naturalWidth; 

    $(window).resize(function() { 
     waitForFinalEvent(function() { 
      scaleValue = mapImg.width()/naturalWidth; 
      mapRebuild(scaleValue); 
     }, 500, 'resize-window'); 
    }); 

    function mapRebuild(scaleValue) { 
     var map = $("#imgMap"); 
     var mapareas = map.find('area'); 
     if (baseAreas.length == 0) { 
      mapareas.each(function() { 
       baseAreas.push($(this).attr('coords')); // set initial values 
      }); 
     } 
     mapareas.each(function(index) { 
      var coords = baseAreas[index]; // use the corresponding base coordinates   
      coords = coords.split(',');  
      var scaledCoords = ''; 
      for (var coord in coords) { 
       scaledCoords += Math.floor(coords[coord] * scaleValue) + ','; 
      } 
      scaledCoords = scaledCoords.slice(0, -1); 
      $(this).attr('coords', scaledCoords); 
     }); 
    } 

    mapRebuild(scaleValue); // initial scale