var BMapLib = (window.BMapLib = BMapLib || {}) var INFOBOX_AT_TOP = 1, INFOBOX_AT_RIGHT = 2, INFOBOX_AT_BOTTOM = 3, INFOBOX_AT_LEFT = 4 ;(function () { var b, a = (b = a || { version: '1.5.0' }) a.guid = '$BAIDU$' ;(function () { window[a.guid] = window[a.guid] || {} a.lang = a.lang || {} a.lang.isString = function (d) { return '[object String]' == Object.prototype.toString.call(d) } a.lang.isFunction = function (d) { return '[object Function]' == Object.prototype.toString.call(d) } a.lang.Event = function (d, e) { this.type = d this.returnValue = true this.target = e || null this.currentTarget = null } a.object = a.object || {} a.extend = a.object.extend = function (f, d) { for (var e in d) { if (d.hasOwnProperty(e)) { f[e] = d[e] } } return f } a.event = a.event || {} a.event._listeners = a.event._listeners || [] a.dom = a.dom || {} a.dom._g = function (d) { if (a.lang.isString(d)) { return document.getElementById(d) } return d } a._g = a.dom._g a.event.on = function (e, h, j) { h = h.replace(/^on/i, '') e = a.dom._g(e) var i = function (l) { j.call(e, l) }, d = a.event._listeners, g = a.event._eventFilter, k, f = h h = h.toLowerCase() if (g && g[h]) { k = g[h](e, h, i) f = k.type i = k.listener } if (e.addEventListener) { e.addEventListener(f, i, false) } else { if (e.attachEvent) { e.attachEvent('on' + f, i) } } d[d.length] = [e, h, j, i, f] return e } a.on = a.event.on a.event.un = function (f, i, e) { f = a.dom._g(f) i = i.replace(/^on/i, '').toLowerCase() var l = a.event._listeners, g = l.length, h = !e, k, j, d while (g--) { k = l[g] if (k[1] === i && k[0] === f && (h || k[2] === e)) { j = k[4] d = k[3] if (f.removeEventListener) { f.removeEventListener(j, d, false) } else { if (f.detachEvent) { f.detachEvent('on' + j, d) } } l.splice(g, 1) } } return f } a.un = a.event.un a.dom.g = function (d) { if ('string' == typeof d || d instanceof String) { return document.getElementById(d) } else { if (d && d.nodeName && (d.nodeType == 1 || d.nodeType == 9)) { return d } } return null } a.g = a.G = a.dom.g a.dom._styleFixer = a.dom._styleFixer || {} a.dom._styleFilter = a.dom._styleFilter || [] a.dom._styleFilter.filter = function (e, h, j) { for (var d = 0, g = a.dom._styleFilter, f; (f = g[d]); d++) { if ((f = f[j])) { h = f(e, h) } } return h } a.string = a.string || {} a.string.toCamelCase = function (d) { if (d.indexOf('-') < 0 && d.indexOf('_') < 0) { return d } return d.replace(/[-_][^-_]/g, function (e) { return e.charAt(1).toUpperCase() }) } a.dom.setStyle = function (f, e, g) { var h = a.dom, d f = h.g(f) e = a.string.toCamelCase(e) if ((d = h._styleFilter)) { g = d.filter(e, g, 'set') } d = h._styleFixer[e] d && d.set ? d.set(f, g) : (f.style[d || e] = g) return f } a.setStyle = a.dom.setStyle a.dom.setStyles = function (e, f) { e = a.dom.g(e) for (var d in f) { a.dom.setStyle(e, d, f[d]) } return e } a.setStyles = a.dom.setStyles a.browser = a.browser || {} a.browser.ie = a.ie = /msie (\d+\.\d+)/i.test(navigator.userAgent) ? document.documentMode || +RegExp['\x241'] : undefined a.dom._NAME_ATTRS = (function () { var d = { cellpadding: 'cellPadding', cellspacing: 'cellSpacing', colspan: 'colSpan', rowspan: 'rowSpan', valign: 'vAlign', usemap: 'useMap', frameborder: 'frameBorder', } if (a.browser.ie < 8) { d['for'] = 'htmlFor' d['class'] = 'className' } else { d.htmlFor = 'for' d.className = 'class' } return d })() a.dom.setAttr = function (e, d, f) { e = a.dom.g(e) if ('style' == d) { e.style.cssText = f } else { d = a.dom._NAME_ATTRS[d] || d e.setAttribute(d, f) } return e } a.setAttr = a.dom.setAttr a.dom.setAttrs = function (f, d) { f = a.dom.g(f) for (var e in d) { a.dom.setAttr(f, e, d[e]) } return f } a.setAttrs = a.dom.setAttrs a.dom.create = function (f, d) { var g = document.createElement(f), e = d || {} return a.dom.setAttrs(g, e) } b.undope = true })() var c = (BMapLib.InfoBox = function (f, e, d) { this._content = e || '' this._isOpen = false this._map = f this._opts = d = d || {} this._opts.offset = d.offset || new BMap.Size(0, 0) this._opts.boxClass = d.boxClass || 'infoBox' this._opts.boxStyle = d.boxStyle || {} this._opts.closeIconMargin = d.closeIconMargin || '2px' this._opts.closeIconUrl = d.closeIconUrl || 'close.png' this._opts.enableAutoPan = d.enableAutoPan ? true : false this._opts.align = d.align || INFOBOX_AT_TOP }) c.prototype = new BMap.Overlay() c.prototype.initialize = function (e) { var d = this var g = (this._div = a.dom.create('div', { class: this._opts.boxClass })) a.dom.setStyles(g, this._opts.boxStyle) g.style.position = 'absolute' this._setContent(this._content) var f = e.getPanes().floatPane f.style.width = 'auto' f.appendChild(g) this._getInfoBoxSize() a.event.on(g, 'onmousedown', function (h) { d._stopBubble(h) }) a.event.on(g, 'onmouseover', function (h) { d._stopBubble(h) }) a.event.on(g, 'click', function (h) { d._stopBubble(h) }) a.event.on(g, 'dblclick', function (h) { d._stopBubble(h) }) return g } c.prototype.draw = function () { this._isOpen && this._adjustPosition(this._point) } c.prototype.open = function (d) { var e = this, f if (!this._isOpen) { this._map.addOverlay(this) this._isOpen = true setTimeout(function () { e._dispatchEvent(e, 'open', { point: e._point }) }, 10) } if (d instanceof BMap.Point) { f = d this._removeMarkerEvt() } else { if (d instanceof BMap.Marker) { if (this._marker) { this._removeMarkerEvt() } f = d.getPosition() this._marker = d !this._markerDragend && this._marker.addEventListener( 'dragend', (this._markerDragend = function (g) { e._point = g.point e._adjustPosition(e._point) e._panBox() e.show() }) ) !this._markerDragging && this._marker.addEventListener( 'dragging', (this._markerDragging = function () { e.hide() e._point = e._marker.getPosition() e._adjustPosition(e._point) }) ) } } this.show() this._point = f this._panBox() this._adjustPosition(this._point) } c.prototype.close = function () { if (this._isOpen) { this._map.removeOverlay(this) this._remove() this._isOpen = false this._dispatchEvent(this, 'close', { point: this._point }) } } c.prototype.enableAutoPan = function () { this._opts.enableAutoPan = true } c.prototype.disableAutoPan = function () { this._opts.enableAutoPan = false } c.prototype.setContent = function (d) { this._setContent(d) this._getInfoBoxSize() this._adjustPosition(this._point) } c.prototype.setPosition = function (d) { this._point = d this._adjustPosition(d) this._removeMarkerEvt() } c.prototype.getPosition = function () { return this._point } ;(c.prototype.getOffset = function () { return this._opts.offset }), (c.prototype._remove = function () { var d = this if (this.domElement && this.domElement.parentNode) { a.event.un(this._div.firstChild, 'click', d._closeHandler()) this.domElement.parentNode.removeChild(this.domElement) } this.domElement = null this._isOpen = false this.dispatchEvent('onremove') }), a.object.extend(c.prototype, { _getCloseIcon: function () { var d = "" return d }, _setContent: function (e) { if (!this._div) { return } var d = this._getCloseIcon() if (typeof e.nodeType === 'undefined') { this._div.innerHTML = d + e } else { this._div.innerHTML = d this._div.appendChild(e) } this._content = e this._addEventToClose() }, _adjustPosition: function (f) { var d = this._getPointPosition(f) var e = this._marker && this._marker.getIcon() switch (this._opts.align) { case INFOBOX_AT_TOP: if (this._marker) { this._div.style.bottom = -( d.y - this._opts.offset.height - e.anchor.height + e.infoWindowAnchor.height ) - this._marker.getOffset().height + 2 + 'px' } else { this._div.style.bottom = -(d.y - this._opts.offset.height) + 'px' } break case INFOBOX_AT_BOTTOM: if (this._marker) { this._div.style.top = d.y + this._opts.offset.height - e.anchor.height + e.infoWindowAnchor.height + this._marker.getOffset().height + 'px' } else { this._div.style.top = d.y + this._opts.offset.height + 'px' } break } if (this._marker) { this._div.style.left = d.x - e.anchor.width + this._marker.getOffset().width + e.infoWindowAnchor.width - this._boxWidth / 2 + 'px' } else { this._div.style.left = d.x - this._boxWidth / 2 + 'px' } }, _getPointPosition: function (d) { this._pointPosition = this._map.pointToOverlayPixel(d) return this._pointPosition }, _getInfoBoxSize: function () { this._boxWidth = parseInt(this._div.offsetWidth, 10) this._boxHeight = parseInt(this._div.offsetHeight, 10) }, _addEventToClose: function () { var d = this a.event.on(this._div.firstChild, 'click', d._closeHandler()) this._hasBindEventClose = true }, _closeHandler: function () { var d = this return function (f) { d.close() } }, _stopBubble: function (d) { if (d && d.stopPropagation) { d.stopPropagation() } else { window.event.cancelBubble = true } }, _panBox: function () { if (!this._opts.enableAutoPan) { return } var i = parseInt(this._map.getContainer().offsetHeight, 10), o = parseInt(this._map.getContainer().offsetWidth, 10), j = this._boxHeight, d = this._boxWidth if (j >= i || d >= o) { return } if (!this._map.getBounds().containsPoint(this._point)) { this._map.setCenter(this._point) } var e = this._map.pointToPixel(this._point), p, m, l, g = d / 2 - e.x, n = d / 2 + e.x - o if (this._marker) { var k = this._marker.getIcon() } switch (this._opts.align) { case INFOBOX_AT_TOP: var f = this._marker ? k.anchor.height + this._marker.getOffset().height - k.infoWindowAnchor.height : 0 p = j - e.y + this._opts.offset.height + f + 2 break case INFOBOX_AT_BOTTOM: var f = this._marker ? -k.anchor.height + k.infoWindowAnchor.height + this._marker.getOffset().height + this._opts.offset.height : 0 m = j + e.y - i + f + 4 break } panX = g > 0 ? g : n > 0 ? -n : 0 l = p > 0 ? p : m > 0 ? -m : 0 this._map.panBy(panX, l) }, _removeMarkerEvt: function () { this._markerDragend && this._marker.removeEventListener('dragend', this._markerDragend) this._markerDragging && this._marker.removeEventListener('dragging', this._markerDragging) this._markerDragend = this._markerDragging = null }, _dispatchEvent: function (d, e, g) { e.indexOf('on') != 0 && (e = 'on' + e) var f = new a.lang.Event(e) if (!!g) { for (var h in g) { f[h] = g[h] } } d.dispatchEvent(f) }, }) })()