网站首页 > 技术文章 正文
Vue3 + TS + Leafletjs 打造企业级原神大地图「完结」
xia仔ke:quangneng.com/5368/
获取资源:上方URL获取资源
使用 Vue3 + TypeScript + Leaflet.js 构建企业级《原神》大地图应用
《原神》是一款广受欢迎的角色扮演游戏,其开放世界的设计让玩家可以在不同的国度中探索。为了更好地帮助玩家理解游戏中的地理布局,创建一个交互式的大地图应用会非常有用。本文将指导你如何使用 Vue3、TypeScript 和 Leaflet.js 开发这样一个应用。
一、项目规划
- 需求分析:定义地图应用的目标和功能,例如标记关键地点、显示NPC位置、用户上传自定义标记等。
- 技术选型:选择前端框架(Vue3)、类型系统(TypeScript)和地图库(Leaflet.js)。
- UI/UX 设计:设计美观且直观的用户界面。
二、技术栈
- 前端框架:Vue3 (基于 Composition API)
- 类型系统:TypeScript
- 地图库:Leaflet.js
- 状态管理:Pinia
- 路由管理:Vue Router
- 样式:Tailwind CSS
- 构建工具:Vite
三、项目搭建
- 初始化项目:使用 Vite 创建一个 Vue3 项目。
- bash深色版本
npm init vite@latest
# 选择 "Vue" 作为框架
- # 选择 "Typescript" 作为项目语言
- 安装依赖:
- bash深色版本
npm install leaflet
npm install @types/leaflet -D
bash深色版本
npx tailwindcss init -p
更新 vite.config.ts 文件,添加 Tailwind CSS 配置。
javascript深色版本
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { fileURLToPath, URL } from 'url';
import tailwindcss from 'tailwindcss';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue(), tailwindcss()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
css: {
preprocessorOptions: {
scss: {
additionalData: `@import "@/assets/scss/variables.scss";`
}
}
}
javascript深色版本
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: {
extend: {},
},
plugins: [],
- };
四、地图组件开发
- 创建地图组件:
- typescript深色版本
// src/components/Map.vue
<template>
<div ref="mapRef" class="map-container"></div>
</template>
<script lang="ts">
import { defineComponent, onMounted, ref } from 'vue';
import * as L from 'leaflet';
export default defineComponent({
setup() {
const mapRef = ref<HTMLDivElement | null>(null);
onMounted(() => {
if (mapRef.value) {
const map = L.map(mapRef.value).setView([37.7749, -122.4194], 13);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '? <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
maxZoom: 18,
}).addTo(map);
}
});
return {
mapRef,
};
},
});
</script>
<style scoped>
.map-container {
height: 600px;
width: 100%;
}
typescript深色版本
// 添加到 Map.vue 中
const addMarker = () => {
if (mapRef.value && map) {
const marker = L.marker([37.7749, -122.4194]).addTo(map);
marker.bindPopup("A popup").openPopup();
}
};
// 在 mounted 钩子中调用
onMounted(() => {
if (mapRef.value) {
const map = L.map(mapRef.value).setView([37.7749, -122.4194], 13);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '? <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
maxZoom: 18,
}).addTo(map);
addMarker();
}
- });
五、功能扩展
- 添加搜索功能:允许用户搜索特定的位置。
- 添加用户标记:让用户可以保存自己的标记。
- 加载《原神》地图数据:从API或数据库加载游戏内的地标和NPC位置。
六、部署与维护
- 部署:使用 Vercel 或 Netlify 进行部署。
- 持续集成:使用 GitHub Actions 或 GitLab CI/CD 设置自动化构建和部署流程。
- 性能优化:考虑使用 Webpack 或 Vite 进行代码分割、懒加载等功能。
七、总结
通过以上步骤,你可以构建一个功能丰富、交互性强的《原神》大地图应用。使用 Vue3 和 TypeScript 可以保证代码质量和可维护性,而 Leaflet.js 则提供了强大的地图功能。继续完善应用,加入更多交互性和个性化选项,你的应用将会成为《原神》玩家的宝贵工具。
请注意,本文只是一个概述性的指南。在实际开发过程中,你可能还需要处理更多的细节,例如错误处理、状态管理等。希望这个指南能够为你提供一个良好的起点。
猜你喜欢
- 2024-09-10 一个基于vite构建的vue3+pinia+ts+element初始化开箱即用的项目
- 2024-09-10 GitHub一篇《Vue 加载远程组件解决方案》,引起业内大佬点评
- 2024-09-10 页面刷新时vuex数据持久化问题的解决方案:第三方插件完美实现
- 2024-09-10 基于vite + Vue3 + element-plus的前后端分离基础项目搭建
- 2024-09-10 Vue导入模块import xxx from '@/xxx'中的@是什么含义?
- 2024-09-10 终于搞懂了!原来 Vue 3 的 generate 是这样生成 render 函数的
- 2024-09-10 Vue3 + TS 中使用 Provide/Inject 需要考虑的三大问题
- 2024-09-10 关于Vue3的setup attribute标识是否是一个值得使用的语法糖?
- 2024-09-10 聊一聊如何在Vue中使用事件总线( Event Bus)进行组件间通信
- 2024-09-10 vite+vue3实现网页版编辑器,带高亮以及代码提
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)