使用 Taro 和 React 来实现微信小程序中的地图气泡倒计时功能,你需要首先确保已经安装了 Taro CLI 并创建了一个 Taro 项目。接下来,我们将逐步实现这个功能。
1. 初始化 Taro 项目
如果你还没有安装 Taro CLI,可以使用 npm 或 yarn 进行安装:
npm install -g @tarojs/cli
# 或者
yarn global add @tarojs/cli
然后,创建一个新的 Taro 项目:
taro init myTaroApp
选择 React
作为框架,并选择 微信小程序
作为目标平台。
2. 项目结构
Taro 项目的结构通常类似于一个标准的 React 项目,但会包含一些 Taro 特有的配置文件。
3. 修改 config/index.js
确保你的项目配置中包含了微信小程序的配置。通常,这个配置已经在初始化的项目中设置好了。
4. 编写页面组件
在 src/pages
目录下创建一个新的页面,比如 MapPage
。
src/pages/MapPage/index.jsx
import React, { useState, useEffect, useRef } from 'react';
import Taro, { View, Map } from '@tarojs/components';
import './index.scss';
const MapPage = () => {
const [bubbles, setBubbles] = useState([]);
const mapContext = useRef(null);
useEffect(() => {
// 添加初始气泡
addBubble(116.397428, 39.90923, 10);
// 清理函数,用于清除所有气泡的倒计时
return () => {
bubbles.forEach(bubble => clearInterval(bubble.interval));
};
}, []);
const addBubble = (longitude, latitude, countdown) => {
const width = Taro.getSystemInfoSync().windowWidth;
const height = Taro.getSystemInfoSync().windowHeight;
const left = Math.random() * width - 50;
const top = Math.random() * height - 50;
const bubble = {
id: Date.now(),
longitude,
latitude,
left: `${left}px`,
top: `${top}px`,
countdown,
interval: null,
};
setBubbles(prevBubbles => [...prevBubbles, bubble]);
startCountdown(bubble);
};
const startCountdown = (bubble) => {
bubble.interval = setInterval(() => {
bubble.countdown -= 1;
setBubbles(prevBubbles =>
prevBubbles.map(b => (b.id === bubble.id ? bubble : b))
);
if (bubble.countdown <= 0) {
clearInterval(bubble.interval);
removeBubble(bubble.id);
}
}, 1000);
};
const removeBubble = (id) => {
setBubbles(prevBubbles => prevBubbles.filter(bubble => bubble.id !== id));
};
const onMapTap = (e) => {
const { longitude, latitude } = e.detail;
addBubble(longitude, latitude, 10);
};
return (
<View className='map-container'>
<Map
id='map'
longitude={116.397428}
latitude={39.90923}
scale={14}
markers={[{ id: 1, latitude: 39.90923, longitude: 116.397428 }]}
onTap={onMapTap}
style={{ width: '100%', height: '100vh' }}
/>
{bubbles.map(bubble => (
<View
key={bubble.id}
className='bubble'
style={{ left: bubble.left, top: bubble.top }}
>
<View className='bubble-content'>倒计时: {bubble.countdown}s</View>
</View>
))}
</View>
);
};
export default MapPage;
src/pages/MapPage/index.scss
.map-container {
position: relative;
width: 100%;
height: 100vh;
}
.bubble {
position: absolute;
width: 100px;
height: 100px;
background-color: rgba(255, 0, 0, 0.7);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 16px;
}
.bubble-content {
text-align: center;
}
5. 配置路由
在 src/app.config.js
中配置页面路由:
export default {
pages: [
'pages/MapPage/index',
// 其他页面...
],
window: {
backgroundTextStyle: 'light',
navigationBarBackgroundColor: '#fff',
navigationBarTitleText: 'WeChat',
navigationBarTextStyle: 'black',
},
};
6. 运行项目
使用 Taro CLI 运行项目:
taro build --type weapp --watch
或者使用 Taro 提供的开发工具(基于微信开发者工具)直接运行和调试:
taro dev:weapp
按照提示打开微信开发者工具,并选择你的项目目录进行预览和调试。
现在,你应该能够在微信小程序中看到一个带有气泡倒计时功能的地图页面。每个气泡在地图上随机生成,并每秒递减倒计时,直到倒计时结束,气泡会从页面上移除。