ฉันพยายามจัดรูปแบบ Google Maps ของฉันInfoWindow
แต่เอกสารมีข้อ จำกัด ในหัวข้อนี้มาก คุณมีสไตล์InfoWindow
อย่างไร?
ฉันพยายามจัดรูปแบบ Google Maps ของฉันInfoWindow
แต่เอกสารมีข้อ จำกัด ในหัวข้อนี้มาก คุณมีสไตล์InfoWindow
อย่างไร?
คำตอบ:
Google เขียนโค้ดเพื่อช่วยในเรื่องนี้ นี่คือตัวอย่างบางส่วน: ตัวอย่างการใช้ InfoBubble , เครื่องหมายสไตล์และหน้าต่างข้อมูลกำหนดเอง (โดยใช้ OverlayView)
โค้ดในลิงก์ด้านบนใช้เส้นทางที่แตกต่างกันเพื่อให้ได้ผลลัพธ์ที่คล้ายกัน ความสำคัญของมันคือการจัดรูปแบบ InfoWindows โดยตรงนั้นไม่ใช่เรื่องง่ายและอาจจะง่ายกว่าที่จะใช้คลาส InfoBubble เพิ่มเติมแทน InfoWindow หรือเพื่อแทนที่ GOverlay อีกทางเลือกหนึ่งคือการแก้ไของค์ประกอบของ InfoWindow โดยใช้ javascript (หรือ jQuery) เช่นที่ ATOzTOA แนะนำในภายหลัง
อาจเป็นไปได้ว่าตัวอย่างที่ง่ายที่สุดคือการใช้ InfoBubble แทน InfoWindow InfoBubble สามารถใช้ได้โดยการนำเข้าไฟล์นี้ (ซึ่งคุณควรโฮสต์ด้วยตัวเอง):http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobubble/src/infobubble.js
หน้าโครงการ Github InfoBubble ของ
InfoBubble นั้นเก๋มากเมื่อเทียบกับ InfoWindow:
infoBubble = new InfoBubble({
map: map,
content: '<div class="mylabel">The label</div>',
position: new google.maps.LatLng(-32.0, 149.0),
shadowStyle: 1,
padding: 0,
backgroundColor: 'rgb(57,57,57)',
borderRadius: 5,
arrowSize: 10,
borderWidth: 1,
borderColor: '#2c2c2c',
disableAutoPan: true,
hideCloseButton: true,
arrowPosition: 30,
backgroundClassName: 'transparent',
arrowStyle: 2
});
infoBubble.open();
คุณยังสามารถเรียกใช้แผนที่และเครื่องหมายที่กำหนดเพื่อเปิด:
infoBubble.open(map, marker);
เป็นอีกตัวอย่างหนึ่งตัวอย่างหน้าต่างข้อมูลที่กำหนดเองขยายคลาส GOverlay จาก Google Maps API และใช้สิ่งนี้เป็นฐานในการสร้างหน้าต่างข้อมูลที่ยืดหยุ่นมากขึ้น ขั้นแรกจะสร้างคลาส:
/* An InfoBox is like an info window, but it displays
* under the marker, opens quicker, and has flexible styling.
* @param {GLatLng} latlng Point to place bar at
* @param {Map} map The map on which to display this InfoBox.
* @param {Object} opts Passes configuration options - content,
* offsetVertical, offsetHorizontal, className, height, width
*/
function InfoBox(opts) {
google.maps.OverlayView.call(this);
this.latlng_ = opts.latlng;
this.map_ = opts.map;
this.offsetVertical_ = -195;
this.offsetHorizontal_ = 0;
this.height_ = 165;
this.width_ = 266;
var me = this;
this.boundsChangedListener_ =
google.maps.event.addListener(this.map_, "bounds_changed", function() {
return me.panMap.apply(me);
});
// Once the properties of this OverlayView are initialized, set its map so
// that we can display it. This will trigger calls to panes_changed and
// draw.
this.setMap(this.map_);
}
หลังจากนั้นจะดำเนินการแทนที่ GOverlay:
InfoBox.prototype = new google.maps.OverlayView();
จากนั้นคุณควรแทนที่วิธีการที่คุณต้องการ: createElement
, draw
, และremove
panMap
มันค่อนข้างมีส่วนร่วม แต่ในทางทฤษฎีตอนนี้คุณแค่วาด div บนแผนที่ด้วยตัวเองแทนที่จะใช้หน้าต่างข้อมูลปกติ
คุณสามารถแก้ไข InfoWindow ทั้งหมดโดยใช้ jquery เพียงอย่างเดียว ...
var popup = new google.maps.InfoWindow({
content:'<p id="hook">Hello World!</p>'
});
ที่นี่ <p> องค์ประกอบจะทำหน้าที่เป็นตะขอใน InfoWindow จริง เมื่อ Domready เริ่มทำงานองค์ประกอบจะทำงานและเข้าถึงได้โดยใช้ javascript / jquery เช่น$('#hook').parent().parent().parent().parent()
เช่น
โค้ดด้านล่างจะกำหนดเส้นขอบ 2 พิกเซลรอบ ๆ InfoWindow
google.maps.event.addListener(popup, 'domready', function() {
var l = $('#hook').parent().parent().parent().siblings();
for (var i = 0; i < l.length; i++) {
if($(l[i]).css('z-index') == 'auto') {
$(l[i]).css('border-radius', '16px 16px 16px 16px');
$(l[i]).css('border', '2px solid red');
}
}
});
คุณสามารถทำอะไรก็ได้เช่นตั้งค่าคลาส CSS ใหม่หรือเพียงแค่เพิ่มองค์ประกอบใหม่
เล่นกับองค์ประกอบต่างๆเพื่อให้ได้สิ่งที่คุณต้องการ ...
google.maps.event.addListener(infowindow, 'domready', function() {
// Reference to the DIV that wraps the bottom of infowindow
var iwOuter = $('.gm-style-iw');
/* Since this div is in a position prior to .gm-div style-iw.
* We use jQuery and create a iwBackground variable,
* and took advantage of the existing reference .gm-style-iw for the previous div with .prev().
*/
var iwBackground = iwOuter.prev();
// Removes background shadow DIV
iwBackground.children(':nth-child(2)').css({'display' : 'none'});
// Removes white background DIV
iwBackground.children(':nth-child(4)').css({'display' : 'none'});
// Moves the infowindow 115px to the right.
iwOuter.parent().parent().css({left: '115px'});
// Moves the shadow of the arrow 76px to the left margin.
iwBackground.children(':nth-child(1)').attr('style', function(i,s){ return s + 'left: 76px !important;'});
// Moves the arrow 76px to the left margin.
iwBackground.children(':nth-child(3)').attr('style', function(i,s){ return s + 'left: 76px !important;'});
// Changes the desired tail shadow color.
iwBackground.children(':nth-child(3)').find('div').children().css({'box-shadow': 'rgba(72, 181, 233, 0.6) 0px 1px 6px', 'z-index' : '1'});
// Reference to the div that groups the close button elements.
var iwCloseBtn = iwOuter.next();
// Apply the desired effect to the close button
iwCloseBtn.css({opacity: '1', right: '38px', top: '3px', border: '7px solid #48b5e9', 'border-radius': '13px', 'box-shadow': '0 0 5px #3990B9'});
// If the content of infowindow not exceed the set maximum height, then the gradient is removed.
if($('.iw-content').height() < 140){
$('.iw-bottom-gradient').css({display: 'none'});
}
// The API automatically applies 0.7 opacity to the button after the mouseout event. This function reverses this event to the desired value.
iwCloseBtn.mouseout(function(){
$(this).css({opacity: '1'});
});
});
// CSS ใส่สไตล์ชีต
.gm-style-iw {
background-color: rgb(237, 28, 36);
border: 1px solid rgba(72, 181, 233, 0.6);
border-radius: 10px;
box-shadow: 0 1px 6px rgba(178, 178, 178, 0.6);
color: rgb(255, 255, 255) !important;
font-family: gothambook;
text-align: center;
top: 15px !important;
width: 150px !important;
}
ฉันใช้รหัสต่อไปนี้เพื่อใช้ CSS ภายนอก:
boxText = document.createElement("html");
boxText.innerHTML = "<head><link rel='stylesheet' href='style.css'/></head><body>[some html]<body>";
infowindow.setContent(boxText);
infowindow.open(map, marker);
ใช้กล่องข้อมูลปลั๊กอินจาก Google Maps Utility Library ทำให้การจัดรูปแบบ / การจัดการป๊อปอัปแผนที่ง่ายขึ้นมาก
โปรดทราบว่าคุณจะต้องตรวจสอบให้แน่ใจว่าโหลดหลังจาก google maps API:
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_KEY&callback=initMap" async defer></script>
<script src="/js/infobox_packed.js" async defer></script>
ฉันมีการออกแบบหน้าต่าง infowindow แผนที่ของ Google พร้อมรูปภาพและเนื้อหาบางส่วนตามด้านล่าง
map_script (สำหรับการอ้างอิง html ของ infowindow เท่านั้น)
for (i = 0; i < locations.length; i++) {
var latlng = new google.maps.LatLng(locations[i][1], locations[i][2]);
marker = new google.maps.Marker({
position: latlng,
map: map,
icon: "<?php echo plugins_url( 'assets/img/map-pin.png', ELEMENTOR_ES__FILE__ ); ?>"
});
var property_img = locations[i][6],
title = locations[i][0],
price = locations[i][3],
bedrooms = locations[i][4],
type = locations[i][5],
listed_on = locations[i][7],
prop_url = locations[i][8];
content = "<div class='map_info_wrapper'><a href="+prop_url+"><div class='img_wrapper'><img src="+property_img+"></div>"+
"<div class='property_content_wrap'>"+
"<div class='property_title'>"+
"<span>"+title+"</span>"+
"</div>"+
"<div class='property_price'>"+
"<span>"+price+"</span>"+
"</div>"+
"<div class='property_bed_type'>"+
"<span>"+bedrooms+"</span>"+
"<ul><li>"+type+"</li></ul>"+
"</div>"+
"<div class='property_listed_date'>"+
"<span>Listed on "+listed_on+"</span>"+
"</div>"+
"</div></a></div>";
google.maps.event.addListener(marker, 'click', (function(marker, content, i) {
return function() {
infowindow.setContent(content);
infowindow.open(map, marker);
}
})(marker, content, i));
}
สิ่งที่สำคัญที่สุดคือ CSS
#propertymap .gm-style-iw{
box-shadow:none;
color:#515151;
font-family: "Georgia", "Open Sans", Sans-serif;
text-align: center;
width: 100% !important;
border-radius: 0;
left: 0 !important;
top: 20px !important;
}
#propertymap .gm-style > div > div > div > div > div > div > div {
background: none!important;
}
.gm-style > div > div > div > div > div > div > div:nth-child(2) {
box-shadow: none!important;
}
#propertymap .gm-style-iw > div > div{
background: #FFF!important;
}
#propertymap .gm-style-iw a{
text-decoration: none;
}
#propertymap .gm-style-iw > div{
width: 245px !important
}
#propertymap .gm-style-iw .img_wrapper {
height: 150px;
overflow: hidden;
width: 100%;
text-align: center;
margin: 0px auto;
}
#propertymap .gm-style-iw .img_wrapper > img {
width: 100%;
height:auto;
}
#propertymap .gm-style-iw .property_content_wrap {
padding: 0px 20px;
}
#propertymap .gm-style-iw .property_title{
min-height: auto;
}
คุณสามารถใช้คลาส css ได้เช่นกัน
$('#hook').parent().parent().parent().siblings().addClass("class_name");
ขอให้เป็นวันที่ดี!