angular 实现轮盘抽奖

以下为html中部分  图片需要一张转盘和指针

 

  <div class="turntable">
 <img class="turnbg" src="assets/turntableimg/bg.jpg" alt="">
    <!-- 点击时候转动转盘 指针不转 -->
    <img class="turntable-top" src="assets/turntableimg/zhibiao.png">
    <img class="turntable-center" [style]="{transform:rotateAngle,transition:rotateTransition == ''?'transform 4s ease-in-out':rotateTransition }" src="assets/turntableimg/turnbg.png">
  </div>
//这里的html引入内嵌了css 已经可以实现旋转

    <ion-button (click)="onClick1(5)" expand="small" shape="round">
      立即开奖
    </ion-button>
//此处传入5是因为我的项目需要  可忽略

css部分需要自己定位到相应的地方  图片需要自行引入

 以下为ts部分

  rotateAngle: any = 0 //将要旋转的角度
  startRotatingDegree: any = 0 //初始旋转角度
  rotateTransition: any = ''//控制过渡效果
  click_flag: boolean = true //是否可以旋转抽奖
  prize_money_array: any = [];
  prize_type5: any = [];
  lottery_draw_period: any;//期数 这个期数主要是后端返回配合的   可忽略
  total_amount: any;//抽奖获得金额 这个是后端返回的金额 可忽略
 data: any = {
    period_id: '',
    type: ''
  };
//这里是请求时后端所需要传入的参数



  constructor(
    private nav: NavController,
    private router: Router,
    private api: Api,
    private native: NativeService,
    public modalController: ModalController
  ) { }



 //抽奖点击
  pointer(price) {

    // 抽奖函数
    this.rotate(price)

//此处可添加一些操作  如无添加可忽略 直接使用下面函数
  }



// 轮盘转动
  rotate(prize: any) {//目前是只转动转盘

    var type = 0; // 默认为 0  转盘转动
    var randCircle = 50; // 附加旋转的圈数
    var duringTime = 5; // 默认为 5s 转动时间
    var rotateAngle = 10;//初始值
    console.log(prize);

    switch (prize) {
      //此处prize传入的值是多少 那么转盘就会转到相应的角度
      case 0: rotateAngle = randCircle * 360 + 55; break;
      case 10: rotateAngle = randCircle * 360 + 20; break;
      case 20: rotateAngle = randCircle * 360 + -15; break;
      case 50: rotateAngle = randCircle * 360 + -50; break;
      case 100: rotateAngle = randCircle * 360 + -85; break;
      case 200: rotateAngle = randCircle * 360 + -120; break;
      case 500: rotateAngle = randCircle * 360 + -165; break;
      case 1000: rotateAngle = randCircle * 360 + -200; break;
      case 2000: rotateAngle = randCircle * 360 + -235; break;
      case 4999: rotateAngle = randCircle * 360 + -270; break;
    }
    this.click_flag = false; // 旋转结束前,不允许再次触发
    if (type == 0) {
      // 转动盘子
      var rotateAngle = this.startRotatingDegree + rotateAngle - this.startRotatingDegree % 360;//将要旋转的角度
      this.startRotatingDegree = rotateAngle;//改变初始旋转的角度
      this.rotateAngle = "rotate(" + rotateAngle + "deg)";//真正控制转动角度
      // 旋转结束后允许再次触发
      setTimeout(() => {
        this.click_flag = true;//旋转结束后可点击
        this.getturntable() //更新数据

        this.presentModal() //转动后弹窗
      }, duringTime * 1000)

    }
  }




 //开奖
  onClick1(type) {
    if (this.click_flag == true) {  //此处主要为防止重复点击

      if (this.prize_type5.can_lottery_draw) { //此处为后端返回是否可以点击
      
        this.yindoushow = true //动画开关 等待动画效果
        this.click_flag = false //防止转动时点击,点击后禁止重复点击
        setTimeout(() => {
          this.data.type = type //这里是因为按钮里形参传入给后端判断是哪个按钮点击
          this.api.Get('//', this.data).subscribe(
            (res: any) => {
              console.log(res);
              this.total_amount = res.data.total_amount  //从后端获得金额
              this.pointer(this.total_amount)//传入金额
            })
        }, 1000);

      } else {
        this.native.showToast('抽奖次数不足')
      }
    } else {
      return
    }

  }

这个抽奖的好处是  后端返回什么抽奖数据这边轮盘可转到相应的地方

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值