zoukankan      html  css  js  c++  java
  • 微信小程序之转盘抽奖

      公司需求要做转盘抽奖,刚开始也是踩了好几个坑,跟大家一起来分享下。刚开始搞微信小程序的转盘抽奖,用CSS3+定时器写的。在微信开发工具中没有问题,但是真机测试时发现动画卡的要死,完全是木偶人的感觉。

    不得已,开始用微信的 wx.createAnimation写,废话不多说,直接上代码 ~

    (我用的是wepy工具开发的,所以要是不用wepy的话,要分开写.js  .wxss  .wxml。有兴趣的可以在微信搜索 “糖果福利社”小程序,查看实际效果)

    效果图:

                                                                     

    CSS部分:

    <style lang="less">
    .wheel {
      position: absolute;
      top: calc((100% - 880rpx)/2);
      width: calc(100% - 60rpx);
      background-color: #fff;
      margin: 0 30rpx;
      border-radius: 16rpx;
      text-align: center;
      overflow: hidden;
      .wheel_wp {
        width: calc(100% - 120rpx);
        padding: 0 60rpx 60rpx 60rpx;
        height: 100%;
        image {
          width: 100%;
          height: 100%;
        }
        .wheel_pointer{
          position: absolute;
          width: 150rpx;
          height: 150rpx;
          top: 344rpx;
          left: 50%;
          margin: -75rpx 0 0 -75rpx;
          transform-origin: 50% 50%;
        }
        .wheel_pointer image{
          position: absolute;
          width: 150rpx;
          height: 238rpx;
          left: 0;
          top: -40rpx;
        }
        .times {
          font-size: 32rpx;
          height: 64rpx;
          text-align: center;
          line-height: 64rpx;
          margin-top: 24rpx;
          margin-bottom: 32rpx;
          view {
            display: inline-block;
            height: 64rpx;
            width: 180rpx;
            margin: 0 20rpx;
            background-color: #f4f4f4;
            border-radius: 8rpx;
          }
          button {
            display: inline-block;
            height: 40rpx;
            width: 40rpx;
            background-color: #FF4538;
            border-radius: 50%;
            color: #fff;
            padding: 0;
            line-height: 32rpx;
            font-size: 44rpx;
            position: relative;
            top: 8rpx;
          }
        }
        .invite_text {
          color: #666;
          font-size: 24rpx;
        }
      }
      .close {
        width: 100%;
        height: 60rpx;
        image {
          width: 24rpx;
          height: 24rpx;
          padding: 24rpx 24rpx 12rpx 24rpx;
          float: right;
        }
      }
    }
    </style>

    HTML部分:

    <view class="wheel">
        <view class="close">
          <image bindtap="closeWin" src="https://o3pvuu23u.qnssl.com/48524237-601b-4611-b96d-01d99abd1ef2.png" />
        </view>
        <view class="wheel_wp">
          <image mode="widthFix" src="https://o3pvuu23u.qnssl.com/2f9bddd9-bb82-47ed-bd0f-9b1bee4463b8.png"
            animation="{{animationData}}" />
          <view class="wheel_pointer" bindtap="start">
            <image mode="widthFix" src="https://o3pvuu23u.qnssl.com/e36952f5-0458-467b-890c-61941877c0c9.png" />
          </view>
          <view class="times">
            <text>可抽</text>
            <view>{{times}}次</view>
            <button open-type="share">+</button>
          </view>
          <view class="invite_text">每邀请一个好友可获得一次抽奖机会</view>
        </view>
      </view>

    JS部分:

    <script>
    import wepy from 'wepy'

    export default class wheel extends wepy.component { data = { deg: 0, // 初始化角度 singleAngle: 60, // 每片扇形的角度 awardNumer: 1, // 中奖区域 从1开始 isStart: false, animationData: {} } onLoad(options) { const animation = wx.createAnimation({ duration: 2000, timingFunction: 'ease-in-out' }) this.animation = animation } methods = { start() { if (this.isStart) return let tmpnum = Math.random() tmpnum = tmpnum < 0.5 ? tmpnum + 0.1 : tmpnum - 0.1 const endAddAngle = (this.awardNumer - 1 + tmpnum) * this.singleAngle + 360 // 中奖角度 const rangeAngle = (Math.floor(Math.random() * 4) + 4) * 360 // 随机旋转几圈再停止 this.animation.rotate(this.deg + endAddAngle + rangeAngle).step() this.animationData = this.animation.export() this.deg += rangeAngle this.$apply() }, closeWin() { this.animation.rotate(0).step() this.animationData = this.animation.export() this.deg = 0 this.$apply() } } } </script>
  • 相关阅读:
    js复制文字到剪切板
    js推送网页到扩展屏上
    数据库自增ID用完了会怎么样?
    使用@nuxtjs/sitemap给项目添加sitemap(网站地图)
    js实现视频截图,视频批量截图,canvas实现
    javascript深入参数传递
    基于JQ使用原生js构造一个自动回复随机消息的机器人
    把nodejs程序打包成可执行文件
    如何巧妙使用some函数来优化性能
    Eggjs 设置跨域请求 指定地址跨域 nodejs
  • 原文地址:https://www.cnblogs.com/zjp-zxy/p/10196600.html
Copyright © 2011-2022 走看看