基于Vue3實現(xiàn)一個簡單的方位動畫
這是最近遇到的一個有點意思的需求,需要根據(jù)后端返回的數(shù)據(jù),在一塊地圖的具體的方位上顯示對應位置標識(位置圖釘)。不用十分精確,只要能表現(xiàn)出大致的方位即可。
類似下面的效果,有點像游戲里的地圖標識。

設計思路
由于不用十分精確,就用最簡單的 div + css 來實現(xiàn)位置標識的顯示和動畫。之后再通過配合背景圖片來保證最基礎的效果。
方位總共 9 個,東南西北中加上四個角,通過 Grid 布局讓其形成 3 * 3 的格子。位置標識只需要根據(jù)方位數(shù)據(jù)出現(xiàn)在對應的 div 中即可。
最后將這些方位用一個 div 包裹起來,只要設置外層 div 的背景即可實現(xiàn)。

代碼實現(xiàn)和 Demo 演示
梳理清思路后,代碼實現(xiàn)就比較簡單了。這里用 Vue3 在 CodeSandbox 由于這里無法渲染,放上鏈接和部分代碼。也可以在我的博客上看到 Demo。
部分關鍵代碼:
<template>
<!-- 九宮格部分 -->
<div class="display">
<div class="direction-container">
<div v-for="direction in directions" :key="direction.value" class="item">
<div v-if="selectedDirection === direction.value" class="pin"></div>
</div>
</div>
</div>
<!-- 下拉框 -->
</template>
<script setup>
import { ref } from "vue";
const directions = [
{ name: "north-west", value: "nw" },
{ name: "north", value: "n" },
{ name: "north-east", value: "ne" },
{ name: "west", value: "w" },
{ name: "center", value: "c" },
{ name: "east", value: "e" },
{ name: "south-west", value: "sw" },
{ name: "south", value: "s" },
{ name: "south-east", value: "se" },
];
const selectedDirection = ref(directions[0].value);
</script>
<style scoped>
/* 抖動動畫 */
@keyframes shake {
0% {
transform: translateY(0);
}
100% {
transform: translateY(10px);
}
}
.direction-container {
...
/* 3*3 grid 布局 */
display: grid;
grid-template-columns: repeat(3, 1fr);
...
}
.item {
...
}
.pin {
/*坐標動畫和位置*/
...
animation: shake 0.5s ease infinite alternate;
}
</style>
拓展
在這個實現(xiàn)下,要獲得不錯的效果主要依賴背景圖片是否合適,圖片大小、邊緣留白等都會影響最終的效果。如果是針對不規(guī)則的地形組合,可能用 SVG 或 Canvas 來實現(xiàn)更好,但相對的代碼復雜度也會上升。
除了方位標識,類似的實現(xiàn)也可以拓展到其他場景,比如車廂內的座位標識,停車場的車位標識等。
到此這篇關于基于Vue3實現(xiàn)一個簡單的方位動畫的文章就介紹到這了,更多相關Vue3方位動畫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

