提交 b614be4d 编写于 作者: fxy060608's avatar fxy060608

Merge branch 'dev' of https://github.com/dcloudio/uni-app into alpha

......@@ -176,7 +176,7 @@ function hasOwn (obj, key) {
return hasOwnProperty.call(obj, key)
}
const tags = require('../../uni-cli-shared/lib/tags')
const tags = require('@dcloudio/uni-cli-shared/lib/tags')
const {
getTagName
......
......@@ -38,10 +38,6 @@ if (process.env.UNI_CLOUD_SPACES) {
}))
}
} catch (e) {}
}
if (process.UNI_CLOUD_TCB) {
console.warn(`当前项目使用了腾讯云云服务空间,需在uniCloud后台开启匿名登录,详见:https://uniapp.dcloud.io/uniCloud/authentication?id=auth-anonymously`)
}
if (
......
<template>
<uni-map
:id="id"
<uni-map
:id="id"
v-on="$listeners">
<div
ref="map"
......@@ -20,7 +20,119 @@ import {
hasOwn
} from 'uni-shared'
var maps
let maps
let callbacks
function loadMap (callback) {
if (maps) {
callback()
} else if (window.qq && window.qq.maps) {
maps = window.qq.maps
callback()
} else if (callbacks) {
callbacks.push(callback)
} else {
callbacks = [callback]
let key = __uniConfig.qqMapKey
let callbackName = '_callback' + Date.now()
window[callbackName] = function () {
delete window[callbackName]
maps = window.qq.maps
var Callout = maps.Callout = function (option = {}) {
this.option = option
var map = option.map
this.position = option.position
this.index = 1
this.visible = this.alwaysVisible = option.display === 'ALWAYS'
this.init()
Object.defineProperty(this, 'onclick', {
setter (callback) {
this.div.onclick = callback
},
getter () {
return this.div.onclick
}
})
if (map) {
this.setMap(map)
}
}
Callout.prototype = new maps.Overlay()
Callout.prototype.init = function () {
var option = this.option
var div = this.div = document.createElement('div')
var divStyle = div.style
divStyle.position = 'absolute'
divStyle.whiteSpace = 'nowrap'
divStyle.transform = 'translateX(-50%) translateY(-100%)'
divStyle.zIndex = 1
divStyle.boxShadow = option.boxShadow || 'none'
divStyle.display = this.visible ? 'block' : 'none'
var triangle = this.triangle = document.createElement('div')
triangle.setAttribute('style',
'position: absolute;white-space: nowrap;border-width: 4px;border-style: solid;border-color: #fff transparent transparent;border-image: initial;font-size: 12px;padding: 0px;background-color: transparent;width: 0px;height: 0px;transform: translate(-50%, 100%);left: 50%;bottom: 0;'
)
this.setStyle(option)
this.changed = function (key) {
divStyle.display = this.visible ? 'block' : 'none'
}
div.appendChild(triangle)
}
Callout.prototype.construct = function () {
var div = this.div
var panes = this.getPanes()
panes.floatPane.appendChild(div)
}
Callout.prototype.draw = function () {
var overlayProjection = this.getProjection()
if (!this.position || !this.div || !overlayProjection) {
return
}
var pixel = overlayProjection.fromLatLngToDivPixel(this.position)
var divStyle = this.div.style
divStyle.left = pixel.x + 'px'
divStyle.top = pixel.y + 'px'
}
Callout.prototype.destroy = function () {
this.div.parentNode.removeChild(this.div)
this.div = null
this.triangle = null
}
Callout.prototype.setOption = function (option) {
this.option = option
this.setPosition(option.position)
if (option.display === 'ALWAYS') {
this.alwaysVisible = this.visible = true
} else {
this.alwaysVisible = false
}
this.setStyle(option)
}
Callout.prototype.setStyle = function (option) {
var div = this.div
var divStyle = div.style
div.innerText = option.content
divStyle.lineHeight = (option.fontSize || 14) + 'px'
divStyle.fontSize = (option.fontSize || 14) + 'px'
divStyle.padding = (option.padding || 8) + 'px'
divStyle.color = option.color || '#000'
divStyle.borderRadius = (option.borderRadius || 0) + 'px'
divStyle.backgroundColor = option.bgColor || '#fff'
divStyle.marginTop = '-' + (option.top + 5) + 'px'
this.triangle.style.borderColor = `${option.bgColor || '#fff'} transparent transparent`
}
Callout.prototype.setPosition = function (position) {
this.position = position
this.draw()
}
callbacks.forEach(callback => callback())
callbacks = null
}
let script = document.createElement('script')
script.src = `https://map.qq.com/api/js?v=2.exp&key=${key}&callback=${callbackName}&libraries=geometry`
document.body.appendChild(script)
}
}
export default {
name: 'Map',
mixins: [subscriber],
......@@ -193,7 +305,7 @@ export default {
}
},
mounted () {
this.loadMap(() => {
loadMap(() => {
this.init()
})
},
......@@ -785,112 +897,6 @@ export default {
return element
}
}
},
loadMap (callback) {
if (maps) {
callback()
} else if (window.qq && window.qq.maps) {
maps = window.qq.maps
callback()
} else {
let key = __uniConfig.qqMapKey
let callbackName = '_callback' + Date.now()
window[callbackName] = function () {
delete window[callbackName]
maps = window.qq.maps
var Callout = maps.Callout = function (option = {}) {
this.option = option
var map = option.map
this.position = option.position
this.index = 1
this.visible = this.alwaysVisible = option.display === 'ALWAYS'
this.init()
Object.defineProperty(this, 'onclick', {
setter (callback) {
this.div.onclick = callback
},
getter () {
return this.div.onclick
}
})
if (map) {
this.setMap(map)
}
}
Callout.prototype = new maps.Overlay()
Callout.prototype.init = function () {
var option = this.option
var div = this.div = document.createElement('div')
var divStyle = div.style
divStyle.position = 'absolute'
divStyle.whiteSpace = 'nowrap'
divStyle.transform = 'translateX(-50%) translateY(-100%)'
divStyle.zIndex = 1
divStyle.boxShadow = option.boxShadow || 'none'
divStyle.display = this.visible ? 'block' : 'none'
var triangle = this.triangle = document.createElement('div')
triangle.setAttribute('style',
'position: absolute;white-space: nowrap;border-width: 4px;border-style: solid;border-color: #fff transparent transparent;border-image: initial;font-size: 12px;padding: 0px;background-color: transparent;width: 0px;height: 0px;transform: translate(-50%, 100%);left: 50%;bottom: 0;'
)
this.setStyle(option)
this.changed = function (key) {
divStyle.display = this.visible ? 'block' : 'none'
}
div.appendChild(triangle)
}
Callout.prototype.construct = function () {
var div = this.div
var panes = this.getPanes()
panes.floatPane.appendChild(div)
}
Callout.prototype.draw = function () {
var overlayProjection = this.getProjection()
if (!this.position || !this.div || !overlayProjection) {
return
}
var pixel = overlayProjection.fromLatLngToDivPixel(this.position)
var divStyle = this.div.style
divStyle.left = pixel.x + 'px'
divStyle.top = pixel.y + 'px'
}
Callout.prototype.destroy = function () {
this.div.parentNode.removeChild(this.div)
this.div = null
this.triangle = null
}
Callout.prototype.setOption = function (option) {
this.option = option
this.setPosition(option.position)
if (option.display === 'ALWAYS') {
this.alwaysVisible = this.visible = true
} else {
this.alwaysVisible = false
}
this.setStyle(option)
}
Callout.prototype.setStyle = function (option) {
var div = this.div
var divStyle = div.style
div.innerText = option.content
divStyle.lineHeight = (option.fontSize || 14) + 'px'
divStyle.fontSize = (option.fontSize || 14) + 'px'
divStyle.padding = (option.padding || 8) + 'px'
divStyle.color = option.color || '#000'
divStyle.borderRadius = (option.borderRadius || 0) + 'px'
divStyle.backgroundColor = option.bgColor || '#fff'
divStyle.marginTop = '-' + (option.top + 5) + 'px'
this.triangle.style.borderColor = `${option.bgColor || '#fff'} transparent transparent`
}
Callout.prototype.setPosition = function (position) {
this.position = position
this.draw()
}
callback()
}
let script = document.createElement('script')
script.src = `https://map.qq.com/api/js?v=2.exp&key=${key}&callback=${callbackName}&libraries=geometry`
document.body.appendChild(script)
}
}
}
}
......
......@@ -109,7 +109,7 @@ export default function parseComponent (vueComponentOptions) {
}
},
didUnmount () {
this.$vm.$destroy()
this.$vm && this.$vm.$destroy()
},
methods: {
__r: handleRef,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册