当前位置: 首页 > news >正文

190.Vue3 + OpenLayers 实战:实现地图旋转移动动画 + CSS缩放动画(详解 animate 用法)

一、实现效果

页面包含一个按钮 + 地图 + 动画提示

点击开始动画后,会执行以下流程:

1️⃣ 地图移动到指定位置
2️⃣ 地图开始旋转
3️⃣ 地图继续缩放移动
4️⃣ 动画结束后出现 CSS 动画提示


二、项目技术栈

本文示例使用技术:

技术说明
Vue3前端框架
OpenLayersWebGIS 地图库
Element PlusUI组件
CSS3动画效果

三、完整代码实现

下面是Vue3 + OpenLayers 完整示例代码

<!-- * @Author: 彭麒 * @Date: 2026/3/17 * @Email: 1062470959@qq.com * @Description: 此源码版权归吉檀迦俐所有,可供学习和借鉴或商用。 --> <template> <div class="container"> <div class="w-full flex justify-center flex-wrap"> <div class="font-bold text-[24px]"> vue3 + openlayers: 地图旋转移动动画、CSS缩放动画 </div> </div> <h4> <el-button type="success" size="small" @click="go">开始动画</el-button> </h4> <div id="vue-openlayers"></div> <div class="end" v-if="isEnd"> 恭喜发财 </div> </div> </template> <script setup> import { ref, onMounted } from "vue" import 'ol/ol.css' import Map from "ol/Map" import View from "ol/View" import Tile from "ol/layer/Tile" import {createFastMapSource} from "@/utils/mapUtils"; // 状态 const isEnd = ref(false) let map = null // 开始动画 const go = () => { isEnd.value = false map.getView().animate( { zoom: 5, center: [116, 39], duration: 2000, }, { zoom: 6, center: [114, 39], duration: 3000, rotation: Math.PI, }, { zoom: 9, center: [115, 37], duration: 4000, rotation: 2 * Math.PI, }, () => { isEnd.value = true } ) } // 初始化地图 const initMap = () => { map = new Map({ target: 'vue-openlayers', layers: [ new Tile({ source: createFastMapSource() }) ], view: new View({ projection: 'EPSG:4326', center: [114.064839, 22.548857], zoom: 4 }) }) } onMounted(() => { initMap() }) </script> <style scoped> .container { width: 840px; height: 590px; margin: 50px auto; border: 1px solid #42B983; position: relative; } #vue-openlayers { width: 800px; height: 420px; margin: 0 auto; border: 1px solid #42B983; position: relative; } .end { position: absolute; left: 320px; top: 240px; width: 200px; height: 100px; text-align: center; font-size: 28px; line-height: 100px; background-color: red; color: #fff; animation: myfirst 5s; } @keyframes myfirst { from { background: red; transform: scale(2); } to { background: yellow; transform: scale(1); } } </style>

四、OpenLayers animate 方法详解

OpenLayers 动画核心 API:

view.animate()

官方方法:

view.animate(options1, options2, ..., callback)

参数说明:

参数作用
center地图中心点
zoom地图缩放级别
rotation地图旋转角度
duration动画持续时间
easing动画缓动函数

1 地图移动动画

view.animate({ center: [116,39], duration:2000 })

地图会平滑移动到指定位置


2 地图缩放动画

view.animate({ zoom: 8, duration:2000 })

地图会平滑缩放到指定级别


3 地图旋转动画

view.animate({ rotation: Math.PI })

说明:

Math.PI = 180°
2 * Math.PI = 360°


4 连续动画

animate 支持多个动画串联执行

view.animate( {...}, {...}, {...} )

执行顺序:

动画1 → 动画2 → 动画3


5 动画结束回调

view.animate( {...}, {...}, ()=>{console.log("动画结束")} )

六、动画缓动函数

OpenLayers 提供多种缓动函数:

import {easeIn,easeOut,inAndOut,linear} from 'ol/easing'

示例:

view.animate({ zoom:8, duration:2000, easing: easeOut })

效果:

缓动说明
easeIn逐渐加速
easeOut逐渐减速
linear匀速
inAndOut先加速再减速

七、实际项目应用场景

在 WebGIS 项目中,地图动画经常用于:

1 飞行定位

view.animate({ center: point, zoom: 16 })

2 自动巡航展示

依次飞行多个点位。


3 三维展示

地图旋转展示区域。


4 数据演示

逐步展示不同区域的数据。


八、总结

本文介绍了Vue3 + OpenLayers 实现地图动画的方法,包括:

✔ 地图移动动画
✔ 地图缩放动画
✔ 地图旋转动画
✔ animate API 使用方法
✔ CSS 动画结合

核心 API:

view.animate()

在 WebGIS 项目中,合理使用动画可以显著提升:

  • 用户体验

  • 地图交互性

  • 数据展示效果


如果你正在做WebGIS / OpenLayers / Cesium 项目开发,这些动画技巧是非常实用的能力

http://www.jsqmd.com/news/493675/

相关文章:

  • HunterPie配置系统深度解析:现代游戏覆盖层的智能管理架构
  • 当心!你选的访客系统正悄悄出卖公司隐私
  • Git误操作急救手册:拯救代码全攻略
  • MinerU入门教程:3步学会使用智能文档理解,提升工作效率
  • 互联网大厂Java面试:水货程序员的搞笑经历
  • 基于code-server打造私有AI编程工作站
  • 深入理解 Spring 中的 @Primary 与 @Qualifier
  • 不止调亮度!晚上玩手机的 “护眼全链路” 设置指南
  • 电动汽车高压平台采用率持续上升
  • 基于PP-DocLayoutV3的VMware虚拟机文档自动化管理
  • 机械毕业设计选题指南:从工程问题到技术实现的选题方法论
  • Qwen2-VL-2B-Instruct保姆级部署教程:Windows系统下Docker环境配置详解
  • Ollama部署本地大模型:translategemma-12b-it在国际学校双语教材智能批改中的应用
  • Face Fusion人脸合成实测:3步搞定自然换脸,小白也能成高手
  • HY-MT1.5-1.8B保姆级教程:3步搞定SRT字幕文件智能翻译
  • Retinaface+CurricularFace实战:智能考勤打卡系统快速搭建教程
  • Compose 三层结构设计规范1(基于Slot API)
  • 为什么IP定位总是不准?揭秘IP定位的“精度分层”与选型策略
  • 机械臂构型全解析:从笛卡尔到Delta,哪种最适合你的项目?
  • 低空+公安警务:空天地一体化构建智慧安防新范式,SaaS应用重磅开放
  • 深入人工智能核心:MiniCPM-V-2_6模型架构与训练技术解析
  • OFA模型STM32项目展示:边缘设备图像描述的概念验证
  • ViT: 用transformer架构解决视觉问题
  • Phi-3 Forest Laboratory 开发环境搭建:Ubuntu系统保姆级部署教程
  • 卷积怎么实现?手写 CNN 才让我真正搞懂 im2col
  • 英伟达 NIM API 配置 Claude Code 完整教程(使用 CCR UI)
  • 暗黑破坏神2存档编辑器终极指南:免费开源工具让你的游戏体验更完美
  • 向量数据库存储与检索
  • 01-N8N进阶指南-利用Docker容器化部署与云服务集成实战
  • 微信小程序文件索引化管理与高效检索实践