एम्बेडेड Google मानचित्र पर माउस स्क्रॉल व्हील ज़ूम अक्षम करें


198

मैं एक वर्डप्रेस साइट पर काम कर रहा हूं जहां लेखक आमतौर पर ज्यादातर पोस्टों में आईफ्रेम का उपयोग करके Google मैप्स को एम्बेड करते हैं।

क्या जावास्क्रिप्ट का उपयोग करके उन सभी पर माउस स्क्रॉल व्हील के माध्यम से ज़ूम को अक्षम करने का एक तरीका है?


32
सेट नक्शा विकल्प scrollwheelके लिए false
Anto Jurković

या इसे सीधे JS के माध्यम से अक्षम करें: map.disableScrollWheelZoom ();
Th3Alchemist

4
मुझे डर है कि तुम नहीं कर सकते। सुरक्षा-प्रतिबंधों के कारण मानचित्र में कोई स्क्रिप्टिंग-एक्सेस नहीं है, और AFAIK कोई भी URL-पैरामीटर उपलब्ध नहीं है जो आपको इसे अक्षम करने का विकल्प देता है।
डॉ। मोले

ठीक वैसी ही समस्या है। आइफ्रेम मानचित्र के साथ एम्बेड किए गए माउस स्क्रॉल इवेंट को अक्षम करना चाहते हैं। अभी तक नहीं मिला।
ग्रेज़गोरज़

7
यह एम्बेडेड मानचित्र है, यह सुनिश्चित नहीं है कि लोग
ज़ेंडरवार

जवाबों:


255

मुझे भी यही समस्या हो रही थी: जब पेज स्क्रॉल करना होता है तो पॉइंटर मैप के ऊपर हो जाता है, यह पेज को लगातार स्क्रॉल करने के बजाय मैप को ज़ूम इन / आउट करना शुरू कर देता है। :(

इसलिए मैंने इसे प्रत्येक gamp प्रविष्टि के ठीक पहले डालने के divसाथ हल किया , देखें:.overlayiframe

<html>
  <div class="overlay" onClick="style.pointerEvents='none'"></div>
  <iframe src="https://mapsengine.google.com/map/embed?mid=some_map_id" width="640" height="480"></iframe>
</html>

मेरे सीएसएस में मैंने कक्षा बनाई:

.overlay {
   background:transparent; 
   position:relative; 
   width:640px;
   height:480px; /* your iframe height */
   top:480px;  /* your iframe height */
   margin-top:-480px;  /* your iframe height */
}

Div नक्शे को कवर करेगा, सूचक घटनाओं को इसे प्राप्त करने से रोकता है। लेकिन अगर आप div पर क्लिक करते हैं, तो यह पॉइंटर घटनाओं के लिए पारदर्शी हो जाता है, जिससे मानचित्र फिर से सक्रिय हो जाता है!

मुझे आशा है कि आपकी मदद मिलेगी :)


9
यह एक बेहतरीन उपाय है। मेरे मामले में, मुझे z-indexइसके लिए सही तरीके से ओवरले करने के लिए एक निर्दिष्ट करना था , हालांकि।
RCNeil

1
IMO अभी तक इस समस्या का सबसे अच्छा समाधान है! हम लंबे समय से इस मुद्दे का सामना कर रहे हैं और यह एक अच्छा और सुंदर साफ पुन: प्रयोज्य तय करता है!
डिएगो पलाडिनो

11
इसे उत्तर के रूप में चिह्नित किया जाना चाहिए, हालांकि संभवतः ओवरले को एक मूल कंटेनर में तैनात करना आसान है और फिर केवल 100% ऊंचाई 100% की चौड़ाई, इसके लिए पृष्ठभूमि की संपत्ति की भी आवश्यकता नहीं है।
hcharge

3
मैंने इसे स्वचालित करने के लिए एक बहुत ही सरल jQuery प्लगइन बनाया है। इसे github.com/diazemiliano/mapScrollOff
एमिलियानो डिआज़

8
क्या इस समाधान का विस्तार करने का एक सीधा तरीका है ताकि स्क्रॉलव्हील घटनाओं को अनदेखा किया जाए, लेकिन बाएं क्लिक को अनदेखा नहीं किया जाता है? यह समाधान अच्छा है, लेकिन उपयोगकर्ताओं को नक्शे के शीर्ष पर "दिशा" हाइपरलिंक पर दो बार क्लिक करने की आवश्यकता होती है (एक बार डिव में घुसने के लिए और फिर फिर से हाइपरलिंक पर खुद क्लिक करने के लिए।)
jptsetme

136

मैंने इस चर्चा में पहला उत्तर देने की कोशिश की और यह मेरे लिए काम नहीं कर रहा था, चाहे मैंने जो भी किया हो, मैं अपने समाधान के साथ आया:

एक वर्ग के साथ iframe को लपेटें (इस उदाहरण में .maps) और आदर्श रूप से एम्बेड कोड: http://embedresponsively.com/ - iframe का CSS बदलें pointer-events: noneऔर फिर मूल तत्वों में jQuery के क्लिक फ़ंक्शन का उपयोग करके आप iframes css को बदल सकते हैं सेवाpointer-events:auto

एचटीएमएल

<div class='embed-container maps'>
    <iframe width='600' height='450' frameborder='0' src='http://foo.com'></iframe>
</div>

सीएसएस

.maps iframe{
    pointer-events: none;
}

jQuery

$('.maps').click(function () {
    $('.maps iframe').css("pointer-events", "auto");
});

$( ".maps" ).mouseleave(function() {
  $('.maps iframe').css("pointer-events", "none"); 
});

मुझे यकीन है कि ऐसा करने का केवल एक जावास्क्रिप्ट तरीका है, अगर कोई इस मुफ्त में जोड़ना चाहता है।

पॉइंटर-घटनाओं को पुन: सक्रिय करने का जावास्क्रिप्ट तरीका बहुत सरल है। बस iFrame (यानी "iframe") को एक आईडी दें, फिर संयोगवश एक घटना पर लागू करें:

onclick="document.getElementById('iframe').style.pointerEvents= 'auto'"

<div class="maps" onclick="document.getElementById('iframe').style.pointerEvents= 'auto'">
   <iframe id="iframe" src="" width="100%" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>

4
"बिना एपीआई" समाधान के लिए धन्यवाद। +1
गंभीर यातना

21
आप इसे अपने मूल राज्य में वापस लाने के लिए भी जोड़ सकते हैं जब माउस निकलता है: $ ('मैप्स')। मूसलीव (फ़ंक्शन () {$ ('मैप्स iframe')। css ("पॉइंटर-इवेंट्स", " कोई भी ");});
लुइस

5
बस एक नोट: pointer-events: noneमानचित्र के साथ किसी भी इंटरैक्शन को रोकना (खींचें, नेविगेशन, क्लिक, आदि)।
लुबरे

@LuBre हाँ, यह समझा जाता है, यही कारण है कि इसे ऑटो में बदलने के लिए jQuery क्लिक फ़ंक्शन है।
nathanielperales

1
बहुत बढ़िया जवाब! आप यह सुनिश्चित करना चाहते हैं कि आप सही नक्शे को सक्षम कर रहे हैं और सभी पेज पर नहीं$(this).find('iframe').css("pointer-events", "auto");
टॉम प्रट्स

54

मैंने @nathanielperales समाधान बढ़ाया।

व्यवहार विवरण के नीचे:

  • स्क्रॉल सक्षम करने के लिए मानचित्र पर क्लिक करें
  • जब माउस नक्शा छोड़ता है, तो स्क्रॉल को अक्षम करें

जावास्क्रिप्ट कोड के नीचे:

// Disable scroll zooming and bind back the click event
var onMapMouseleaveHandler = function (event) {
  var that = $(this);

  that.on('click', onMapClickHandler);
  that.off('mouseleave', onMapMouseleaveHandler);
  that.find('iframe').css("pointer-events", "none");
}

var onMapClickHandler = function (event) {
  var that = $(this);

  // Disable the click handler until the user leaves the map area
  that.off('click', onMapClickHandler);

  // Enable scrolling zoom
  that.find('iframe').css("pointer-events", "auto");

  // Handle the mouse leave event
  that.on('mouseleave', onMapMouseleaveHandler);
}

// Enable map zooming with mouse scroll when the user clicks the map
$('.maps.embed-container').on('click', onMapClickHandler);

और यहाँ एक jsFiddle उदाहरण है


1
इसके लिए आपका धन्यवाद। मैंने इसे अंत में निम्नलिखित जोड़ के साथ इस्तेमाल किया:$('.maps.embed-container').find('iframe').css("pointer-events", "none");
lhermann

कोड के लिए धन्यवाद। यह वास्तव में मेरे पास एक अलग समस्या थी। मैंने Google स्प्रेडशीट से कुछ चार्ट एम्बेड किए और माउस व्हील के साथ स्क्रॉल करने से किसी कारण से पूरे पृष्ठ के लिए काम करना बंद कर दिया। आपके कोड ने इसे माउस व्हील के साथ फिर से स्क्रॉल किया। एक बार फिर धन्यवाद।
स्कॉट एम। स्टोलज़

31

मैं #nathanielperales द्वारा लिखे गए कोड को फिर से संपादित कर रहा हूं जो वास्तव में मेरे लिए काम करता है। सरल और पकड़ने में आसान लेकिन इसका काम केवल एक बार। इसलिए मैंने जावास्क्रिप्ट पर mouseleave () जोड़ा। Idea #Bogdan से अनुकूलित हुआ और अब इसका आदर्श है। इसे इस्तेमाल करे। क्रेडिट्स #nathanielperales और #Bogdan को जाता है। मैंने अभी दोनों के विचार को संयुक्त किया है। आप लोगों को धन्यवाद। मुझे उम्मीद है कि इससे दूसरों को भी मदद मिलेगी ...

एचटीएमएल

<div class='embed-container maps'>
    <iframe width='600' height='450' frameborder='0' src='http://foo.com'>  </iframe>
</div>

सीएसएस

.maps iframe{
    pointer-events: none;
}

jQuery

$('.maps').click(function () {
    $('.maps iframe').css("pointer-events", "auto");
});

$( ".maps" ).mouseleave(function() {
  $('.maps iframe').css("pointer-events", "none"); 
});

तात्कालिक व्यवस्था करें, उसे अपनाएं और उससे उभरें

और यहाँ एक jsFiddle उदाहरण है।


1
सबसे साफ समाधान। अच्छा! लेकिन सभी समाधानों में एक समस्या है: उपयोगकर्ताओं को दो बार मानचित्र पर क्लिक करना होगा। तुरंत क्लिक के माध्यम से कैसे गुजर सकता है, इसलिए यह केवल एक क्लिक लेता है?
लोरेन

1
हो सकता है कि आप pointer-events: autoमाउस को एक निश्चित अवधि के लिए नक्शे पर "मँडरा" करने के बाद ही स्विच पर क्लिक करने से बच सकें ? जब माउस आईफ्रेम में प्रवेश करता है और माउस से निकलने पर इसे रीसेट करता है। यदि टाइमर एक्स मिलीसेकंड पर जाता है, तो स्विच करें pointer-events: auto। और जब भी माउस आइफ्रेम छोड़ता है तो आप वापस स्विच करते हैं pointer-events: none
स्टुकैम्पबेल

मैं क्लिक के बजाय dblclick का उपयोग करना पसंद करता हूं, वैसे भी अच्छा समाधान।
मोक्सैट खान

25

हाँ, यह काफी आसान है। मैंने एक ऐसी ही समस्या का सामना किया। बस iframe div में css प्रॉपर्टी "पॉइंटर-ईवेंट" जोड़ें और इसे 'कोई नहीं' पर सेट करें ।

उदाहरण: <iframe style = "पॉइंटर-ईवेंट: कोई नहीं" src = ........>

साइडनोट: यह फिक्स मैप पर अन्य सभी माउस ईवेंट को अक्षम कर देगा। यह मेरे लिए तब से काम कर रहा है जब हमें मानचित्र पर किसी भी उपयोगकर्ता सहभागिता की आवश्यकता नहीं थी।


20
क्यों नहीं बस एक छवि का उपयोग करें? आप सभी को अक्षम करने के लिए बहुत सारी अतिरिक्त संपत्ति लोड कर रहे हैं।
डेवडीब

2
हां, लेकिन मैं विगेट्स पर क्लिक नहीं कर सकता
जेफरी निकोल्सन कैरे

1
कृपया ध्यान दें कि यह IE <11 पर काम नहीं करेगा - caniuse.com/#search=pointer-events
NotLizards

@deweydb - क्या यह अवैध नहीं है?
मैट सॉन्डर्स

@MattSaunders को यकीन नहीं था कि अगर इस समय ऐसा होता, लेकिन अब है। आप Google API से एक स्थिर मानचित्र छवि को सीधे लोड कर सकते हैं, शायद यही डेवीडब सुझाव दे रहा था? निश्चित रूप से समस्या के आसपास एक संभव तरीका होगा।
अजर्याह

19
var mapOptions = {
   scrollwheel: false,
   center: latlng,
   mapTypeId: google.maps.MapTypeId.ROADMAP
};

13

कुछ शोध करने के बाद आपके पास 2 विकल्प हैं। नए मानचित्रों के बाद से iframe एम्बेड के साथ api mousewheel को अक्षम करने का समर्थन नहीं करता है।

पहले पुराने गूगल मैप्स ( https://support.google.com/maps/answer/3045828?hl=en ) का उपयोग किया जाएगा ।

दूसरा प्रत्येक टिप्पणी के लिए एक मानचित्र के एम्बेडिंग को आसान बनाने और मापदंडों का उपयोग करने के लिए एक जावास्क्रिप्ट फ़ंक्शन का निर्माण किया जाएगा (यह केवल सही स्थान न दिखाने के लिए नमूना कोड है)

function createMap(containerid, parameters) {
  var mymap = document.getElementById(containerid),
  map_options = {
    zoom: 13,
    scrollwheel: false,
    /* rest of options */
  },
  map = new google.maps.Map(mymap, map_options);

  /* 'rest of code' to take parameters into account */
}

8

एक भयानक और आसान समाधान है।

आपको अपनी सीएसएस में एक कस्टम क्लास जोड़ने की जरूरत है जो कि पॉइंटर घटनाओं को कैनवस को मैप करने के लिए सेट करता है:

.scrolloff{
   pointer-events: none;
}

फिर, jQuery के साथ, आप विभिन्न घटनाओं के आधार पर उस वर्ग को जोड़ और हटा सकते हैं, उदाहरण के लिए:

    $( document ).ready(function() {

    // you want to enable the pointer events only on click;

        $('#map_canvas').addClass('scrolloff'); // set the pointer events to none on doc ready
        $('#canvas').on('click', function() {
            $('#map_canvas').removeClass('scrolloff'); // set the pointer events true on click
        });

    // you want to disable pointer events when the mouse leave the canvas area;

     $( "#map_canvas" ).mouseleave(function() {
          $('#map_canvas').addClass('scrolloff'); // set the pointer events to none when mouse leaves the map area
     });    
});

मैंने jsfiddle में एक उदाहरण बनाया है , आशा है कि मदद करता है!


1
यह Google मैप्स एंबेड एपीआई के साथ भी काम करता है - बस map_canvas को आइफ्रेम के साथ बदलें। ध्यान दें कि क्लिक ईवेंट बाहरी तत्व पर है, लेकिन स्क्रॉलऑफ़ आंतरिक तत्व पर है (यह उत्तर / jsfiddle में सही है, बस मामले में आप कॉपी / पेस्ट करने के बजाय ट्रांसक्रिप्ट कर रहे हैं)
Jxtps

8

मैं सिर्फ Developers.google.com पर एक खाता पंजीकृत करता हूं और एक मैप्स एपीआई कॉल करने के लिए एक टोकन प्राप्त करता हूं , और बस इसे इस तरह अक्षम करें (स्क्रॉलव्हील: गलत):

    var map;
    function initMap() {
        map = new google.maps.Map(document.getElementById('container_google_maps'), {
            center: {lat: -34.397, lng: 150.644},
            zoom: 8,
            scrollwheel: false
        });
    }

JQuery के हैक की तुलना में बहुत बेहतर!
डेनियल किस-नागी

7

यह मेरा दृष्टिकोण है। मुझे विभिन्न वेबसाइटों पर लागू करना आसान है और हर समय इसका उपयोग करना आसान है

सीएसएस और जावास्क्रिप्ट:

<style type="text/css">
.scrolloff iframe   {
    pointer-events: none ;
}
</style>

<script type="text/javascript">
function scrollOn() {
    $('#map').removeClass('scrolloff'); // set the pointer events true on click

}

function scrollOff() {
    $('#map').addClass('scrolloff'); 

}
</script>

HTML में, आप iframe को div में लपेटना चाहेंगे। <div id="map" class="scrolloff" onclick="scrollOn()" onmouseleave="scrollOff()" >

function scrollOn() {
    $('#map').removeClass('scrolloff'); // set the pointer events true on click
   
}

function scrollOff() {
    $('#map').addClass('scrolloff'); // set the pointer events true on click
    
}
.scrolloff iframe   {
        pointer-events: none ;
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="map" class="scrolloff" onclick="scrollOn()" onmouseleave="scrollOff()" ><iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d23845.03946309692!2d-70.0451736316453!3d41.66373705082399!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x89fb159980380d21%3A0x78c040f807017e30!2sChatham+Tides!5e0!3m2!1sen!2sus!4v1452964723177" width="100%" height="450" frameborder="0" style="border:0" allowfullscreen></iframe></div>

आशा है कि यह किसी को भी एक सरल समाधान की तलाश में मदद करता है।


5

यहाँ एक सरल उपाय है। माउस स्क्रॉल को अक्षम pointer-events: noneकरने के <iframe>लिए बस CSS सेट करें।

<div id="gmap-holder">
    <iframe width="100%" height="400" frameborder="0" style="border:0; pointer-events:none"
            src="https://www.google.com/maps/embed/v1/place?q=XXX&key=YYY"></iframe>
</div>

यदि आप चाहते हैं कि जब उपयोगकर्ता मानचित्र में क्लिक करे तो माउस स्क्रॉल सक्रिय हो, तो निम्नलिखित जेएस कोड का उपयोग करें। यह माउस स्क्रॉल को फिर से अक्षम कर देगा, जब माउस मैप से बाहर चला जाएगा।

$(function() {
    $('#gmap-holder').click(function(e) {
        $(this).find('iframe').css('pointer-events', 'all');
    }).mouseleave(function(e) {
        $(this).find('iframe').css('pointer-events', 'none');
    });
})

!!! यह भी नोट करें, Imho पॉइंटर-ईवेंट्स अक्षम सभी इस ईफ्रेम के लिए ईवेंट के लिए क्लिक करें
स्टेफ़नफ्राइडिश 14

क्लिक इवेंट केवल iframe के लिए अक्षम हैं। लेकिन अगर आप JS कोड का उपयोग कर रहे हैं, जैसे ही माउस div.gmap- होल्डर में प्रवेश करता है, क्लिक इवेंट फिर से सक्रिय हो जाएगा।
manish_s

यह मेरे लिए शानदार ढंग से काम किया! अधिकांश समाधान वर्डप्रेस के साथ असंगत थे: ऑनक्लिक को स्क्रब किया जाता है, और कभी-कभी आइफ्रेम की चौड़ाई को सम्मानित नहीं किया जाता है, लेकिन यह एक आकर्षण की तरह काम करता है। जेएस कोड को दूर रखने के बाद, सभी को आईडी = "गैम-होल्डर" का संदर्भ देना होगा। उत्तम। धन्यवाद मनीष
usonianhorizon

4

एम्बेडेड Google मैप्स पर माउस स्क्रॉल व्हील जूम को अक्षम करने के लिए, आपको बस iframe की css प्रॉपर्टी पॉइंटर-ईवेंट को सेट करने की आवश्यकता है:

<style>
#googlemap iframe {
    pointer-events:none;
}
</style>

यह सब .. बहुत साफ है ना?

<div id="googlemap">
    <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3648.6714814904954!2d90.40069809681577!3d23.865796688563787!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3755c425897f1f09%3A0x2bdfa71343f07395!2sArcadia+Green+Point%2C+Rd+No.+16%2C+Dhaka+1230%2C+Bangladesh!5e0!3m2!1sen!2sin!4v1442184916780" width="400" height="300" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>

2
यह डबल क्लिक ज़ूम को भी निष्क्रिय कर देगा :)
w3debugger

इसके अलावा ज़ूम-इन, ज़ूम-आउट, निर्देश आदि को निष्क्रिय करता है
झंडेश्वर

4

खैर, मेरे लिए सबसे अच्छा समाधान बस इस तरह का उपयोग करना था:

HTML:

<div id="google-maps">
<iframe frameborder="0" height="450" src="***embed-map***"  width="100"</iframe>
</div>

सीएसएस:

#google-maps iframe { pointer-events:none; }

जे एस:

<script>
  $(function() {
    $('#google-maps').click(function(e) {
        $(this).find('iframe').css('pointer-events', 'auto');
    }).mouseleave(function(e) {
        $(this).find('iframe').css('pointer-events', 'none');
    });
  })
</script>

परिणाम

बातें:

सबसे अच्छा यह होगा कि एक टेक्स्ट के साथ गहरे पारदर्शिता के साथ एक ओवरले को जोड़ा जाए: माउस व्हील के डिएक्टिवेट होने पर " ब्राउज़ करने के लिए क्लिक करें " पर जब यह सक्रिय हो जाए (इसके बाद आप इस पर क्लिक करें) तब टेक्स्ट के साथ पारदर्शिता गायब हो जाएगी और उपयोगकर्ता ब्राउज़ कर सकता है उम्मीद के मुताबिक नक्शा। कोई सुराग कि कैसे करना है?


3

pointer-events:none;इस वर्किंग फाइन को शैली में जोड़ें

<iframe style="pointer-events:none;" src=""></iframe>

3

यह करने के लिए सबसे आसान तरीका है की तरह एक छद्म तत्व का उपयोग करना है :beforeया :after
इस पद्धति के लिए अतिरिक्त HTML तत्वों या jquery की आवश्यकता नहीं होगी।
अगर हमारे पास इस html संरचना के उदाहरण हैं:

<div class="map_wraper">

    <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d405689.7826944034!2d-122.04109805!3d37.40280355!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x808fb68ad0cfc739%3A0x7eb356b66bd4b50e!2sSilicon+Valley%2C+CA!5e0!3m2!1sen!2sro!4v1438864791455" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>

</div>

फिर हमें केवल इतना करना होगा कि हम उस छद्म तत्व के सापेक्ष आवरण बना लें जो हम स्क्रॉलिंग को रोकने के लिए बनाएंगे

.map_wraper{
    position:relative;
}

इसके बाद हम छद्म तत्व बनाएंगे जो स्क्रॉलिंग को रोकने के लिए नक्शे पर तैनात किया जाएगा:

.map_wraper:after{
    background: none;
    content: " ";
    display: inline-block;
    font-size: 0;
    height: 100%;
    left: 0;
    opacity: 0;
    position: absolute;
    top: 0;
    width: 100%;
    z-index: 9;
}

और आप कर रहे हैं, कोई jquery नहीं अतिरिक्त html तत्वों! यहाँ एक कार्यशील jsfiddle उदाहरण है: http://jsfiddle.net/e6j4Lbe1/


चतुर विचार। हालांकि, कुछ अन्य जवाबों की तरह, यह सब कुछ पर कब्जा कर लेता है, न कि केवल मौसमी घटनाओं को।
likeitlikeit

मुझे खुशी है कि इससे आपको मदद मिली!
आंद्रेई

3

यहाँ मेरा सरल उपाय है।

उदाहरण के लिए "मैप्स" नामक एक वर्ग के साथ एक div में अपना आइफ्रेम डालें।

यह आपके iframe का CSS होगा

.maps iframe { pointer-events: none }

और यहाँ एक छोटी सी जावास्क्रिप्ट है जो iframe की पॉइंटर-ईवेंट प्रॉपर्टी को "ऑटो" पर सेट कर देगी जब आप कम से कम 1 सेकंड के लिए div एलिमेंट को हॉवर करते हैं (मेरे लिए सबसे अच्छा काम करता है - जो भी आपको पसंद है उसे सेट करें) और टाइमआउट को क्लियर करें / माउस को तत्व छोड़ने पर इसे फिर से "कोई नहीं" पर सेट करें।

var maptimer;

$(".maps").hover(function(){
    maptimer = setTimeout(function(){
        $(".maps").find("iframe").css("pointer-events", "auto");
    },1000);
},function(){
    clearTimeout(maptimer);
    $(".maps").find("iframe").css("pointer-events", "none");
});

चीयर्स।


3

मैंने समस्या हल करने के लिए एक बहुत ही सरल jQuery प्लगइन बनाया है। इसे https://diazemiliano.github.io/googlemaps-scrollprevent पर देखें

(function() {
  $(function() {
    $("#btn-start").click(function() {
      $("iframe[src*='google.com/maps']").scrollprevent({
        printLog: true
      }).start();
      return $("#btn-stop").click(function() {
        return $("iframe[src*='google.com/maps']").scrollprevent().stop();
      });
    });
    return $("#btn-start").trigger("click");
  });
}).call(this);
Edit in JSFiddle Result JavaScript HTML CSS .embed-container {
  position: relative !important;
  padding-bottom: 56.25% !important;
  height: 0 !important;
  overflow: hidden !important;
  max-width: 100% !important;
}
.embed-container iframe {
  position: absolute !important;
  top: 0 !important;
  left: 0 !important;
  width: 100% !important;
  height: 100% !important;
}
.mapscroll-wrap {
  position: static !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/diazemiliano/googlemaps-scrollprevent/v.0.6.5/dist/googlemaps-scrollprevent.min.js"></script>
<div class="embed-container">
  <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d12087.746318586604!2d-71.64614110000001!3d-40.76341959999999!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x9610bf42e48faa93%3A0x205ebc786470b636!2sVilla+la+Angostura%2C+Neuqu%C3%A9n!5e0!3m2!1ses-419!2sar!4v1425058155802"
  width="400" height="300" frameborder="0" style="border:0"></iframe>
</div>
<p><a id="btn-start" href="#">"Start Scroll Prevent"</a>  <a id="btn-stop" href="#">"Stop Scroll Prevent"</a>
</p>


2

@Nathanielperales के उत्तर का उपयोग करते हुए मैंने अपने लिए हॉवर फ़ंक्शन कारण जोड़ा है जो उपयोगकर्ता द्वारा स्क्रॉलिंग को रोकने के लिए मानचित्र पर ध्यान केंद्रित करने पर बेहतर काम करता है :)

$(function(){
    $('.mapa').hover(function(){
        stopScroll();},
                     function () {
    $('.mapa iframe').css("pointer-events", "none");
    });
});

function stopScroll(){
$('.mapa').click(function () {
    $('.mapa iframe').css("pointer-events", "auto");
});
}

बात यह है कि हम नेविगेट फ़ंक्शन को ढीला करते हैं, मेरे लिए मोबाइल उपकरणों में बहुत महत्वपूर्ण है। मैंने एक बहुत ही सरल jQuery प्लगइन बनाया है जिसे आप चाहें तो संशोधित कर सकते हैं। इसे github.com/diazemiliano/mapScrollOff
एमिलियानो डिआज़

2

एक विषय पर बदलाव: jQuery के साथ एक सरल समाधान, कोई CSS संपादन की आवश्यकता नहीं है।

// make iframe active on click, disable on mouseleave
$('iframe.google_map').each( function(i, iframe) {
    $(iframe).parent().hover( // make inactive on hover
        function() { $(iframe).css('pointer-events', 'none');
    }).click( // activate on click
        function() { $(iframe).css('pointer-events', 'auto');
    }).trigger('mouseover'); // make it inactive by default as well
});

हॉवर श्रोता मूल तत्व से जुड़ा हुआ है, इसलिए यदि वर्तमान माता-पिता अधिक बड़ा है, तो आप बस 3rd लाइन से पहले एक div के साथ iframe को लपेट सकते हैं।

आशा है कि यह किसी के लिए उपयोगी होगा।


1

मैंने खुद इस मुद्दे पर ठोकर खाई और इस सवाल पर दो बहुत उपयोगी जवाबों के एक मैशअप का इस्तेमाल किया: czerasz का जवाब और मस्सा का जवाब।

उन दोनों में बहुत सच्चाई है, लेकिन कहीं न कहीं मेरे परीक्षणों में, मुझे पता चला कि किसी ने मोबाइल के लिए काम नहीं किया था और उसके पास IE का समर्थन नहीं था (केवल IE11 पर काम करता है)। यह nathanielperales द्वारा समाधान है, फिर czerasz द्वारा विस्तारित किया जाता है, जो पॉइंटर-ईवेंट सीएसएस पर निर्भर करता है और जो मोबाइल पर काम नहीं करता है (मोबाइल में कोई पॉइंटर नहीं है) और यह काम नहीं करता है IE के किसी भी संस्करण जो कि 11 नहीं है । आम तौर पर मैं कम देखभाल नहीं करता, लेकिन वहाँ उपयोगकर्ताओं की एक टन है और हम लगातार कार्यक्षमता चाहते हैं, इसलिए मैं ओवरले समाधान के साथ चला गया, एक रैपर का उपयोग करके कोड को आसान बनाने के लिए।

तो, मेरा मार्कअप इस तरह दिखता है:

<div class="map embed-container">
  <div id="map-notice" style="display: block;"> {Tell your users what to do!} </div>
  <div class="map-overlay" style="display: block;"></div>
  <iframe style="width:100%" src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d3785.684302567802!2d-66.15578327375803!3d18.40721382009222!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x8c036a35d02b013f%3A0x5962cad95b9ec7f8!2sPlaza+Del+Sol!5e0!3m2!1sen!2spr!4v1415284687548" width="633" height="461" frameborder="0"></iframe>
</div>

फिर शैलियों इस तरह हैं:

.map.embed-container {
  position:relative;
}

.map.embed-container #map-notice{
  position:absolute;
  right:0;
  top:0;
  background-color:rgb(100,100,100);/*for old IE browsers with no support for rgba()*/
  background-color: rgba(0,0,0,.50);
  color: #ccc;
  padding: 8px;
}
.map.embed-container .map-overlay{
  height:100%;
  width:100%;
  position:absolute;
  z-index:9999;
  background-color:rgba(0,0,0,0.10);/*should be transparent but this will help you see where the overlay is going in relation with the markup*/
}

अंत में स्क्रिप्ट:

//using jquery...
var onMapMouseleaveHandler = function (event) {
  $('#map-notice').fadeIn(500);
  var elemento = $$(this);
  elemento.on('click', onMapClickHandler);
  elemento.off('mouseleave', onMapMouseleaveHandler);
  $('.map-overlay').fadeIn(500);
}

var onMapClickHandler = function (event) {
  $('#map-notice').fadeOut(500);
  var elemento = $$(this);
  elemento.off('click', onMapClickHandler);
  $('.map-overlay').fadeOut(500);
  elemento.on('mouseleave', onMapMouseleaveHandler);
}
$('.map.embed-container').on('click', onMapClickHandler);

मैंने अपना परीक्षण समाधान एक GitHub gist में जोड़ा , अगर आपको वहां से सामान प्राप्त करना पसंद है ...


1

यह CSS और Javascript के साथ एक समाधान है (यानी। Jquery लेकिन शुद्ध जावास्क्रिप्ट के साथ भी काम करता है)। उसी समय नक्शा उत्तरदायी है। स्क्रॉल करते समय ज़ूम करने के लिए मैप से बचें, लेकिन इसमें क्लिक करके मैप को सक्रिय किया जा सकता है।

HTML / JQuery के जावास्क्रिप्ट

<div id="map" onclick="$('#googlemap').css('pointerEvents','auto'); return true;"> 
    <iframe id="googlemap" src="http://your-embed-url" height="350"></iframe>
</div>

सीएसएस

#map {
    position: relative; 
    padding-bottom: 36%; /* 16:9 ratio for responsive */ 
    height: 0; 
    overflow: hidden; 
    background:transparent; /* does the trick */
    z-index:98; /* does the trick */
}
#map iframe { 
    pointer-events:none; /* does the trick */
    position: absolute; 
    top: 0; 
    left: 0; 
    width: 100% !important; 
    height: 100% !important; 
    z-index:97; /* does the trick */
} 

मज़े करो !


1

Google मानचित्र v3 में अब आप स्क्रॉल को ज़ूम करने के लिए अक्षम कर सकते हैं, जिससे उपयोगकर्ता को बेहतर अनुभव प्राप्त होगा। अन्य मानचित्र फ़ंक्शंस अभी भी काम करेंगे और आपको अतिरिक्त divs की आवश्यकता नहीं है। मैंने यह भी सोचा कि उपयोगकर्ता के लिए कुछ प्रतिक्रिया होनी चाहिए ताकि वे स्क्रॉलिंग सक्षम होने पर देख सकें, इसलिए मैंने एक मानचित्र सीमा जोड़ी।

// map is the google maps object, '#map' is the jquery selector
preventAccidentalZoom(map, '#map'); 

// Disables and enables scroll to zoom as appropriate. Also
// gives the user a UI cue as to when scrolling is enabled.
function preventAccidentalZoom(map, mapSelector){
  var mapElement = $(mapSelector);

  // Disable the scroll wheel by default
  map.setOptions({ scrollwheel: false })

  // Enable scroll to zoom when there is a mouse down on the map.
  // This allows for a click and drag to also enable the map
  mapElement.on('mousedown', function () {
    map.setOptions({ scrollwheel: true });
    mapElement.css('border', '1px solid blue')
  });

  // Disable scroll to zoom when the mouse leaves the map.
  mapElement.mouseleave(function () {
    map.setOptions({ scrollwheel: false })
    mapElement.css('border', 'none')
  });
};

1

यह आपको एक उत्तरदायी Google मानचित्र देगा जो कि iframe पर स्क्रॉल करना बंद कर देगा, लेकिन एक बार क्लिक करने पर आपको ज़ूम करने देगा।

इसे अपने html में कॉपी और पेस्ट करें लेकिन iframe लिंक को अपने साथ बदलें। वह इस पर एक उदाहरण के साथ एक लेख है: एम्बेडेड गूगल मैप iframes पर माउस स्क्रॉल व्हील ज़ूम अक्षम करें

<style>
    .overlay {
    background:transparent;
    position:relative;
    width:100%; /* your iframe width */
    height:480px; /* your iframe height */
    top:480px; /* your iframe height */
    margin-top:-480px; /* your iframe height */
    }
</style>
<div class="overlay" onClick="style.pointerEvents='none'"></div>
<iframe src="https://mapsengine.google.com/map/embed?mid=some_map_id" width="100%" height="480"></iframe>

0

यहाँ मेरा दृष्टिकोण इस पर होगा।

इसे मेरे main.js या इसी तरह की फ़ाइल में पॉप करें:

// Create an array of styles.
var styles = [
                {
                    stylers: [
                        { saturation: -300 }

                    ]
                },{
                    featureType: 'road',
                    elementType: 'geometry',
                    stylers: [
                        { hue: "#16a085" },
                        { visibility: 'simplified' }
                    ]
                },{
                    featureType: 'road',
                    elementType: 'labels',
                    stylers: [
                        { visibility: 'off' }
                    ]
                }
              ],

                // Lagitute and longitude for your location goes here
               lat = -7.79722,
               lng = 110.36880,

              // Create a new StyledMapType object, passing it the array of styles,
              // as well as the name to be displayed on the map type control.
              customMap = new google.maps.StyledMapType(styles,
                  {name: 'Styled Map'}),

            // Create a map object, and include the MapTypeId to add
            // to the map type control.
              mapOptions = {
                  zoom: 12,
                scrollwheel: false,
                  center: new google.maps.LatLng( lat, lng ),
                  mapTypeControlOptions: {
                      mapTypeIds: [google.maps.MapTypeId.ROADMAP],

                  }
              },
              map = new google.maps.Map(document.getElementById('map'), mapOptions),
              myLatlng = new google.maps.LatLng( lat, lng ),

              marker = new google.maps.Marker({
                position: myLatlng,
                map: map,
                icon: "images/marker.png"
              });

              //Associate the styled map with the MapTypeId and set it to display.
              map.mapTypes.set('map_style', customMap);
              map.setMapTypeId('map_style');

फिर बस एक खाली div डालें जहाँ आप चाहते हैं कि मानचित्र आपके पृष्ठ पर दिखाई दे।

<div id="map"></div>

आपको स्पष्ट रूप से Google मानचित्र API में भी कॉल करना होगा। मैंने बस एक फाइल बनाई है जिसे मेपी.जेएस कहा जाता है और इसे मेरे / जेएस फ़ोल्डर में फेंक दिया। इस फ़ाइल को उपरोक्त जावास्क्रिप्ट से पहले बुलाया जाना चाहिए।

`window.google = window.google || {};
google.maps = google.maps || {};
(function() {

  function getScript(src) {
    document.write('<' + 'script src="' + src + '"' +
                   ' type="text/javascript"><' + '/script>');
  }

  var modules = google.maps.modules = {};
  google.maps.__gjsload__ = function(name, text) {
    modules[name] = text;
  };

  google.maps.Load = function(apiLoad) {
    delete google.maps.Load;
    apiLoad([0.009999999776482582,[[["http://mt0.googleapis.com/vt?lyrs=m@228000000\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=m@228000000\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"m@228000000"],[["http://khm0.googleapis.com/kh?v=135\u0026hl=en-US\u0026","http://khm1.googleapis.com/kh?v=135\u0026hl=en-US\u0026"],null,null,null,1,"135"],[["http://mt0.googleapis.com/vt?lyrs=h@228000000\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=h@228000000\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"h@228000000"],[["http://mt0.googleapis.com/vt?lyrs=t@131,r@228000000\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=t@131,r@228000000\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"t@131,r@228000000"],null,null,[["http://cbk0.googleapis.com/cbk?","http://cbk1.googleapis.com/cbk?"]],[["http://khm0.googleapis.com/kh?v=80\u0026hl=en-US\u0026","http://khm1.googleapis.com/kh?v=80\u0026hl=en-US\u0026"],null,null,null,null,"80"],[["http://mt0.googleapis.com/mapslt?hl=en-US\u0026","http://mt1.googleapis.com/mapslt?hl=en-US\u0026"]],[["http://mt0.googleapis.com/mapslt/ft?hl=en-US\u0026","http://mt1.googleapis.com/mapslt/ft?hl=en-US\u0026"]],[["http://mt0.googleapis.com/vt?hl=en-US\u0026","http://mt1.googleapis.com/vt?hl=en-US\u0026"]],[["http://mt0.googleapis.com/mapslt/loom?hl=en-US\u0026","http://mt1.googleapis.com/mapslt/loom?hl=en-US\u0026"]],[["https://mts0.googleapis.com/mapslt?hl=en-US\u0026","https://mts1.googleapis.com/mapslt?hl=en-US\u0026"]],[["https://mts0.googleapis.com/mapslt/ft?hl=en-US\u0026","https://mts1.googleapis.com/mapslt/ft?hl=en-US\u0026"]]],["en-US","US",null,0,null,null,"http://maps.gstatic.com/mapfiles/","http://csi.gstatic.com","https://maps.googleapis.com","http://maps.googleapis.com"],["http://maps.gstatic.com/intl/en_us/mapfiles/api-3/14/0","3.14.0"],[2635921922],1,null,null,null,null,0,"",null,null,0,"http://khm.googleapis.com/mz?v=135\u0026",null,"https://earthbuilder.googleapis.com","https://earthbuilder.googleapis.com",null,"http://mt.googleapis.com/vt/icon",[["http://mt0.googleapis.com/vt","http://mt1.googleapis.com/vt"],["https://mts0.googleapis.com/vt","https://mts1.googleapis.com/vt"],[null,[[0,"m",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[47],[37,[["smartmaps"]]]]],0],[null,[[0,"m",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[47],[37,[["smartmaps"]]]]],3],[null,[[0,"h",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[50],[37,[["smartmaps"]]]]],0],[null,[[0,"h",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[50],[37,[["smartmaps"]]]]],3],[null,[[4,"t",131],[0,"r",131000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[5],[37,[["smartmaps"]]]]],0],[null,[[4,"t",131],[0,"r",131000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[5],[37,[["smartmaps"]]]]],3],[null,null,[null,"en-US","US",null,18],0],[null,null,[null,"en-US","US",null,18],3],[null,null,[null,"en-US","US",null,18],6],[null,null,[null,"en-US","US",null,18],0]]], loadScriptTime);
  };
  var loadScriptTime = (new Date).getTime();
  getScript("http://maps.gstatic.com/intl/en_us/mapfiles/api-3/14/0/main.js");
})();`

जब आप mapi.js फ़ाइल को कॉल करते हैं तो सुनिश्चित करें कि आप इसे सेंसर की झूठी विशेषता से गुजारें।

अर्थात: <script type="text/javascript" src="js/mapi.js?sensor=false"></script>

एपीआई के नए संस्करण 3 में किसी कारण से सेंसर को शामिल करने की आवश्यकता होती है। सुनिश्चित करें कि आप अपने main.js फ़ाइल से पहले mapi.js फ़ाइल शामिल करते हैं।


0

गूगल मैप्स v2 के लिए - GMap2:

ar map = new GMap2(document.getElementById("google_map"));
map.disableScrollWheelZoom();

0

यदि आपके पास इस तरह Google मानचित्र एम्बेडेड API का उपयोग करके एक iframe है:

 <iframe width="320" height="400" frameborder="0" src="https://www.google.com/maps/embed/v1/place?q=Cagli ... "></iframe>

आप इस सीएसएस शैली को जोड़ सकते हैं: सूचक-घटना: कोई नहीं; ES।

<iframe width="320" height="400" frameborder="0" style="pointer-event:none;" src="https://www.google.com/maps/embed/v1/place?q=Cagli ... "></iframe>

0

यहाँ मेरे @ @ द्वारा विस्तारित @nathanielperales उत्तर पर ले, अब मेरे द्वारा फिर से बढ़ाया गया है।

एचटीएमएल

<div class='embed-container maps'>
    <iframe width='600' height='450' frameborder='0' src='http://foo.com'></iframe>
</div> 

jQuery

// we're doing so much with jQuery already, might as well set the initial state
$('.maps iframe').css("pointer-events", "none");

// as a safety, allow pointer events on click
$('.maps').click(function() {
  $(this).find('iframe').css("pointer-events", "auto");
});


$('.maps').mouseleave(function() {
  // set the default again on mouse out - disallow pointer events
  $(this).find('iframe').css("pointer-events", "none");
  // unset the comparison data so it doesn't effect things when you enter again
  $(this).removeData('oldmousepos');
});

$('.maps').bind('mousemove', function(e){
  $this = $(this);
  // check the current mouse X position
  $this.data('mousepos', e.pageX);
  // set the comparison data if it's null or undefined
  if ($this.data('oldmousepos') == null) {
    $this.data('oldmousepos', $this.data('mousepos'));
  }
  setTimeout(function(){
    // some left/right movement - allow pointer events
    if ($this.data('oldmousepos') != $this.data('mousepos')) {
      $this.find('iframe').css("pointer-events", "auto");
    }
    // set the compairison variable
    $this.data('oldmousepos', $this.data('mousepos'));
  }, 300);
  console.log($this.data('oldmousepos')+ ' ' + $this.data('mousepos'));
});

0

सबसे सरल एक :

<div id="myIframe" style="width:640px; height:480px;">
   <div style="background:transparent; position:absolute; z-index:1; width:100%; height:100%; cursor:pointer;" onClick="style.pointerEvents='none'"></div>
   <iframe src="https://www.google.com/maps/d/embed?mid=XXXXXXXXXXXXXX" style="width:640px; height:480px;"></iframe>
</div>

0

इसे अपनी स्क्रिप्ट में जोड़ें:

function initMap() {
    var uluru = {lat: -25.363, lng: 131.044};
    var map = new google.maps.Map(document.getElementById('map'), {
        zoom: 12,
        center: uluru,
        scrollwheel: false,
        disableDefaultUI: true,
        disableDoubleClickZoom: true
    });
    var marker = new google.maps.Marker({
        position: uluru,
        map: map
});
}

2
सवाल एंबेड एपीआई (एक iframe का उपयोग करके) के संबंध में है, जावास्क्रिप्ट एपीआई नहीं।
GreatBlakes

0

यहां समस्या के लिए मेरा समाधान है, मैं एक WP साइट बना रहा था, इसलिए यहां थोड़ा php कोड है। लेकिन कुंजी scrollwheel: false,मैप ऑब्जेक्ट में है।

function initMap() {
        var uluru = {lat: <?php echo $latitude; ?>, lng: <?php echo $Longitude; ?>};
        var map = new google.maps.Map(document.getElementById('map'), {
            zoom: 18,
            scrollwheel: false,
            center: uluru
        });
        var marker = new google.maps.Marker({
            position: uluru,
            map: map
        });
    }

आशा है कि यह मदद करेगा। चियर्स

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