You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
485 lines
13 KiB
485 lines
13 KiB
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 = |
|
"<img src='" + |
|
this._opts.closeIconUrl + |
|
"' align='right' style='position:absolute;right:0px;cursor:pointer;margin:" + |
|
this._opts.closeIconMargin + |
|
"'/>" |
|
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) |
|
}, |
|
}) |
|
})()
|
|
|