2013-08-06 18 views
6

Ich versuche MapBox auf einem Layout zu implementieren, das 100% der Seite ausfüllt. Ich habe die Kartenzoomoptionen deaktiviert, aber die Probleme treten auf, wenn versucht wird, auf Touch-Geräten zu scrollen, wenn die Karte das Ansichtsfenster ausfüllt. Kann ich das überschreiben oder den Browser wie ein Bild behandeln lassen?MapBox Scrollseite bei Berührung

Antwort

2

Dieses Beispiel wurde verbessert: die Linie, ist fehlte:

if (map.tap) map.tap.disable();

Dies wird die Karte von der Tötung tap Ereignisse auf Touch-Geräten verhindern.

+0

Dieser "deaktiviert den Tipphandler" wie in [docs] beschrieben (https://www.mapbox.com/mapbox.js/example/v1.0.0/disable-zooming-panning/) - deaktiviert nicht das Ziehen der Karte Auf Touch-Geräten fragt das OP nach – squarecandy

2

Entfernen Sie den Rest der Listener as in this example - die, die Sie wahrscheinlich noch haben, ist dragging.

4

Ja, können Sie die MapBox Zuhörer verhindert Standardaktionen stoppen, indem die Flügelfunktion Einstellung nichts zu tun:

L.DomEvent.preventDefault = function(e) {return;} 

den Umriss um das Element durch den Browser platziert zu entfernen, die sonst verhindert worden wäre, Sie können hinzufügen:

*:focus { 
    outline: none; 
    -webkit-tap-highlight-color: rgba(255, 255, 255, 0); 
    -webkit-focus-ring-color: rgba(255, 255, 255, 0) !important; 
} 

Dies erlaubt Scrollen auf Touch-Geräten für mich, obwohl ich nur auf Android getestet habe. Beachten Sie, dass dies andere Auswirkungen auf Ihre Anwendung haben kann - diese könnten möglicherweise verhindert werden, indem Sie mapbox.js aufrufen und diesen Aufruf nur von den Listenern entfernen, die Sie benötigen.

+0

Großartig! Dies funktionierte gut für mich aber ein anderer Benutzer auf dem iPad hat jetzt Probleme beim Tippen auf Tooltip Icons. Sie bleiben nicht geöffnet, wenn ich kein alert() click -Ereignis hinzufüge. Ich bin auf einem Weg stecken, um das zu beheben. – devlondoner

+0

Das scheint extrem schwerfällig. Sie attackieren grundsätzlich alle Funktionen auf der Karte. Es gibt Optionen, um jedes Element zu steuern, das Sie deaktivieren möchten, während die anderen funktionsfähig bleiben. – squarecandy

0

Für jene, die dynamisch möchten aktivieren/deaktivieren Karte Feld Scrollen/Zoomen usw. je nach Seitengröße (wie ich), können Sie versuchen:

$(document).ready(function() { 
    $(window).on('resize', updateMap); 
}); 

function updateMap() { 
    var width = $(window).width(); 
    if (width < 768) { 
    map.scrollWheelZoom.disable(); 
    map.doubleClickZoom.disable(); 
    map.dragging.disable(); 
    if (map.tap) map.tap.disable(); 
    } 
    else { 
    map.scrollWheelZoom.enable(); 
    map.doubleClickZoom.enable(); 
    map.dragging.enable(); 
    if (map.tap) map.tap.enable(); 
    } 
} 

768 Ersetzen durch die entsprechende magische Zahl für Ihr Layout. Nimmt jQuery an.

1

try

if (map.tap) map.dragging.disable(); 
0

Das Problem mit den dragging Parametern in MapBox Zugabe ist, dass es steuert sowohl die Click-and-hold mit einer Maus oder einem anderen Zeigegerät und der streichende Bewegung drag touch ziehen. Nicht sicher, dass eine der anderen Antworten dies als das Hauptproblem erklärt. Das Herz des Problems, von dem ich denke, dass das OP daraus besteht, ist, dass wir alle das Klick-Ziehen mögen und denken, es ist einfach zu benutzen, aber wir mögen das Touch-Dragging nicht, weil es die Fähigkeit stört scrollen Sie die gesamte Seite.

Dies ist die Codezeile, die ich verwendet habe. Es hängt von Modernizr und jQuery ab, aber Sie könnten etwas ähnliches ohne sie schreiben, wenn Sie es brauchen.

// disable dragging the map on touch devices only 
if ($('html').hasClass('touch')) map.dragging.disable(); 
Verwandte Themen