![88aff350ebea14ad96583919b234159b.png](https://img-blog.csdnimg.cn/img_convert/88aff350ebea14ad96583919b234159b.png)
1.项目框架Taro框架、dva脚手架2.需求促销活动:红包掉落,在有限时间领取红包,点击有爆炸效果(爆炸效果此处用小红心代替了)
3. 小程序不支持e.clientX 、 e.target.offsetLeft、e.target.offsetTop需要用e.detail.x、e.detail.y;倒计时和注册组件代码没有粘出来
![dfc434050f50ee2ef3bbca45f2da8e7b.png](https://img-blog.csdnimg.cn/img_convert/dfc434050f50ee2ef3bbca45f2da8e7b.png)
![e5eb524a8ccd930fabf5e06ed8049256.png](https://img-blog.csdnimg.cn/img_convert/e5eb524a8ccd930fabf5e06ed8049256.png)
4.活动页面完整代码
import Taro, {
Config} from '@tarojs/taro';
import {
View, Image, Text } from '@tarojs/components';
import {
Modal, Register } from 'components';
import {
Inject, auth, getTokenInfo, RouterComponent, routerFns, urlFns, MESC } from 'utils';
import {
AppInfoService, itemConfig} from 'services';
import {
RedEnvelopedRainService } from './index.service';
import style from './index.module.less';
import {
AuthWrapper } from 'components/auth-wrapper/auth-wrapper'; //授权组件
import {
Countdown } from 'store'; // 倒计时组件
import {
observer, inject } from '@tarojs/mobx';
export interface IndexProps {
countdown?: Countdown;
}
@inject('countdown')
@observer
export default class index extends RouterComponent<IndexProps> {
config: Config = {
enablePullDownRefresh: false,
};
state = {
activityId: Number(routerFns.getParams(this).activityId) || 13097,
list: [], // 点击爆炸
memberStatus: 3, // 判断用户是否注册
registerVisible: false, // 注册组件
countdownTime: 60 * MESC.SECOND,
activeStatus: 0,
rainVisible: 0, // 红包雨是否显示
giftNum: 0, // 红包个数
bkgnd: {}, // 后台控制数据
activityData: {}, // 活动数据 activeStatus: -1活动未开始 0 立即开始 1 派发红包 2 今日机会用完 3 活动抽赠机会已用完 4 活动结束; appName:活动名称 activeImgUrl:活动背景图
rewardData: {}, // 获奖数据 rewardType:1现金红包 2满减券 3实物奖品 4再来一次 5谢谢参与
}
@Inject(RedEnvelopedRainService) rerService: RedEnvelopedRainService;
@Inject(AppInfoService) appInfoService: AppInfoService;
componentDidHide() {
this.props.countdown!.toEnd();
}
componentWillUnmount() {
this.props.countdown!.toEnd();
}
componentDidMount() {
auth.afterAuthed(() => {
this.getActiveDetail(); // 获取活动配置
this.getStatus(); // 获取注册状态
});
}
/**获取活动详情*/
getActiveDetail = () => {
let token = getTokenInfo();
th