'होम' बटन पत्रक मानचित्र


11

क्या मेरे कैटलॉग मानचित्र पर एक प्रकार का होम बटन होने की संभावना है जो क्रमशः मेरे प्रारंभिक मानचित्र दृश्य या एक विशिष्ट परिभाषित स्थिति पर ज़ूम करेगा?

जवाबों:


17

निम्नलिखित एक होम मैप के साथ एक कस्टम ज़ूम कंट्रोल को एक जर्सी मैप के साथ जोड़ देगा। होम आइकन फ़ॉन्ट-कमाल से है , इसलिए उस संदर्भ को शामिल करना सुनिश्चित करें।

यहां काम कर रहे बेला ।

एचटीएमएल:

<html>
<head>
    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
</head>
<body>
    <div id="map"></div>
    <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
    <link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">

सीएसएस:

#map { height: 340px; }
.leaflet-bar a { background-color: #fff; border-bottom: 1px solid #ccc; color: #444; display: block; height: 26px; width: 26px; line-height: 1.45 !important; text-align: center; text-decoration: none; font: bold 18px 'Lucida Console', Monaco, monospace; }

जावास्क्रिप्ट:

var lat = 51.505;
var lng = -0.09;
var zoom = 12;

// set up the map and remove the default zoomControl
var map = L.map('map', {
    zoomControl: false
});

map.setView([lat, lng], zoom);
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    maxZoom: 18
}).addTo(map);

// custom zoom bar control that includes a Zoom Home function
L.Control.zoomHome = L.Control.extend({
    options: {
        position: 'topright',
        zoomInText: '+',
        zoomInTitle: 'Zoom in',
        zoomOutText: '-',
        zoomOutTitle: 'Zoom out',
        zoomHomeText: '<i class="fa fa-home" style="line-height:1.65;"></i>',
        zoomHomeTitle: 'Zoom home'
    },

    onAdd: function (map) {
        var controlName = 'gin-control-zoom',
            container = L.DomUtil.create('div', controlName + ' leaflet-bar'),
            options = this.options;

        this._zoomInButton = this._createButton(options.zoomInText, options.zoomInTitle,
        controlName + '-in', container, this._zoomIn);
        this._zoomHomeButton = this._createButton(options.zoomHomeText, options.zoomHomeTitle,
        controlName + '-home', container, this._zoomHome);
        this._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,
        controlName + '-out', container, this._zoomOut);

        this._updateDisabled();
        map.on('zoomend zoomlevelschange', this._updateDisabled, this);

        return container;
    },

    onRemove: function (map) {
        map.off('zoomend zoomlevelschange', this._updateDisabled, this);
    },

    _zoomIn: function (e) {
        this._map.zoomIn(e.shiftKey ? 3 : 1);
    },

    _zoomOut: function (e) {
        this._map.zoomOut(e.shiftKey ? 3 : 1);
    },

    _zoomHome: function (e) {
        map.setView([lat, lng], zoom);
    },

    _createButton: function (html, title, className, container, fn) {
        var link = L.DomUtil.create('a', className, container);
        link.innerHTML = html;
        link.href = '#';
        link.title = title;

        L.DomEvent.on(link, 'mousedown dblclick', L.DomEvent.stopPropagation)
            .on(link, 'click', L.DomEvent.stop)
            .on(link, 'click', fn, this)
            .on(link, 'click', this._refocusOnMap, this);

        return link;
    },

    _updateDisabled: function () {
        var map = this._map,
            className = 'leaflet-disabled';

        L.DomUtil.removeClass(this._zoomInButton, className);
        L.DomUtil.removeClass(this._zoomOutButton, className);

        if (map._zoom === map.getMinZoom()) {
            L.DomUtil.addClass(this._zoomOutButton, className);
        }
        if (map._zoom === map.getMaxZoom()) {
            L.DomUtil.addClass(this._zoomInButton, className);
        }
    }
});
// add the new control to the map
var zoomHome = new L.Control.zoomHome();
zoomHome.addTo(map);

बहुत बढ़िया! यह चारपाई की तरह काम करता है! आपका बहुत बहुत धन्यवाद!
hoge6b01

+1 शांत उदाहरण के लिए यह दर्शाता है कि Control.Zoom
-४२ में USC

4
मैं यह अच्छा में कोड का टुकड़ा नहीं कर देते प्लगइन एक पत्रक यह और भी उपयोग करने के लिए आसान बनाने के लिए। धन्यवाद, टोम्स!
फ्लोरियन ब्रूकर

@toms आपके कोड से निर्मित कैटलॉग प्लगइन वर्तमान में आपके मूल कोड की तरह CC-BY-SA के तहत लाइसेंस प्राप्त है । हालाँकि, CC-BY-SA वास्तव में सॉफ़्टवेयर के लिए अनुकूल नहीं है , इसलिए मैं प्लगइन का लाइसेंस MIT में बदलना चाहूंगा । इसके लिए मुझे मूल कोड के लेखक के रूप में आपकी अनुमति की आवश्यकता होगी। तुम इस से सहमत हो न?
फ्लोरियन ब्रूकर

लीफलेट के लिए अद्यतन लिंक के साथ नई बेला: jsfiddle.net/pqfche83/1
टिक्की

7

USC.EasyButton के साथ , चीजें बहुत साफ रहती हैं: अपने आइकन और फ़ंक्शन का नाम (यदि आप चाहते हैं तो होवर टेक्स्ट):

var home = {
  lat: 70.3,
  lng: 50.5,
  zoom: 8
}; 

L.easyButton('fa-home',function(btn,map){
  map.setView([home.lat, home.lng], home.zoom);
},'Zoom To Home').addTo(map);

(एक तरफ) और easyButton के साथ toms द्वारा ज़ूम उदाहरण का जवाब:

// make a bar with the buttons
var zoomBar = L.easyBar([
  L.easyButton( '<big>+</big>',  function(control, map){map.setZoom(map.getZoom()+1);}),
  L.easyButton( 'fa-home fa-lg', function(control, map){map.setView([home.lat, home.lng], home.zoom);})
  L.easyButton( '<big>-</big>',  function(control, map){map.setZoom(map.getZoom()-1);}),
]);

// add it to the map
zoomBar.addTo(map);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.