MapLibre GL JS第63课:动画化标记
学习目标掌握动画化标记的实现方法理解相关API的使用能够独立完成类似功能开发 核心概念通过在每帧更新标记位置来动画化标记。 完 整 代 码!DOCTYPEhtmlhtmllangenheadtitleAnimate a marker/titlemetapropertyog:descriptioncontent通过在每一帧更新位置来动画化标记的位置。/metapropertyog:createdcontent2006-06-25/metacharsetutf-8metanameviewportcontentwidthdevice-width, initial-scale1linkrelstylesheethrefhttps://unpkg.com/maplibre-gl5.24.0/dist/maplibre-gl.css/scriptsrchttps://unpkg.com/maplibre-gl5.24.0/dist/maplibre-gl.js/scriptstylebody{margin:0;padding:0;}html, body, #map{height:100%;}/style/headbodydividmap/divscriptconstmapnewmaplibregl.Map({container:map,style:https://demotiles.maplibre.org/style.json,center:[0,0],zoom:2});constmarkernewmaplibregl.Marker();functionanimateMarker(timestamp){constradius20;// 根据动画时间戳将数据更新到新位置。// 表达式 timestamp / 1000 中的除数控制动画速度。marker.setLngLat([Math.cos(timestamp/1000)*radius,Math.sin(timestamp/1000)*radius]);// 确保将其添加到地图。如果已经添加调用此方法是安全的。marker.addTo(map);// 请求动画的下一帧。requestAnimationFrame(animateMarker);}// 开始动画。requestAnimationFrame(animateMarker);/script/body/html 代码解析1. 初始化地图使用new maplibregl.Map()创建地图实例配置了以赤道为中心的全球视图。2. 关键配置项requestAnimationFrame: 浏览器原生动画API实现60fps流畅动画Math.cos/sin: 使用三角函数计算圆形运动轨迹timestamp: 动画时间戳用于计算当前位置setLngLat(): 更新标记位置⚙️ 参数说明参数类型必填说明radiusnumber是圆形运动半径度数speednumber是动画速度控制timestamp除数timestampnumber是requestAnimationFrame传入的时间戳 效果说明运行代码后地图显示全球视图标记以20度为半径围绕地图中心0, 0做匀速圆周运动。动画平滑流畅标记位置每帧更新一次。 常 见 问 题Q1: 动画不流畅A:检查以下几点确认使用requestAnimationFrame而非setInterval减少每一帧的计算复杂度避免在动画回调中进行DOM操作Q2: 如何停止动画A:使用cancelAnimationFrame停止动画constanimationIdrequestAnimationFrame(animateMarker);// 停止动画cancelAnimationFrame(animationId);Q3: 如何实现其他运动轨迹A:修改位置计算逻辑// 直线运动marker.setLngLat([startLng(endLng-startLng)*progress,startLat(endLat-startLat)*progress]);// 椭圆运动marker.setLngLat([Math.cos(timestamp/1000)*radiusX,Math.sin(timestamp/1000)*radiusY]); 练习任务基础练习修改运动半径和速度观察动画效果变化进阶挑战实现直线运动动画拓展思考如何实现带缓动效果的动画综合实践创建一个模拟车辆行驶轨迹的动画 最佳实践动画流畅性: 使用requestAnimationFrame而非setInterval性能优化: 避免在动画回调中进行DOM操作和复杂计算资源管理: 及时取消不再需要的动画避免内存泄漏帧率控制: 考虑使用时间增量而非固定间隔用户体验: 提供开始/暂停控制允许用户控制动画 延伸阅读Map API文档MapLibre GL JS 官方文档[下一课预告]将继续学习地图图层的基础知识本文是MapLibre GL JS实践课程系列的一部分欢迎关注收藏

相关新闻

3步实现TranslucentTB中文界面:让Windows任务栏透明工具说你的语言

3步实现TranslucentTB中文界面:让Windows任务栏透明工具说你的语言

3步实现TranslucentTB中文界面:让Windows任务栏透明工具说你的语言 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否在使…

2026/6/22 20:19:43阅读更多 →
物联网MCU安全与扩展性实战:NXP Kinetis K8x硬件加密与QuadSPI应用解析

物联网MCU安全与扩展性实战:NXP Kinetis K8x硬件加密与QuadSPI应用解析

1. 项目概述:为什么我们需要一颗“既安全又能装”的物联网MCU?在物联网项目里摸爬滚打多年的工程师,大概都经历过类似的纠结:选一颗性能足够、价格合适的MCU不难,难的是如何在有限的成本和资源下,同时搞定安…

2026/6/22 20:14:42阅读更多 →
如何快速掌握开源字幕编辑工具:Subtitle Edit完整指南

如何快速掌握开源字幕编辑工具:Subtitle Edit完整指南

如何快速掌握开源字幕编辑工具:Subtitle Edit完整指南 【免费下载链接】subtitleedit the subtitle editor :) 项目地址: https://gitcode.com/gh_mirrors/su/subtitleedit 还在为字幕制作而烦恼吗?不同步、格式混乱、翻译困难……这些困扰无数视…

2026/6/22 20:14:42阅读更多 →
如何快速掌握macOS系统监控:Stats完整指南

如何快速掌握macOS系统监控:Stats完整指南

如何快速掌握macOS系统监控:Stats完整指南 【免费下载链接】stats macOS system monitor in your menu bar 项目地址: https://gitcode.com/GitHub_Trending/st/stats 想要实时了解你的Mac运行状态吗?Stats是一款功能强大的macOS系统监控工具&…

2026/6/22 21:45:07阅读更多 →
6月22日蚂蚁集团董事会换届,何小鹏等任独董,智驾与AI合作或迎新可能

6月22日蚂蚁集团董事会换届,何小鹏等任独董,智驾与AI合作或迎新可能

6月22日,蚂蚁集团董事会完成换届,小鹏汽车何小鹏等三人成新任独立董事。何小鹏与蚂蚁渊源颇深,双方业务交集多,他入局或为蚂蚁AI布局带来新变量。董事会换届情况蚂蚁集团官网显示,何小鹏、白重恩、曾顺福获聘新任独立董…

2026/6/22 21:45:07阅读更多 →
BetterNCM-Installer:3分钟搞定网易云音乐插件安装的智能解决方案

BetterNCM-Installer:3分钟搞定网易云音乐插件安装的智能解决方案

BetterNCM-Installer:3分钟搞定网易云音乐插件安装的智能解决方案 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾经为了给网易云音乐安装插件而苦恼?从…

2026/6/22 21:45:07阅读更多 →
【Springboot毕设全套源码+文档】springboot基于微服务架构的校内电动车租赁系统的设计与实现(丰富项目+远程调试+讲解+定制)

【Springboot毕设全套源码+文档】springboot基于微服务架构的校内电动车租赁系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/22 21:45:07阅读更多 →
Nginx map模块详解:CentOS 7下高性能运行时变量映射实战

Nginx map模块详解:CentOS 7下高性能运行时变量映射实战

1. 项目概述&#xff1a;Nginx map模块不是“函数”&#xff0c;而是运行时动态变量生成器在CentOS 7环境下配置Nginx时&#xff0c;很多人第一次看到map指令会下意识联想到Java里的Map<String, Object>、JavaScript的Map对象&#xff0c;甚至Go Zero里的MapReduce——但…

2026/6/22 21:45:07阅读更多 →
3步掌握LayoutLMv3:如何用多模态Transformer实现智能文档理解?

3步掌握LayoutLMv3:如何用多模态Transformer实现智能文档理解?

3步掌握LayoutLMv3&#xff1a;如何用多模态Transformer实现智能文档理解&#xff1f; 【免费下载链接】Transformers-Tutorials This repository contains demos I made with the Transformers library by HuggingFace. 项目地址: https://gitcode.com/GitHub_Trending/tr/T…

2026/6/22 21:40:06阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM&#xff0c;WorkFlow&#xff0c;Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1&#xff09;LLM2&#xff09;Prompt3&#xff09;Me…

2026/6/22 6:01:42阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件&#xff1a;从原理到实战的深度解析在嵌入式系统开发中&#xff0c;图形用户界面&#xff08;GUI&#xff09;的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台&#xff0c;嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/22 1:15:34阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”&#xff0c;而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时&#xff0c;第一反应可能是&#xff1a;又一个免费额度&#xff1f;领完就完事&#xff1f;我亲手试过——这300美金根本不是红包&#xff0c;而是一张入场券&…

2026/6/22 5:42:46阅读更多 →
Codex本地AI编码代理与CC Switch协议适配实战

Codex本地AI编码代理与CC Switch协议适配实战

1. Codex不是“另一个VS Code插件”&#xff0c;而是本地AI编码代理的临界点Codex这个名字&#xff0c;现在被太多人误读了。它不是ChatGPT那个早已停更的旧模型代号&#xff0c;也不是某个新出的VS Code扩展图标——它是2024年中后期悄然浮出水面的一类本地化AI编码代理&#…

2026/6/22 0:04:18阅读更多 →
从MSP430到Flexis QE128:8/32位MCU无缝迁移与低功耗设计实战

从MSP430到Flexis QE128:8/32位MCU无缝迁移与低功耗设计实战

1. 项目概述&#xff1a;当8位MCU遇到性能瓶颈&#xff0c;我们如何优雅升级&#xff1f;在嵌入式开发领域&#xff0c;尤其是电池供电的便携式设备、工业传感器节点或智能家居终端中&#xff0c;我们常常面临一个经典的两难选择&#xff1a;是选择功耗极低但性能有限的8位微控…

2026/6/22 0:04:18阅读更多 →
大语言模型空间推理能力提升:TEXT2SPACE数据集与ASCII增强技术解析

大语言模型空间推理能力提升:TEXT2SPACE数据集与ASCII增强技术解析

1. 项目缘起&#xff1a;当大语言模型“看”不懂空间 最近在折腾大语言模型&#xff08;LLM&#xff09;的各种应用时&#xff0c;我发现一个挺有意思的现象&#xff1a;你让模型写首诗、写代码、甚至做逻辑推理&#xff0c;它可能都表现得有模有样。但一旦涉及到需要理解“空间…

2026/6/22 0:04:18阅读更多 →