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.
486 lines
13 KiB
486 lines
13 KiB
3 years ago
|
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)
|
||
|
},
|
||
|
})
|
||
|
})()
|