react native 大轉盤抽獎

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;
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末叮趴,一起剝皮案震驚了整個濱河市刘绣,隨后出現(xiàn)的幾起案子图呢,更是在濱河造成了極大的恐慌,老刑警劉巖辫秧,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件般码,死亡現(xiàn)場離奇詭異妻率,居然都是意外死亡,警方通過查閱死者的電腦和手機板祝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門舌涨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扔字,你說我怎么就攤上這事囊嘉。” “怎么了革为?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵扭粱,是天一觀的道長。 經(jīng)常有香客問我震檩,道長琢蛤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任抛虏,我火速辦了婚禮博其,結果婚禮上,老公的妹妹穿的比我還像新娘迂猴。我一直安慰自己慕淡,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布沸毁。 她就那樣靜靜地躺著峰髓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪息尺。 梳的紋絲不亂的頭發(fā)上携兵,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音搂誉,去河邊找鬼徐紧。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的并级。 我是一名探鬼主播拂檩,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼死遭!你這毒婦竟也來了广恢?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤呀潭,失蹤者是張志新(化名)和其女友劉穎钉迷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钠署,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡糠聪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谐鼎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舰蟆。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狸棍,靈堂內的尸體忽然破棺而出身害,到底是詐尸還是另有隱情,我是刑警寧澤草戈,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布塌鸯,位于F島的核電站,受9級特大地震影響唐片,放射性物質發(fā)生泄漏丙猬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一费韭、第九天 我趴在偏房一處隱蔽的房頂上張望茧球。 院中可真熱鬧,春花似錦星持、人聲如沸抢埋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羹令。三九已至,卻和暖如春损痰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酒来。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工卢未, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓辽社,卻偏偏與公主長得像伟墙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子滴铅,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • 中國風水墨畫背景PHP+Ajax幸運大轉盤抽獎源碼戳葵,通過獎品庫存、中獎次數(shù)來計算中獎概率汉匙。恭喜你拱烁,中得五等獎,還要...
    素材火_29a5閱讀 2,515評論 0 0
  • 項目需求運用到大轉盤 可設置概率 可直接自定義結果 效果如下 ? 兩種方法及結合法 一 通過canvas 實現(xiàn) 但...
    悟空_大師兄_閱讀 1,288評論 1 0
  • 有個朋友需要寫個抽獎大轉盤的功能噩翠,就讓我?guī)兔懥讼孪纷浴N矣昧?種方法實現(xiàn)了效果,在這里和大家一起分享下伤锚。 一擅笔、一鍵轉...
    干不動閱讀 15,179評論 10 41
  • 前段時間公司里為了推廣微信公眾號吸粉,需要在公眾號菜單里增加一個大轉盤抽獎的活動屯援,在活動現(xiàn)場手機上抽到什么獎品就是...
    IT小C閱讀 18,931評論 1 8
  • 大轉盤方式的抽獎是經(jīng)常見的猛们,,最近在做了一個抽獎的功能狞洋,其中最重要的就是概率弯淘,概率的算法大同小異,徘铝,為保證每個獎品...
    追隨_1064閱讀 15,770評論 0 0