| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <template>
- <div>
- <slot></slot>
- </div>
- </template>
- <script>
- import commonMixin from '../base/mixins/common.js'
- import bindEvents from '../base/bindEvent.js'
- import {createLabel, createIcon, createPoint} from '../base/factory.js'
- export default {
- name: 'bm-marker',
- mixins: [commonMixin('overlay')],
- props: {
- position: {},
- offset: {},
- icon: {},
- massClear: {
- type: Boolean,
- default: true
- },
- dragging: {
- type: Boolean,
- default: false
- },
- clicking: {
- type: Boolean,
- default: true
- },
- raiseOnDrag: {
- type: Boolean,
- default: false
- },
- draggingCursor: {
- type: String
- },
- rotation: {
- type: Number
- },
- shadow: {
- type: Object
- },
- title: {
- type: String
- },
- label: {
- type: Object
- },
- animation: {
- type: String
- },
- top: {
- type: Boolean,
- default: false
- },
- zIndex: {
- type: Number,
- default: 0
- }
- },
- watch: {
- 'position.lng' (val, oldVal) {
- const {BMap, originInstance, position, renderByParent, $parent} = this
- if (val !== oldVal && val >= -180 && val <= 180) {
- originInstance.setPosition(createPoint(BMap, {lng: val, lat: position.lat}))
- }
- renderByParent && $parent.reload()
- },
- 'position.lat' (val, oldVal) {
- const {BMap, originInstance, position, renderByParent, $parent} = this
- if (val !== oldVal && val >= -74 && val <= 74) {
- originInstance.setPosition(createPoint(BMap, {lng: position.lng, lat: val}))
- }
- renderByParent && $parent.reload()
- },
- 'offset.width' (val, oldVal) {
- const {BMap, originInstance} = this
- if (val !== oldVal) {
- originInstance.setOffset(new BMap.Size(val, this.offset.height))
- }
- },
- 'offset.height' (val, oldVal) {
- const {BMap, originInstance} = this
- if (val !== oldVal) {
- originInstance.setOffset(new BMap.Size(this.offset.width, val))
- }
- },
- icon: {
- deep: true,
- handler (val) {
- const {BMap, originInstance, rotation} = this
- originInstance && originInstance.setIcon(createIcon(BMap, val))
- rotation && originInstance && originInstance.setRotation(rotation)
- }
- },
- massClear (val) {
- val ? this.originInstance.enableMassClear() : this.originInstance.disableMassClear()
- },
- dragging (val) {
- val ? this.originInstance.enableDragging() : this.originInstance.disableDragging()
- },
- clicking () {
- this.reload()
- },
- raiseOnDrag () {
- this.reload()
- },
- draggingCursor (val) {
- this.originInstance.setDraggingCursor(val)
- },
- rotation (val) {
- this.originInstance.setRotation(val)
- },
- shadow (val) {
- this.originInstance.setShadow(val)
- },
- title (val) {
- this.originInstance.setTitle(val)
- },
- label (val) {
- this.reload()
- },
- animation (val) {
- this.originInstance.setAnimation(global[val])
- },
- top (val) {
- this.originInstance.setTop(val)
- },
- zIndex (val) {
- this.originInstance.setZIndex(val)
- }
- },
- methods: {
- load () {
- const {BMap, map, position, offset, icon, massClear, dragging, clicking, raiseOnDrag, draggingCursor, rotation, shadow, title, label, animation, top, renderByParent, $parent, zIndex} = this
- const overlay = new BMap.Marker(new BMap.Point(position.lng, position.lat), {
- offset,
- icon: icon && createIcon(BMap, icon),
- enableMassClear: massClear,
- enableDragging: dragging,
- enableClicking: clicking,
- raiseOnDrag,
- draggingCursor,
- rotation,
- shadow,
- title
- })
- this.originInstance = overlay
- label && overlay && overlay.setLabel(createLabel(BMap, label))
- overlay.setTop(top)
- overlay.setZIndex(zIndex)
- bindEvents.call(this, overlay)
- if (renderByParent) {
- $parent.reload()
- } else {
- map.addOverlay(overlay)
- }
- overlay.setAnimation(global[animation])
- }
- }
- }
- </script>
|