程序中实现变速大转盘的使用方法浅谈

why 158 2024-06-21

怎么使用小程序实现一个变速大转盘?下面本篇文章给大家介绍一下使用小程序实现一个变速大转盘的方法,希望对大家有所帮助!

浅谈怎么使用小程序实现一个变速大转盘

使用小程序来实现一个大转盘吧!大转盘都不陌生,开始抽奖,然后停止的位置就是获得的奖品。

实现方法:setInterval

先来实现一下匀速大转盘吧

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

先将转盘设计好,比如3 x 3 的大转盘,中间是个开始按钮;

我这里设置的是背景颜色的变化,当抽奖到达某个位置时,这个位置的颜色发生变化;

先贴一下我的ttml页面吧(不要在意我奇怪的配色~)

// index.ttml

<view>

    <view>

        <view>{{item}}</view>

    </view></view>

顺便css也贴一下吧,看效果直接复制就好了嘛

// index.ttss

.box{

    margin: 0 auto;

    width: 600rpx;

    display: flex;

    flex-wrap: wrap;

    border: 1px solid black;

}

.item{

    width: 200rpx;

    height: 200rpx;

    line-height: 200rpx;

    text-align: center;

}


另起一行,只是换个位置贴js

先看data:games是转盘上要显示的内容,转盘的格式可以根据自己的需求自己来写,我这个就是最基本的。active用来记录旋转到了什么位置,start用来记录开始的位置再来看全局定义的round和timer。round用来设置一个轨迹,相当于铺路啦,里面是要走的下标,刚好是外围一圈。timer是定时器最后看begin方法吧

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

// index.js

const round = [0,1,2,5,8,7,6,3,0];

let timer ;

Page({

  data: {

    games:[&#39;$1&#39;,&#39;$2&#39;,&#39;$3&#39;,&#39;$4&#39;,&#39;开始&#39;,&#39;$5&#39;,&#39;$6&#39;,&#39;$7&#39;,&#39;$8&#39;],

    active: 0,

    start: 0,

  },

  onLoad: function (options) {

     

  },

  beginLottery(){

    this.begin();

  },

  // begin

  begin(){

    let start = this.data.start;

    let random = Math.floor(Math.random()*9);

    let num = 0;

    timer = setInterval(() => {

      start++;

      start = start > 8 ? 0 : start;

      this.setData({

        start,

        active: round[start]

      })

      num++;

      if(num > 24 && this.data.active == random){//

        clearInterval(timer)

      }

    }, 70);

     

  }

})

比较简单,然后实现变速,其实速度的改变就是旋转一圈时间的改变

我这里的设计是:每旋转两圈实现一次变速,每次变速的时间在上一次时间上+100s,在第五圈停止

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

//index.js

 

const round = [0, 1, 2, 5, 8, 7, 6, 3, 0];

let timer; // 定时器

let num = 0; // 用来记录一共转了几次,方便判断转的圈数

let start = 0; // 记录开始的位置下标

let random = &#39;&#39;; // 记录停下来的随机数(下标)

let time = 70; // 记录定时器的时间

let count = 0; // 记录圈数,用来判断每2圈一次变速

Page({

  data: {

    games: [&#39;$1&#39;, &#39;$2&#39;, &#39;$3&#39;, &#39;$4&#39;, &#39;开始&#39;, &#39;$5&#39;, &#39;$6&#39;, &#39;$7&#39;, &#39;$8&#39;],

    active: 0,

  },

  onLoad: function (options) {},

  beginLottery() {

    this.begin1();

  },

  begin1() {

    if(num != 0){

    // 防止用户重复点击

      return

    }

    timer = setInterval(this.process, time);

  },

  // 旋转的过程

  process() {

    start = start + 1;

    if (start >= 8) {

      start = 0;

      // 当start = 8的时候,表示已经转过1圈了count+1

      count = count + 1;

    }

    this.setData({

      active: round[start]

    })

    num = num + 1;

    // 实现两圈一次变速

    if (num % 8 === 0 && count === 2) {

      count = 0;

      clearInterval(timer);

      time = time + 100;

      timer = setInterval(this.process, time);

      // 转了4圈,即将在第五圈停止

      if (Math.floor(num / 8) === 4) {

        this.getRandom();

      }

    }

    if (this.data.active === random) {

      clearInterval(timer);

      num = 0;

      random = &#39;&#39;;

      time = 70;

      count = 0;

    }

  },

  getRandom(){

    let n = Math.floor(Math.random() * 9);

    if(n == 4){

      this.getRandom();

    }else{

      random = n

      return;

    }

  }

})

示例代码是根据旋转的圈数来进行变速,也可以根据旋转一定的时间来实现变速,这样就需要使用setTimeout来实现。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序信息发布中心操作指引
下一篇:小程序运营端可视化数据管理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~