From 97b43a3e9882725b7c2691bb06e5e4bf9c2d6a71 Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Wed, 25 Jul 2012 18:51:38 +0300 Subject: [PATCH] update mobile example --- _layouts/default.html | 8 +++- examples/mobile-example.html | 29 +++++++-------- examples/mobile.html | 51 +++++++++++++------------- examples/mobile.md | 71 ++++++++++++++++++++++++++++++++++++ 4 files changed, 116 insertions(+), 43 deletions(-) create mode 100644 examples/mobile.md diff --git a/_layouts/default.html b/_layouts/default.html index 4d069679..69a6eea2 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -135,11 +135,15 @@ hljs.tabReplace = ' '; (function () { - var codes = document.getElementsByTagName('code'); + var codes = document.getElementsByTagName('code'), + parentClass; for (var i = 0, len = codes.length; i < len; i++) { if (!codes[i].className) { - if (codes[i].innerHTML.match(/^\s*</)) { + parentClass = codes[i].parentNode.className; + if (parentClass) { + codes[i].className = parentClass; + } else if (codes[i].innerHTML.match(/^\s*</)) { codes[i].className = 'xml'; } else { codes[i].className = 'javascript'; diff --git a/examples/mobile-example.html b/examples/mobile-example.html index 345f0b7f..d00b0b51 100644 --- a/examples/mobile-example.html +++ b/examples/mobile-example.html @@ -24,33 +24,30 @@
diff --git a/examples/mobile.html b/examples/mobile.html index ef7f0675..3dcf96c7 100644 --- a/examples/mobile.html +++ b/examples/mobile.html @@ -7,11 +7,11 @@ title: Leaflet on Mobile

In this example, you'll learn how to create a fullscreen map tuned for mobile devices like iPhone, iPad or Android phones, and how to easily detect and use the current user location.

-

View example →

+

View example in fullscreen →

Preparing the page

-

First we'll take a look at the HTML & CSS code of the page. To make our map div element stretch to all available space (fullscreen), we can use the following CSS code:

+

First we'll take a look at the HTML & CSS code of the page. To make our map div element stretch to all available space (fullscreen), we can use the following CSS code:

body {
 	padding: 0;
@@ -21,7 +21,7 @@ html, body, #map {
 	height: 100%;
 }
-

Also, we need to tell the mobile browser to disable unwanted scaling of the page and set it to its actual size by placing the following line in the head section:

+

Also, we need to tell the mobile browser to disable unwanted scaling of the page and set it to its actual size by placing the following line in the head section or our HTML page:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
@@ -29,42 +29,43 @@ html, body, #map {

We'll now initialize the map in the JavaScript code exactly like we did in the quick start guide, but won't set the map view yet:

-
var map = new L.Map('map');
+
var map = L.map('map');
 
-var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/YOUR-API-KEY/997/256/{z}/{x}/{y}.png',
-	cloudmadeAttribution = 'Map data © 2011 OpenStreetMap contributors, Imagery © 2011 CloudMade',
-	cloudmade = new L.TileLayer(cloudmadeUrl, {maxZoom: 18, attribution: cloudmadeAttribution});
-
-map.addLayer(cloudmade);
+L.tileLayer('http://{s}.tile.cloudmade.com/API-key/997/256/{z}/{x}/{y}.png', { + attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>', + maxZoom: 18 +}).addTo(map);

Geolocation

-

Leaflet has a very handy shortcut for zooming the map view to the detected location — locateAndSetView method, replacing the usual setView method in the code:

+

Leaflet has a very handy shortcut for zooming the map view to the detected location — locate method with the setView option, replacing the usual setView method in the code:

-
map.locateAndSetView(16);
+
map.locate({setView: true, maxZoom: 16});
-

Here we specify 16 as the maximum zoom when setting the map view automatically. Now we have a working fullscreen mobile map! But what if we need to do something after the geolocation completed? Here's what the locationfound and locationerror events are for. Let's for example add a marker in the detected location, showing accuracy in a popup, by adding an event listener to locationfound event before the locateAndSetView call:

+

Here we specify 16 as the maximum zoom when setting the map view automatically. As soon as the user agrees to share its location and it's detected by the browser, the map will set the view to it. Now we have a working fullscreen mobile map! But what if we need to do something after the geolocation completed? Here's what the locationfound and locationerror events are for. Let's for example add a marker in the detected location, showing accuracy in a popup, by adding an event listener to locationfound event before the locateAndSetView call:

-
map.on('locationfound', onLocationFound);
-
-function onLocationFound(e) {
+
function onLocationFound(e) {
 	var radius = e.accuracy / 2;
 
-	var marker = new L.Marker(e.latlng);
-	map.addLayer(marker);
-	marker.bindPopup("You are within " + radius + " meters from this point").openPopup();
+	L.marker(e.latlng).addTo(map)
+		.bindPopup("You are within " + radius + " meters from this point").openPopup();
 
-	var circle = new L.Circle(e.latlng, radius);
-	map.addLayer(circle);
-}
+ L.circle(e.latlng, radius).addTo(map); +} + +map.on('locationfound', onLocationFound); +

Excellent! But it would also be nice to show an error message if the geolocation failed:

-
map.on('locationerror', onLocationError);
-
-function onLocationError(e) {
+
function onLocationError(e) {
 	alert(e.message);
-}
+} + +map.on('locationerror', onLocationError); +
+ +

If you have setView option set to true and the geolocation failed, it will set the view to the whole world.

Now the example is complete — try it on your mobile phone: View the full example →

diff --git a/examples/mobile.md b/examples/mobile.md new file mode 100644 index 00000000..045be095 --- /dev/null +++ b/examples/mobile.md @@ -0,0 +1,71 @@ +--- +layout: tutorial +title: Leaflet on Mobile +--- + +## Leaflet on Mobile + +In this example, you'll learn how to create a fullscreen map tuned for mobile devices like iPhone, iPad or Android phones, and how to easily detect and use the current user location. + +[View example in fullscreen →](mobile-example.html) + +### Preparing the page + +First we'll take a look at the HTML & CSS code of the page. To make our map `div` element stretch to all available space (fullscreen), we can use the following CSS code: + +{: .css} + body { + padding: 0; + margin: 0; + } + html, body, #map { + height: 100%; + } + +Also, we need to tell the mobile browser to disable unwanted scaling of the page and set it to its actual size by placing the following line in the `head` section or our HTML page: + + + +### Initializing the map + +We'll now initialize the map in the JavaScript code exactly like we did in the [quick start guide](quick-start.html), but won't set the map view yet: + +
var map = L.map('map');
+
+L.tileLayer('http://{s}.tile.cloudmade.com/API-key/997/256/{z}/{x}/{y}.png', {
+	attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>',
+	maxZoom: 18
+}).addTo(map);
+ +### Geolocation + +Leaflet has a very handy shortcut for zooming the map view to the detected location --- `locate` method with the `setView` option, replacing the usual `setView` method in the code: + + map.locate({setView: true, maxZoom: 16}); + +Here we specify 16 as the maximum zoom when setting the map view automatically. As soon as the user agrees to share its location and it's detected by the browser, the map will set the view to it. Now we have a working fullscreen mobile map! But what if we need to do something after the geolocation completed? Here's what the `locationfound` and `locationerror` events are for. Let's for example add a marker in the detected location, showing accuracy in a popup, by adding an event listener to `locationfound` event before the `locateAndSetView` call: + + function onLocationFound(e) { + var radius = e.accuracy / 2; + + L.marker(e.latlng).addTo(map) + .bindPopup("You are within " + radius + " meters from this point").openPopup(); + + L.circle(e.latlng, radius).addTo(map); + } + + map.on('locationfound', onLocationFound); + +Excellent! But it would also be nice to show an error message if the geolocation failed: + + function onLocationError(e) { + alert(e.message); + } + + map.on('locationerror', onLocationError); + +If you have `setView` option set to true and the geolocation failed, it will set the view to the whole world. + +Now the example is complete --- try it on your mobile phone: [View the full example →](mobile-example.html) + +Next steps would be to take a look at the detailed [documentation](../reference.html) and browse [other examples](../examples.html).