最全vue的vue-amap使用高德地图插件画多边形范围的示例代码

一、在vue-cli的框架下的main.js(或者main.ts)中引入高德插件,代码如下:

import Vue from 'vue'
import VueAMap from 'vue-amap'
import ElementUI from 'element-ui'

import App from './App.vue'
import router from './router'
import store from './store'
import './registerServiceWorker'

Vue.use(VueAMap)
Vue.use(ElementUI)

VueAMap.initAMapApiLoader({
 // 高德的key
 key: '你的高德key',
 // 插件集合
 plugin: [
 'AMap.Autocomplete',
 'AMap.PlaceSearch',
 'AMap.Scale',
 'AMap.OverView',
 'AMap.ToolBar',
 'AMap.MapType',
 'AMap.PolyEditor',
 'AMap.CircleEditor',
 'AMap.Geocoder',
 'AMap.Geolocation'
 ],
 // 高德 sdk 版本,默认为 1.4.4
 v: '1.4.10'
})

Vue.config.productionTip = false

new Vue({
 router,
 store,
 render: h => h(App)
}).$mount('#app')

强烈推荐的第三种画多边形的效果图:

  ***隐藏的彩蛋哦***

图里的 “请输入经纬度” ,可以输入一堆的经纬度坐标,在按“Enter” ,可以直接形成多边形;(注意:输入的格式要和上面显示的坐标全部选中Ctrl+c下来的格式一样)

  如:

106.628788 , 29.718379
106.631187 , 29.718143
106.632383 , 29.716281
106.628819 , 29.717013

二、第一种画化:使用Geolocation画多边形(效果是在地图点了,才会形成多边形)

// 新增 编辑 查看
<template>
 <div class="point">
 <el-header></el-header>
 <div class="action-bar">
  <el-form class="inline-form" :rules="rules" ref="formData" size="small" :model="formData">
  <el-form-item label label-width="220" prop="location">
   <el-input
   :disabled="!ifFalg"
   class="name-input"
   clearable
   v-model="formData.location"
   placeholder="名称"
   maxlength="30"
   ></el-input>
  </el-form-item>
  <el-form-item label prop="longitude">
   <el-input
   :disabled="!ifFalg"
   class="my-input"
   clearable
   v-model.number="formData.longitude"
   placeholder="经度 "
   ></el-input>
  </el-form-item>
  <el-form-item label prop="latitude">
   <el-input
   :disabled="!ifFalg"
   class="my-input"
   clearable
   v-model.number="formData.latitude"
   placeholder="纬度"
   ></el-input>
  </el-form-item>
  <el-button class="my-button" v-if="ifFalg" type="primary" @click="save" size="small">保存</el-button>
  <el-button class="my-button" size="small" @click="close">关闭</el-button>
  </el-form>
 </div>
 <div class="map-box">
  <div class="map-tool">
  <div v-if="ifFalg">
   <el-checkbox v-model="enterType">地图上描点</el-checkbox>
  </div>
  <!-- <el-checkbox @change="checkbox" v-model="enterType">地图上描点</el-checkbox> -->
  <div class="longlat">
   <ul>
   <li v-for="(item, index) in lnglatpoints" :key="index">
    {{item.longitude}} , {{item.latitude}}
    <i
    v-if="ifFalg"
    class="el-icon-close"
    @click="deletes(item)"
    ></i>
   </li>
   </ul>
   <el-input
   v-if="ifFalg"
   class="my-input"
   size="small"
   clearable
   v-model="lngLat"
   @keyup.enter.native="submitEnter"
   placeholder="请输入经纬度"
   ></el-input>
   <el-button v-if="ifFalg" size="small" @click="clear" type="primary" class="claer">清除</el-button>
  </div>
  </div>
  <div class="map" id="map">
  <el-amap
   ref="map"
   bubble
   :plugin="plugin"
   :zoom="map.zoom"
   :center="map.center"
   :events="events"
   id="amap"
  >
   <el-amap-polygon
   :events="plugin.events"
   :path="path"
   :draggable="draggable"
   fillColor="#2b83f9"
   fillOpacity="0.5"
   strokeWeight="0"
   strokeColor="#2b83f9"
   strokeOpacity="0.5"
   ></el-amap-polygon>
   <!-- <el-amap-marker :position="marker.position" :events="plugin.events"></el-amap-marker> -->
   <el-amap-marker v-if="formData.type === 1" :position="map.center" :label="label"></el-amap-marker>
  </el-amap>
  </div>

 </div>
 </div>
</template>
<script lang="ts">
import * as api from '@/utils/api/index'
import { Component, Vue } from 'vue-property-decorator'
import eHeader from '@/components/header.vue'
import { constants } from 'http2'
import * as util from '@/utils/util.ts'

const testLongitude = (rule: any, value: string, callback: Function) => {
 if (util.regExp.longitudeRegExp.test(value)) {
 return callback()
 } else {
 return callback(new Error('请输入正确的经度'))
 }
}
const testLatitude = (rule: any, value: string, callback: Function) => {
 if (util.regExp.latitudeRegExp.test(value)) {
 return callback()
 } else {
 return callback(new Error('请输入正确的纬度'))
 }
}
@Component({
 components: {
 'el-header': eHeader
 }
})
export default class point extends Vue {
 private breadcrumbId = 0
 private id = ''
 private lngLat = ''
 private ifFalg = true
 private map = {
 zoom: 15,
 center: [106.55073, 29.56471]
 }
 private path: any = []
 private draggable = false
 private lnglatpoints: any = []
 private enterType = false // 录入坐标 | 地图上描点
 private cities = []
 private formData = {
 location: '',
 longitude: '',
 latitude: ''
 }
 plugin = {
 pName: 'Geolocation',
 events: {}
 }
 events = {}
 private test = 1

 private rules = {
 location: [
  { required: true, message: '请输入接送点名称', trigger: 'blur' }
 ],
 longitude: [{ validator: testLongitude, trigger: 'blur' }],
 latitude: [{ validator: testLatitude, trigger: 'blur' }]
 }

 mounted() {
 this.id = this.$route.params.id
 this.breadcrumbId = Number(this.$route.query.breadcrumbId)
 if (this.breadcrumbId === 2) {
  this.ifFalg = false
 }
 if (this.id !== '-1') {
  this.details()
 }

 // this.city()
 let _this: any = this

 // 地图点击事件
 _this.events = {
  click: (e: any) => {
  if (this.enterType) {
   this.path = []
   console.log(e.lnglat)
   let lnglat = e.lnglat
   this.lnglatpoints.push({
   latitude: lnglat.lat,
   longitude: lnglat.lng
   })
   console.log(this.lnglatpoints)
   this.lnglatpoints.map((val: any, index: number) => {
   console.log(index)
   if (index === 0) {
    this.map.center = [val.longitude, val.latitude]
   }
   let arr = [val.longitude, val.latitude]
   this.path.push(arr)
   })
   // this.setFitView()
  }
  }
 }

 // 多边形点击事件
 _this.plugin.events = {
  click: (e: any) => {
  if (this.enterType) {
   this.path = []
   console.log(e.lnglat)
   let lnglat = e.lnglat
   this.lnglatpoints.push({
   latitude: lnglat.lat,
   longitude: lnglat.lng
   })
   console.log(this.lnglatpoints)
   this.lnglatpoints.map((val: any, index: number) => {
   console.log(index)
   if (index === 0) {
    this.map.center = [val.longitude, val.latitude]
   }
   let arr = [val.longitude, val.latitude]
   this.path.push(arr)
   })
   // this.setFitView()
  }
  }
 }
 }// 获取接送范围集合
 details() {
 const loading = this.$loading({
  lock: true,
  text: '加载中...'
 })
 api.main.boss_line_point__get({ params: {param: this.id}}).then((res: any) => {
  if (res.data.success) {
   const response = res.data.data
   this.formData = response
   let points = res.data.data.points
   if (points != null) {
   for (let i = 0; i < points.length; i++) {
    points[i].id = i
   }
   this.lnglatpoints = points
   this.lnglatpoints.map((val: any, index: number) => {
    if (index === 0) {
    this.map.center = [val.longitude, val.latitude]
    }
    let arr = [val.longitude, val.latitude]
    this.path.push(arr)
   })
   } else {
   this.map.center = [
    Number(this.formData.longitude),
    Number(this.formData.latitude)
   ]
   this.label.content = this.formData.location
   }
   setTimeout(this.setFitView, 0)
  } else {
   this.$message.error(res.data.message)
  }
  loading.close()
  })
 }

 // 移除经纬度
 deletes(data: any) {
 let e: any = this
 this.path = []
 for (let i = 0; i < e.lnglatpoints.length; i++) {
  if (
  data.latitude === e.lnglatpoints[i].latitude &&
  data.longitude === e.lnglatpoints[i].longitude
  ) {
  e.lnglatpoints.splice(i, 1)
  }
 }
 console.log(e.path)
 this.lnglatpoints.map((val: any, index: number) => {
  let arr = [val.longitude, val.latitude]
  this.path.push(arr)
  if (index === 0) {
  this.map.center = [val.longitude, val.latitude]
  }
  console.log(this.path)
 })
 }

 clear() {
 this.$confirm('确认删除绘制的接送区域?', '删除', {
  confirmButtonText: '确定',
  cancelButtonText: '取消',
  type: 'warning'
 })
  .then(() => {
  let self: any = this
  this.path = []
  this.lnglatpoints = []
  // this.map.center = [106.5507300000, 29.5647100000]
  this.lngLat = ''
  self.formData.points = []
  })
  .catch(() => {})
 }

 // 输入经纬度
 submitEnter() {
 // eslint-disable-next-line
 const illegalRegExp = /^(\D|\d*\.?\d*,*\s)|[^\d\s,\.]|^\d*\.?\d*$|(,\.|\.,)+|(\d*\.*\d*,){2,}|(\d*\.){2,}|(\d*\s){2,}|(\s\d*\.?\d*|\D)$/g
 const replaceWhiteSpaceRegExp = /(?<=(,|\.|\s))\s+|\s+(?=(,|\.))|^\s|\s+$/g

 this.lngLat = this.lngLat.replace(replaceWhiteSpaceRegExp, '')
 if (illegalRegExp.test(this.lngLat)) {
  return this.$message.error('经纬度格式错误!')
 }
 const lnglatArray = this.lngLat.split(' ')
 lnglatArray.forEach(lnglatString => {
  const lnglatObject = {
  longitude: lnglatString.split(',')[0],
  latitude: lnglatString.split(',')[1]
  }
  this.lnglatpoints.push(lnglatObject)
 })
 this.path = []
 this.lnglatpoints.map((val: any, index: number) => {
  let arr = [val.longitude, val.latitude]
  this.path.push(arr)
  this.lngLat = ''
  if (index === 0) {
  this.map.center = [val.longitude, val.latitude]
  }
 })
 }

 setFitView() {
 const vm: any = this
 let map = vm.$refs.map.$$getInstance()
 map.setFitView()
 }

 close() {
 this.$router.push({
  name: 'pointList'
 })
 }

 save() {
 let e: any = this
 let params: any = {}
 if (this.id !== '-1') {
  // 编辑
  e.formData.id = this.id
  params.id = this.id
 }
 e.formData.points = this.lnglatpoints
 if (e.formData.location === '' || e.formData.location === null) {
  this.$message.warning('名称不能为空!')
  return
 }
 if (this.lnglatpoints.length < 3 && e.formData.type === 2) {
  this.$message.warning('经纬度不能小于三组!')
  return
 }
 params.points = this.lnglatpoints
 params.location = this.formData.location
 params.longitude = this.formData.longitude
 params.latitude = this.formData.latitude
 if (this.id !== '-1') {
  api.main.boss_line_point_update_post({ data: params }).then((res: any) => {
   if (res.data.success) {
   this.$message.success('保存成功!')
   this.$router.push({
    name: 'pointList'
   })
   } else {
   this.$message.error(res.data.message)
   }
  })
 } else {
  api.main
  .boss_line_point_addAndBindLine_post({ data: params })
  .then((res: any) => {
   if (res.data.success) {
   this.$message.success('保存成功!')
   this.$router.push({
    name: 'pointList'
   })
   } else {
   this.$message.error(res.data.message)
   }
  })
 }
 }
}
</script>
<style lang="scss" scoped>
ul,
li {
 list-style: none;
 margin: 0;
 padding: 0;
}
.inline-form {
 display: flex;
 display: -webkit-flex;
 flex-direction: row;
 flex-wrap: wrap;
 .el-form-item {
 margin-bottom: 10px;
 margin-left: 15px;
 display: flex;
 }
 .el-button {
 margin-left: 15px;
 height: 32px;
 }
}
.action-bar {
 box-sizing: border-box;
 padding: 10px;
 padding-bottom: 0;

 border: {
 top: 1px solid #ddd;
 bottom: 1px solid #ddd;
 }
 .my-input {
 width: 150px;
 }
 .name-input {
 width: 260px;
 }
}
.el-select-dropdown__item {
 background-color: white;
 text-indent: 10px;
}
.claer {
 margin-top: 15px;
 float: right;
}

$map_height: calc(100vh - 55px - 50px - 75px - 15px);
.map-box {
 position: relative;

 height: $map_height;
 .map-tool {
 position: absolute;
 width: 220px;
 z-index: 170;
 top: 0;
 left: 0;
 max-height: 100%;

 box-sizing: border-box;
 padding: 10px;
 overflow-y: auto;

 background-color: #fff;
 box-shadow: 2px 4px 7px 1px #dedede;
 }
 .map {
 transition: all 0.6s;
 position: absolute;
 top: 0;
 right: 0;
 bottom: 0;
 left: 0;
 }
}
.swiper-box {
 position: relative;
 z-index: 161;

 display: flex;
 align-items: center;
 flex-direction: row;
 justify-content: center;

 width: 100%;

 transition: transform ease-in 0.6s;
 transform: translateX(0);
 white-space: nowrap;
 .swiper-item {
 width: 100%;
 height: $map_height;
 }
}
.hide-text-area {
 transform: translateX(-100%);
}
.gray-map {
 filter: grayscale(90%);
}
.longlat {
 margin-top: 15px;
 padding-bottom: 15px;

 ul {
 li {
  padding: 6px;
  background-color: #ddd;
  border-radius: 4px;
  margin-bottom: 15px;
  font-size: 14px;
  color: #666;
  position: relative;
 }
 }
}
.el-icon-close {
 display: inline-block;
 position: absolute;
 right: 10px;
 color: #000 !important;
 cursor: pointer;
}
.my-button {
 margin-bottom: 10px;
}
</style>

三、第二种画化:使用AMap.MouseTool画多边形(效果是:多边形随鼠标左键点击,多边形直接跟着变化)

// 新增 编辑 查看
<template>
 <div class="point">
 <el-header></el-header>
 <div class="action-bar">
  <el-form class="inline-form" :rules="rules" ref="formData" size="small" :model="formData">
  <el-form-item label prop="location">
   <el-input
   :disabled="!ifFalg"
   class="name-input"
   clearable
   v-model="formData.location"
   placeholder="名称"
   maxlength="30"
   ></el-input>
  </el-form-item>
  <el-form-item label prop="longitude">
   <el-input
   :disabled="!ifFalg"
   class="my-input"
   clearable
   v-model.number="formData.longitude"
   placeholder="经度 "
   ></el-input>
  </el-form-item>
  <el-form-item label prop="latitude">
   <el-input
   :disabled="!ifFalg"
   class="my-input"
   clearable
   v-model.number="formData.latitude"
   placeholder="纬度"
   ></el-input>
  </el-form-item>
  <el-button class="my-button" v-if="ifFalg" type="primary" @click="save" size="small">保存</el-button>
  <el-button class="my-button" size="small" @click="close">关闭</el-button>
  </el-form>
 </div>
 <div class="map-box">
  <div class="map-tool">
  <div v-if="ifFalg">
   <el-checkbox >地图上描点</el-checkbox>
  </div>
  <div class="longlat">
   <ul><li v-for="(item, index) in lnglatpoints" :key="index">
    {{item.longitude}} , {{item.latitude}}
    <i
    v-if="ifFalg"
    class="el-icon-close"
    @click="deletes(item)"
    ></i>
   </li>
   </ul>
   <br>
   <div>
   <span >输入范围经纬度:</span>
   <el-input
    type="textarea"
    autosize
    placeholder="请输入内容"
    v-model="lnglatpointsString">
   </el-input>
   </div>
   <el-button v-if="ifFalg" size="small" @click="clear1" type="primary" class="claer1">确定</el-button>
   <el-button v-if="ifFalg" size="small" @click="clear" type="primary" class="claer">清除</el-button>
  </div>
  </div>
  <div class="map" id="map">
  <el-amap
   ref="map"
   bubble
   :zoom="map.zoom"
   :center="map.center"
   :events="mapEvents"
   id="amap"
  >
   <el-amap-polygon
   :events="plugin.events"
   :path="path"
   fillColor="#2b83f9"
   fillOpacity="0.5"
   strokeWeight="0"
   strokeColor="#2b83f9"
   strokeOpacity="0.5"
   ></el-amap-polygon>
   <el-amap-marker v-if="formData.type === 1" :position="map.center" :label="label"></el-amap-marker>
  </el-amap>

  </div>
  <div class="my-tools">
  <el-row>
   <el-button type="primary" v-if="ifFalg" @click="drawPolygon()">鼠标绘制</el-button>
   <el-button type="primary" v-if="ifFalg" @click="polygonEditor.close()">结束编辑</el-button>
  </el-row>
 </div>
 </div>
 </div>
</template>
<script lang="ts">同上
 /**
 * 绘制多边形
 */
 private drawPolygon () {
   let vm: any = this
   let map = vm.$refs.map.$$getInstance()
   map.plugin(['AMap.MouseTool'], function () {
   var mouseTool = new AMap.MouseTool(map)
   var drawPolygon = mouseTool.polygon()
   AMap.event.addListener(mouseTool, 'draw', function (e: any) {
    e.obj.Je.visible = false
    let path = e.obj.getPath()
    vm.drawPolygonsToMap(path)

    path.forEach((point:any) => {
     vm.lnglatpoints.push({
      latitude: point.lat,
      longitude: point.lng
     })
    });
    // vm.mapDates =path
    // e.obj.hide()
    mouseTool.close()
   })
   })

 }
同上
}
</script>
<style lang="scss" scoped>
和上面一样
</style>

三、第三种画化:使用AMap.Polygon和AMap.PolyEditor画多边形(推荐,效果是:https://lbs.amap.com/api/javascript-api/example/overlayers/polygon-draw-and-edit

  注意哦:1、以为这种画多边形,先需要3个点来确定初始的多边形,所以添加了一个功能:搜索 (功能:点击搜索名称的经纬度;);

      2、然后我再 ‘范围绘制' 的方法里根据“搜索”得来的经纬度,手动的弄了3个经纬度数组。

      3、然后就可以快乐的画图了。(这画图是真的方便,特别是画范围很复杂的)。

// 新增 编辑 查看
<template>
 <div class="point">
 <el-header></el-header>
 <div class="action-bar">
  <el-form class="inline-form" :rules="rules" ref="formData" size="small" :model="formData">
  <el-form-item label prop="location">
   <el-input
   :disabled="!ifFalg"
   class="name-input"
   clearable
   v-model="formData.location"
   placeholder="名称"
   maxlength="30"
   ></el-input>
  </el-form-item>     <el-button class="my-button" type="info" @click="getLocation" size="small">搜索</el-button>
  <el-form-item label prop="longitude">
   <el-input
   :disabled="!ifFalg"
   class="my-input"
   clearable
   v-model.number="formData.longitude"
   placeholder="经度 "
   ></el-input>
  </el-form-item>
  <el-form-item label prop="latitude">
   <el-input
   :disabled="!ifFalg"
   class="my-input"
   clearable
   v-model.number="formData.latitude"
   placeholder="纬度"
   ></el-input>
  </el-form-item>
  <el-button class="my-button" v-if="ifFalg" type="primary" @click="save" size="small">保存</el-button>
  <el-button class="my-button" size="small" @click="close">关闭</el-button>
  </el-form>
 </div>
 <div class="map-box">
  <div class="map-tool">
  <div v-if="ifFalg">
   <el-checkbox >地图上描点</el-checkbox>
  </div>
  <div class="longlat">
   <ul>
   <li v-for="(item, index) in lnglatpoints" :key="index">
    {{item.longitude}} , {{item.latitude}}
    <i
    v-if="ifFalg"
    class="el-icon-close"
    @click="deletes(item)"
    ></i>
   </li>
   </ul>
   <br>
   <div>
   <span >输入范围经纬度:</span>
   <el-input
    type="textarea"
    autosize
    placeholder="请输入内容"
    v-model="lnglatpointsString">
   </el-input>
   </div>
   <el-button v-if="ifFalg" size="small" @click="clear1" type="primary" class="claer1">确定</el-button>
   <el-button v-if="ifFalg" size="small" @click="clear" type="primary" class="claer">清除</el-button>
  </div>
  </div>
  同上
  <div class="my-tools">
  <el-row>
   <el-button type="primary" v-if="ifFalg" @click="drawPolygon()">鼠标绘制</el-button>
   <el-button type="primary" v-if="ifFalg" @click="polygonEditor.close()">结束编辑</el-button>
  </el-row>
 </div>
 </div>
 </div>
</template>
<script lang="ts">
同上

//画多边形
  private drawPolygon(){
  let vm: any = this
  if (vm.formData.location === '' || vm.formData.location === null) {
   this.$message.warning('请先输入名称,才能开始画范围!')
   return
  }
  let map = new AMap.Map("map", {
    center:[106.55073, 29.56471],
    zoom: 15
  });
   // 多边形覆盖物节点坐标数组
  let polygonArr:any = []
  let lng = Number(this.formData.longitude)
  let lat = Number(this.formData.latitude)
  if(vm.path.length > 0){
    polygonArr = vm.path
  }else{
    polygonArr.push([lng, lat])
    polygonArr.push([lng, lat - 0.001])
    polygonArr.push([lng - 0.001, lat - 0.001])
  }
  //使用 AMap.Polygon构建多边形
  let polygon = new AMap.Polygon({
    path:polygonArr,
    strokeColor: "#FF33FF",
    strokeWeight: 6,
    strokeOpacity: 0.2,
    fillOpacity: 0.4,
    fillColor: '#1791fc',
    zIndex: 50,
  })
  //将多边形增加到地图上
  map.add(polygon)
  // 缩放地图到合适的视野级别
  map.setFitView([ polygon ])
  //构造折线编辑对象,并开启折线的编辑状态
  map.plugin(["AMap.PolyEditor"],function(){
   let polygonEditor = new AMap.PolyEditor(map,polygon);
    vm.polygonEditor =polygonEditor
    polygonEditor.open();
   //关闭多边形编辑polygonEditor.close()触发该方法;
    polygonEditor.on('end', function(event:any) {
    // event.target 即为编辑后的多边形对象,event.target.getPath()得到编辑完成后的点数组
    let pointArr = event.target.getPath()
    vm.lnglatpoints = []
    pointArr.forEach((point:any)=>{
     vm.lnglatpoints.push({latitude: point.lat,longitude: point.lng})
    })
    

vm.path = []
    vm.lnglatpoints.map((val: any, index: number) => {
    let arr = [val.longitude, val.latitude]
    vm.path.push(arr)
    if (index === 0) {
    vm.map.center = [val.longitude, val.latitude]
    }
   })

  })
  });
 }
 /**
  * 地理编码(地址 -> 坐标)
  */
 private getLocation () {
  let loc = this.formData.location
  AMap.plugin('AMap.Geocoder', () => {
   let geocoder = new AMap.Geocoder()
   geocoder.getLocation(loc, (status: string, result: any) => {
    if (status === 'complete' && result.info === 'OK') {
     let { lat, lng } = result.geocodes[0].location
     if (lat && lng) {
      this.map.center = [lng, lat]
      this.formData.longitude=lng
      this.formData.latitude=lat
     }
    }
   })
  })
 }

 同上
}
</script>
<style lang="scss" scoped>
和上面一样
</style>

总结

到此这篇关于最全vue的vue-amap使用高德地图插件画多边形范围的文章就介绍到这了,更多相关vue-amap高德地图插件画多边形范围内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue 使用高德地图vue-amap组件过程解析

    这篇文章主要介绍了vue 使用高德地图vue-amap组件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先 npm install -S vue-amap 然后在 main.js import VueAMap from 'vue-amap'; //注意不要和 AMap原始名称覆盖 Vue.use(VueAMap); // 初始化vue-amap VueAMap.initAMapApiLoader({ // 高德的key key: '

  • Vue 引入AMap高德地图的实现代码

    本文代码仅针对 Vue CLI 3.x 生成的项目有效,但是在第二步配置的时候,可以直接配置 webpack.externals,所以本引入思路是通用的,并不局限于该项目 资源 AMap 准备-入门教程 引入 AMap 在 public/index.html 文件 </body> 前引入 <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.14&key=您申请的

  • Vue的百度地图插件尝试使用

    百度地图插件 安装 CDN全局安装 <script src="https://unpkg.com/vue-baidu-map"></script> 插件的引入 Vue.use(VueBaiduMap.default, { ak: 'YOUR_APP_KEY', }) ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apico... 地图视图 BmView 是用于渲染百度地图实例可视化区域的容器 使用 Bmview 渲

  • 最全vue的vue-amap使用高德地图插件画多边形范围的示例代码

    一.在vue-cli的框架下的main.js(或者main.ts)中引入高德插件,代码如下: import Vue from 'vue' import VueAMap from 'vue-amap' import ElementUI from 'element-ui' import App from './App.vue' import router from './router' import store from './store' import './registerServiceWork

  • Android 仿高德地图可拉伸的BottomSheet的示例代码

    前言 最近项目中需要用到高德地图搜索结果后的结果展示的可拉伸控件. gaode.gif 而我看到这个效果图,觉得这个就是一个slidingpanel,但是翻阅了一些发现用google自带的bottomsheet实现更方便 什么是BottomSheet? Bottom Sheet是Design Support Library23.2 版本引入的一个类似于对话框的控件,可以暂且叫做底部弹出框吧. Bottom Sheet中的内容默认是隐藏起来的,只显示很小一部分,可以通过在代码中设置其状态或者手势操

  • VUE饿了么树形控件添加增删改功能的示例代码

    本文介绍了VUE饿了么树形控件添加增删改功能的示例代码,分享给大家,具体如下: element-ui树形控件:地址 在原文档中有个案例是有新增和删除功能,但是后来发现其修改的数据并不能直接影响到树形数据,所以采用了 render-content 的API重新写了个组件. 写个开发的步骤,所以文章比较长emmm 大致效果如图: 1.省市API 在网上复制了个省市的list,有两个属性是新增的 isEdit :控制编辑状态 maxexpandId :为现下id的最大值 export default{

  • Vue.js获取手机系统型号、版本、浏览器类型的示例代码

    1.index.html引入 <script src="http://code.jquery.com/jquery-1.11.1.min.js"> </script> <script src="https://cdn.jsdelivr.net/npm/mobile-detect@1.4.4/mobile-detect.min.js"> </script> 2.直接用 <script> //判断数组中是否包含

  • Android仿高德首页三段式滑动效果的示例代码

    目录 高德的效果 实现的效果 自定义View源码 xml布局中的使用 高德首页按钮处理 源码地址 最近发现很多app都使用了三段式滑动,比如说高德的首页和某宝等物流信息都是使用的三段式滑动方式,谷歌其实给了我们很好的2段式滑动,就是BottomSheet,所以这次我也是在这个原理基础上做了一个小小的修改来实现我们今天想要的效果. 高德的效果 实现的效果 我们实现的效果和高德差距不是很大,也很顺滑.具体实现其实就是继承CoordinatorLayout.Behavior 自定义View源码 /**

  • 微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例

    本文实例讲述了微信小程序map组件结合高德地图API实现wx.chooseLocation功能.分享给大家供大家参考,具体如下: 声明 bug: 页面搜索返回的列表在真机测试是会出现不显示问题? 造成原因:在小程序map组件的同一区域,map组件的视图层比普通的文本视图层要高,所以在真机会遮挡! 解决办法:将该文本视图采用cover-view,放在map中. 感谢: 感谢Lrj_estranged指出问题! 效果图 实现原理 通过高德地图的微信小程序开发API(getInputtips),实现关

  • vue基于Vue2.0和高德地图的地图组件实例

    前言 在做基于LBS的应用中,时常会和地图打交道,最直接的解决方案,当然是去对应的地图官网找文档,然后一步步来玩.对于简单场景而言,体验应该还好,但对于一些状态多,变化频繁的复杂场景而言,不仅要时刻维护本地数据状态和地图状态同步,还要查找设置各种状态的地图API,实在是让人头疼的事情. 设计vue-amap的初衷,也就是为了让开发者,在编写地图应用时,能从查找众多地图API和繁琐的地图状态同步中解脱出来. 那么vue-amap是如何做到的,又能给开发者带来怎样的便利与开发体验呢?我们就从一个轻点

  • 使用Vue做一个简单的todo应用的三种方式的示例代码

    1. 引用vue.js <!DOCTYPE html> <html> <head> <script src="http://vuejs.org/js/vue.js"></script> <meta charset="utf-8"> <title>JS Bin</title> </head> <body> <div id="root&

  • vue中axios防止多次触发终止多次请求的示例代码(防抖)

    需求 例如在搜索框中,并不是你输入一个字就需要渲染一次数据,而是取最后一次的输入内容进行搜索. 连续按下 AAAAA ,只取最后一次按下时搜索框的内容(即:AAAAA)进行搜索. 而不是搜索跟 A(第一次按下),AA(第二次按下),AAA相关联的内容 本文例子:  检测用户输入的值,监测这个值,然后根据值调用接口查询结果 代码: <template> <input type="text" v-model="message"> <temp

  • vue基于vant实现上拉加载下拉刷新的示例代码

    前言 普遍存在于各种app中的上拉加载下拉刷新功能大家都不陌生吧,一般来说,在数据量比较大的情况下,为了更快的渲染和给用户更好的观感体验,我们会将数据做分页处理,让其批量加载,这样一来,在渲染速度上,能给用户一个比较好的体验效果.话说回来,分页处理,也就是我们今天要讲的上拉加载和下拉刷新. 实现思路 下拉刷新: 请求接口赋完值后,将接口返回数据长度与总条数进行比较控制加载不加载的状态,在下拉刷新方法中定义起始页码为第一页,调整加载的状态为false,最后调用请求数据的接口方法,做适当轻提示即可.

随机推荐