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

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

代碼實(shí)現(xiàn)和 Demo 演示
梳理清思路后,代碼實(shí)現(xiàn)就比較簡單了。這里用 Vue3 在 CodeSandbox 由于這里無法渲染,放上鏈接和部分代碼。也可以在我的博客上看到 Demo。
部分關(guān)鍵代碼:
<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 {
/*坐標(biāo)動畫和位置*/
...
animation: shake 0.5s ease infinite alternate;
}
</style>
拓展
在這個實(shí)現(xiàn)下,要獲得不錯的效果主要依賴背景圖片是否合適,圖片大小、邊緣留白等都會影響最終的效果。如果是針對不規(guī)則的地形組合,可能用 SVG 或 Canvas 來實(shí)現(xiàn)更好,但相對的代碼復(fù)雜度也會上升。
除了方位標(biāo)識,類似的實(shí)現(xiàn)也可以拓展到其他場景,比如車廂內(nèi)的座位標(biāo)識,停車場的車位標(biāo)識等。
到此這篇關(guān)于基于Vue3實(shí)現(xiàn)一個簡單的方位動畫的文章就介紹到這了,更多相關(guān)Vue3方位動畫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項(xiàng)目中使用crypto-js實(shí)現(xiàn)加密解密方式
這篇文章主要介紹了vue項(xiàng)目中使用crypto-js實(shí)現(xiàn)加密解密方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
Vue實(shí)現(xiàn)路由守衛(wèi)的示例代碼
Vue路由守衛(wèi)是控制頁面導(dǎo)航的鉤子函數(shù),主要用于鑒權(quán)、數(shù)據(jù)預(yù)加載等場景,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-09-09
AntV+Vue實(shí)現(xiàn)導(dǎo)出圖片功能
AntV?組織圖操作完畢以后,需要點(diǎn)擊按鈕將畫布以圖片的形式導(dǎo)出,這篇文章主要介紹了AntV結(jié)合Vue實(shí)現(xiàn)導(dǎo)出圖片功能,需要的朋友可以參考下2023-01-01
Vue中 key keep-alive的實(shí)現(xiàn)原理
這篇文章主要介紹了Vue中 key keep-alive的實(shí)現(xiàn)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
vue.js watch經(jīng)常失效的場景與解決方案
這篇文章主要給大家介紹了關(guān)于vue.js watch經(jīng)常失效的場景與解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
解決vue刷新頁面以后丟失store的數(shù)據(jù)問題
這篇文章主要介紹了解決vue刷新頁面以后丟失store的數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

