You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
233 lines
6.5 KiB
TypeScript
233 lines
6.5 KiB
TypeScript
import classnames from "classnames";
|
|
import { Component } from "react";
|
|
import Taro from "@tarojs/taro";
|
|
import { Block, Image, Swiper, SwiperItem, View } from "@tarojs/components";
|
|
/*** redux ***/
|
|
import { connect } from "react-redux";
|
|
import { userRefresh } from "@/store/features/userInfo";
|
|
/*** redux end ***/
|
|
|
|
import Navbar from "@/components/navbar/navbar";
|
|
|
|
import "taro-ui/dist/style/components/button.scss"; // 按需引入
|
|
import "./entry.less";
|
|
import "./Animista.less";
|
|
import "./fade.css";
|
|
|
|
/*** redux end ***/
|
|
|
|
class Entry extends Component<any, any> {
|
|
constructor(props) {
|
|
super(props);
|
|
this.state = {
|
|
name: "entry",
|
|
menu: {
|
|
top: 0,
|
|
height: 0,
|
|
},
|
|
current: 0,
|
|
toRight: false,
|
|
isClick: false,
|
|
welcomeList: [],
|
|
};
|
|
}
|
|
|
|
async onLoad() {
|
|
this.setStatusBar();
|
|
|
|
this.initData();
|
|
}
|
|
componentDidMount() {}
|
|
|
|
componentWillUnmount() {}
|
|
|
|
componentDidShow() {}
|
|
|
|
componentDidHide() {}
|
|
|
|
setStatusBar() {
|
|
// const menu = Taro.getMenuButtonBoundingClientRect();
|
|
// this.setState({ menu });
|
|
Taro.getSystemInfoAsync({
|
|
success: (res) => {
|
|
const statusBarHeight = res.statusBarHeight || 0;
|
|
// 获取微信胶囊的位置信息 width,height,top,right,left,bottom
|
|
const custom = Taro.getMenuButtonBoundingClientRect();
|
|
// 导航栏高度(标题栏高度) = 胶囊高度 + (顶部距离 - 状态栏高度) * 2
|
|
const navigationBarHeight =
|
|
custom.height + (custom.top - statusBarHeight) * 2;
|
|
// 总体高度 = 状态栏高度 + 导航栏高度
|
|
const navHeight = navigationBarHeight + statusBarHeight;
|
|
|
|
this.setState({
|
|
statusBarHeight,
|
|
navigationBarHeight,
|
|
navHeight,
|
|
});
|
|
},
|
|
});
|
|
}
|
|
|
|
async initData() {
|
|
let MpSplashDetail_type1 =
|
|
Taro.getStorageSync("MpSplashDetail_type1") || undefined;
|
|
if (MpSplashDetail_type1) {
|
|
let detail = JSON.parse(MpSplashDetail_type1);
|
|
let list = detail.filter((item: any) => item.fileSuffix === "images");
|
|
if (list.length === 0) {
|
|
Taro.reLaunch({ url: "/pages/index/index" });
|
|
return;
|
|
}
|
|
let welcomeList = list.map((item) => {
|
|
return {
|
|
image: item.filePath,
|
|
title: item.title,
|
|
desc: item.content,
|
|
};
|
|
});
|
|
this.setState({ welcomeList });
|
|
} else {
|
|
Taro.reLaunch({ url: "/pages/index/index" });
|
|
}
|
|
}
|
|
|
|
onChange(event) {
|
|
const current = event.detail.current;
|
|
const { current: curCurrent, welcomeList } = this.state;
|
|
if (
|
|
curCurrent + 2 === welcomeList.length &&
|
|
current + 1 === welcomeList.length
|
|
) {
|
|
this.setState({ toRight: true });
|
|
}
|
|
this.setState({ current });
|
|
}
|
|
onClickSwiperItem() {
|
|
const { current, welcomeList } = this.state;
|
|
if (current < welcomeList.length - 1) {
|
|
this.setState({
|
|
current: current + 1,
|
|
isClick: true,
|
|
});
|
|
} else {
|
|
this.toHomePage();
|
|
}
|
|
}
|
|
toHomePage() {
|
|
Taro.reLaunch({ url: "/pages/index/index" });
|
|
}
|
|
|
|
onFinish(event) {
|
|
const { current } = event.detail;
|
|
const { toRight, isClick, welcomeList } = this.state;
|
|
if (current === welcomeList.length - 1) {
|
|
if (toRight || isClick) {
|
|
this.setState({ toRight: false, isClick: false });
|
|
} else {
|
|
// this.toHomePage();
|
|
}
|
|
}
|
|
}
|
|
|
|
render() {
|
|
let { menu, current, welcomeList } = this.state;
|
|
return (
|
|
<Block>
|
|
<Navbar />
|
|
<View className="main entry-main">
|
|
{/* <View
|
|
className="logo"
|
|
style={"top:" + menu.top + "px; height:" + menu.height + "px"}
|
|
>
|
|
<Image src="https://oss.flossom.com/logo2.png" mode="widthFix" />
|
|
</View> */}
|
|
<Swiper
|
|
className="absolutely"
|
|
current={current}
|
|
onChange={this.onChange.bind(this)}
|
|
onAnimationFinish={this.onFinish.bind(this)}
|
|
duration={800}
|
|
indicatorDots={false}
|
|
indicatorColor="#999"
|
|
indicatorActiveColor="#333"
|
|
previousMargin="32rpx"
|
|
nextMargin="32rpx"
|
|
>
|
|
{welcomeList.map((item, index) => {
|
|
return (
|
|
<SwiperItem key={"swiper_" + index}>
|
|
<View
|
|
// FadeInFrame fadein
|
|
className="body entry-body"
|
|
style={{
|
|
top: menu.top + "px",
|
|
height: "calc(" + (100 % -menu.height) + "px)",
|
|
}}
|
|
>
|
|
<View>
|
|
<Image
|
|
className="cover"
|
|
src={item.image}
|
|
mode="aspectFill"
|
|
/>
|
|
</View>
|
|
<View className="bottom-card">
|
|
<View>
|
|
<View
|
|
className={classnames("text", "text-animation", {
|
|
fadeOut: current !== index,
|
|
fadeIn: current === index,
|
|
})}
|
|
>
|
|
{item.title}
|
|
</View>
|
|
<View
|
|
className={classnames("txt", "text-animation", {
|
|
fadeOut: current !== index,
|
|
fadeIn: current === index,
|
|
})}
|
|
>
|
|
{item.desc}
|
|
</View>
|
|
</View>
|
|
</View>
|
|
</View>
|
|
</SwiperItem>
|
|
);
|
|
})}
|
|
</Swiper>
|
|
|
|
<View className="btn-box">
|
|
<View className="btn" onClick={this.toHomePage.bind(this)}>
|
|
前往主页
|
|
</View>
|
|
|
|
<View className="indicator">
|
|
{welcomeList.map((_item, index) => {
|
|
return (
|
|
<View
|
|
key={"indicator_" + index}
|
|
className={classnames("dot", {
|
|
"bg-show": current === index,
|
|
})}
|
|
/>
|
|
);
|
|
})}
|
|
</View>
|
|
</View>
|
|
</View>
|
|
</Block>
|
|
);
|
|
}
|
|
}
|
|
|
|
const mapStateToProps = (state) => ({
|
|
mobile: state.userInfo.mobile,
|
|
});
|
|
const mapDispatchToProps = (dispatch) => ({
|
|
userRefresh(value) {
|
|
dispatch(userRefresh(value));
|
|
},
|
|
});
|
|
export default connect(mapStateToProps, mapDispatchToProps)(Entry);
|