使用vue做个抽奖问题

代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="//cdn.bootcss.com/vue/2.3.4/vue.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        #app ul li {
            width: 100px;
            height: 100px;
            box-sizing: border-box;
            background: #ccc;
            float: left;
        }

        #app ul li.active {
            border: 3px solid red;
        }
    </style>
</head>
<body>
<div id="app">
    <ul>
        <li v-for="(item, index) of items" :class="{active: index == actvieIndex}">{{ item.name }}</li>
    </ul>
</div>
<script>
var app = new Vue({
    el: '#app',
    data () {
        return {
            actvieIndex: 0,
            items: [
                {name: '1'},
                {name: '2'},
                {name: '3'},
                {name: '4'},
                {name: '5'},  // 这些都假设是一些用户名字
                {name: '6'},
                {name: '7'},
                {name: '8'},
                {name: '9'},
                {name: '10'},
                {name: '11'},
                {name: '12'},
                {name: '13'},
                {name: '14'},
                {name: '15'},
                {name: '16'},
                {name: '17'},
            ]
        }
    },
    mounted () {
        setInterval(() => {
            this.actvieIndex++;
            if(this.actvieIndex >= this.items.length ) this.actvieIndex = 0;
        }, 50);
    }
})
</script>
</body>
</html>

比如10秒就要停止显示, 快到10秒了,就应该慢慢的停止。 这样用户才会有那种激动感。

相信大家都玩过转盘,就跟那个类似。 但是不知道怎么做。

简单的做了一个 demo。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="//cdn.bootcss.com/vue/2.3.4/vue.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        #app ul li {
            width: 100px;
            height: 100px;
            box-sizing: border-box;
            background: #ccc;
            float: left;
        }

        #app ul li.active {
            border: 3px solid red;
        }
    </style>
</head>
<body>
<div id="app">
    <ul>
        <li v-for="(item, index) of items" :class="{active: index == actvieIndex}">{{ item.name }}</li>
    </ul>
</div>
<script>
var app = new Vue({
    el: '#app',
    data () {
        return {
            actvieIndex: 0,
            i: 0,
            count: 0,
            items: [
                {name: '1'},
                {name: '2'},
                {name: '3'},
                {name: '4'},
                {name: '5'},  // 这些都假设是一些用户名字
                {name: '6'},
                {name: '7'},
                {name: '8'},
                {name: '9'},
                {name: '10'},
                {name: '11'},
                {name: '12'},
                {name: '13'},
                {name: '14'},
                {name: '15'},
                {name: '16'},
                {name: '17'},
            ]
        }
    },
    methods: {
      go(seconds) {
        const SECONDS = seconds * 1000;
        const HALF_SECONDS = SECONDS / 2;
        const FREQUENCY = 50;
        
        setTimeout(() => {
            console.log(this.count)

            this.actvieIndex++;
            if(this.actvieIndex >= this.items.length ) this.actvieIndex = 0;
             
            if (this.count >= HALF_SECONDS) {
               this.i+= 10;
               this.count += 50 + this.i;
            } else {
              this.count += 50;
            }
          
            if (this.count <= SECONDS) {
               this.go(seconds)
            }
        }, FREQUENCY + this.i);
      }
    },
    mounted () {
      this.go(5)
    }
})
</script>
</body>
</html>

那你的定时器可以分两个5s执行啊,前5s快,后5s慢。

  • 自执行js,为什么下面的js获取checkbox的值不执行呢。
  • Bootstrap问题
  • bootstrap中的tooltip样式的文字内容能居左,居右显示么?
  • webpack热更新是如何配合gulp一起使用的
  • Bootstrap 不适合那些项目?
  • 很多比较新潮的APP和网站打开时有一种背景图片自动缓慢放大的效果,这是如何做到的?
  • 如何通过ajax导入文件?
  • android 2.3.5 form target 无响应?
  • react源码中的模块管理
  • table标签怎么实现内容不透明,背景图片透明
  • js插件,实现页面截图功能