import React, { useRef, useState } from 'react';
import { View, Text, StyleSheet, Animated, TouchableOpacity, Image, ImageBackground, Easing } from 'react-native';
const WheelOfFortune = () => {
const rotationValue = useRef(new Animated.Value(0)).current;
const [clickCount, setClickCount] = useState(3);
const [rotationEnabled, setRotationEnabled] = useState(false);
const [resetAngle, setResetAngle] = useState(0);
const [startAngle, setStartAngle] = useState(0);
const rotateInterpolate = rotationValue.interpolate({
inputRange: [0, 1],
outputRange: [`${startAngle}deg`, `${startAngle + resetAngle}deg`],
});
const animatedStyle = {
transform: [{ rotate: rotateInterpolate }],
};
const startRotation = () => {
if (rotationEnabled) {
alert('禁止')
return
}
if (clickCount <= 0) {
alert('抽獎次數(shù)已用完')
return;
}
const animationConfig = {
toValue: 4,
duration: 10000,
easing: Easing.out(Easing.exp),
useNativeDriver: true,
};
setRotationEnabled(true);
Animated.timing(rotationValue, animationConfig).start(({ finished }) => {
if (finished) {
setClickCount(prevClickCount => prevClickCount - 1);
}
});
};
const resetRotation = () => {
setRotationEnabled(false);
setStartAngle(360); // 設置起始角度
setResetAngle(745); // 設置結束角度
// setStartAngle(Math.random() * 360); // 設置隨機的起始角度
rotationValue.setValue(0);
};
const resetClickCount = () => {
setClickCount(3);
};
return (
<View style={styles.container}>
<ImageBackground
source={require('../../assets/imgs/luckyWheel/luckyWheel_bg.jpg')}
style={styles.backgroundImage}
>
<View style={{ marginVertical: 50 }}>
<Text style={styles.title}>幸運抽獎</Text>
<Text style={styles.cjcs}>剩余抽獎次數(shù):{clickCount}</Text>
</View>
<TouchableOpacity onPress={() => resetRotation()}>
<View>
<Text style={styles.cjcs}>重置角度</Text>
</View>
</TouchableOpacity>
<TouchableOpacity onPress={resetClickCount}>
<View style={{ marginTop: 10 }}>
<Text style={styles.cjcs}>重置抽獎次數(shù)</Text>
</View>
</TouchableOpacity>
<View style={styles.box}>
<Animated.Image
source={require('../../assets/imgs/luckyWheel/img_bg.png')}
style={[styles.centerImage, animatedStyle]}
/>
<TouchableOpacity onPress={startRotation}>
<Image
source={require('../../assets/imgs/luckyWheel/img_pointer.png')}
style={styles.overlayImage}
/>
</TouchableOpacity>
</View>
</ImageBackground>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
},
backgroundImage: {
flex: 1,
width: '100%',
height: '100%',
resizeMode: 'cover',
position: 'absolute',
},
centerImage: {
width: 250,
height: 250,
resizeMode: 'contain',
marginTop: 100,
},
overlayImage: {
width: 100,
height: 100,
position: 'relative',
top: -190,
resizeMode: 'contain',
},
title: {
fontSize: 35,
fontWeight: 'bold',
color: 'white',
textAlign: 'center',
zIndex: 999,
},
cjcs: {
fontSize: 16,
fontWeight: 'bold',
color: 'white',
textAlign: 'center',
zIndex: 999,
},
box: {
height: 250,
width: 250,
justifyContent: 'center',
alignItems: 'center',
alignSelf: 'center',
marginTop: 50,
},
});
export default WheelOfFortune;
react native 大轉盤抽獎
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門舌涨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扔字,你說我怎么就攤上這事囊嘉。” “怎么了革为?”我有些...
- 文/不壞的土叔 我叫張陵扭粱,是天一觀的道長。 經(jīng)常有香客問我震檩,道長琢蛤,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任抛虏,我火速辦了婚禮博其,結果婚禮上,老公的妹妹穿的比我還像新娘迂猴。我一直安慰自己慕淡,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布沸毁。 她就那樣靜靜地躺著峰髓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪息尺。 梳的紋絲不亂的頭發(fā)上携兵,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼死遭!你這毒婦竟也來了广恢?” 一聲冷哼從身側響起,我...
- 正文 年R本政府宣布塌鸯,位于F島的核電站,受9級特大地震影響唐片,放射性物質發(fā)生泄漏丙猬。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一费韭、第九天 我趴在偏房一處隱蔽的房頂上張望茧球。 院中可真熱鬧,春花似錦星持、人聲如沸抢埋。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽羹令。三九已至,卻和暖如春损痰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酒来。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 中國風水墨畫背景PHP+Ajax幸運大轉盤抽獎源碼戳葵,通過獎品庫存、中獎次數(shù)來計算中獎概率汉匙。恭喜你拱烁,中得五等獎,還要...
- 項目需求運用到大轉盤 可設置概率 可直接自定義結果 效果如下 ? 兩種方法及結合法 一 通過canvas 實現(xiàn) 但...
- 有個朋友需要寫個抽獎大轉盤的功能噩翠,就讓我?guī)兔懥讼孪纷浴N矣昧?種方法實現(xiàn)了效果,在這里和大家一起分享下伤锚。 一擅笔、一鍵轉...
- 前段時間公司里為了推廣微信公眾號吸粉,需要在公眾號菜單里增加一個大轉盤抽獎的活動屯援,在活動現(xiàn)場手機上抽到什么獎品就是...