Vue组件实现数字滚动抽奖效果

本文实例为大家分享了Vue组件实现数字滚动抽奖效果的具体代码,供大家参考,具体内容如下

可调整数字滚动速度,可指定开奖延迟时间,可指定开奖数字,按个人需求自行改动(录了个效果供参考,临时找的录屏,表介意)
不一一精简了

组件代码

<template>
    <div class="info-span04" style="color: #333333;">
        中奖号码:
        <div style="vertical-align: middle;display: inline-block;">
            <div class="openNumber" v-for="(item, index) in awardCode">
                <div class="num mui-text-center">
                    <div class="span value">
                        <transition name="down-up-translate-fade">
                            <div :key="item.value">{{item.value}}</div>
                        </transition>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
    export default {
        name: 'numberRolling',
        data () {
            return {
                interval: null,
                interval_one: null,
                interval_two: null,
                awardCode: [
                    {name: 'oneDigit', value: '?'},
                    {name: 'tenDigit', value: '?'},
                    {name: 'hundredsDigit', value: '?'}
                ],
            }
        },
        props:{
            
        },
        // 开奖效果方法
        methods: {
            start() {
                var _this = this;
                if (!this.interval) {
                    let i = 0
                    this.interval = setInterval(function() {
                        _this.awardCode[0].value = ++i <= 9 ? i : (i=-1,++i)
                    }, 100)
                }
            },
            end(i) {
                this.awardCode[0].value = i;
                this.show = !this.show
                clearInterval(this.interval)
                this.interval = null
            },
            start_one() {
                var _this = this;
                if (!this.interval_one) {
                    let j = 0
                    this.interval_one = setInterval(function() {
                        _this.awardCode[1].value = ++j <= 9 ? j : (j=-1,++j)
                    }, 100)
                }
            },
            end_one(j) {
                this.awardCode[1].value = j;
                clearInterval(this.interval_one)
                this.interval_one = null
            },
            start_two() {
                this.show_two = !this.show_two
                var _this = this;
                let k = 0
                if (!this.interval_two) {
                    this.interval_two = setInterval(function() {
                        // _this.k = Math.floor(Math.random() * 10);
                        // if (k < 10) {
                        //     _this.awardCode[2].value = k++;
                        // } else {
                        //     k = 0
                        //     _this.awardCode[2].value = k++;
                        // }
                        _this.awardCode[2].value = ++k <= 9 ? k : (k=-1,++k)
                    }, 100)
                }
            },
            end_two(k) {
                this.awardCode[2].value = k;
                this.show_two = !this.show_two
                clearInterval(this.interval_two)
                this.interval_two = null
            },
            prizeNumber(code) {
                this.awardCode[0].value = code.substr(0,1)
                this.awardCode[1].value = code.substr(1,1)
                this.awardCode[2].value = code.substr(2,1)
            },
        },
        beforeDestroy: function() {
            if(this.interval){
              clearInterval(this.interval)
            }
            if(this.interval_one){
              clearInterval(this.interval_one)
            }
            if(this.interval_two){
              clearInterval(this.interval_two)
            }
        }
    }
</script>
<style lang="scss" scoped>
    .openNumber {
        display: inline-block;
        width: vw(52);
        height: vw(52);
        padding-right: vw(36);
        .num {
            width: vw(52);
            height: vw(52);
            overflow: hidden;
            .span {
                color: #fff;
                width: vw(52);
                height: vw(52);
                font-weight: bold;
                float: left;
                .span div {
                    text-align: center;
                }
            }
            .down-up-translate-fade-enter-active,
            .down-up-translate-fade-leave-active {
                transition: all .1s;
                -webkit-transition: all .1s;
                -moz-transition: all .1s;
                -o-transition: all .1s;
            }
            .down-up-translate-fade-enter,
            .down-up-translate-fade-leave-active {
                opacity: 1;
            }
            .down-up-translate-fade-leave-active {
                transform: translateY(-50px);
                -webkit-transform: translateY(-50px);
                -moz-transform: translateY(-50px);
                -o-transform: translateY(-50px);
            }
            .value {
                background: url('../images/pokinhall-toBeAwarded.png') no-repeat top center;
                background-size: 100% 100%;
                width: vw(52);
                height: vw(52);
                line-height: vw(52);
                font-size: 22px;
                font-weight: bold;
            }
        }
    }
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Vue.js实现大转盘抽奖总结及实现思路

    大家好!先上图看看本次案例的整体效果. 实现思路: Vue component实现大转盘组件,可以嵌套到任意要使用的页面. css3 transform控制大转盘抽奖过程的动画效果. 抽奖组件内使用钩子函数watch监听抽奖结果的返回情况播放大转盘动画并给用户弹出中奖提示. 中奖结果弹窗,为抽奖组件服务. 实现步骤如下: 构建api奖品配置信息和抽奖接口,vuex全局存放奖品配置和中奖结果数据信息. api: export default { getPrizeList () { let priz

  • 基于VUE实现的九宫格抽奖功能

    先给大家展示下效果图: HTML代码: <template> <div class="luckDraw"> <title-bar :title="title"></title-bar> <div class="container"> <div class="turntable-wrapper"> <div class="luck-wrapp

  • vue组件实现移动端九宫格转盘抽奖

    本文实例为大家分享了vue组件实现移动端九宫格转盘抽奖的具体代码,供大家参考,具体内容如下 vue-lucky-draw 移动端九宫格转盘抽奖vue组件,中奖的奖品数据由接口决定. 效果图 抽奖 因为中奖的结果是后台返回的,所以要考虑转盘的最终停下来的位置必须是在对应后台返回结果的奖品的位置,也就是要模拟出这个中奖的过程(所以所谓的抽奖都是骗人的,嘿嘿).先要写出移动的背景框对应的各个位置的css,然后动态切换class来使其呈现出转动效果.明白了过程就好写了. 中间的按钮用的是css3的ani

  • vue实现手机号码抽奖上下滚动动画示例

    本文介绍了vue实现手机号码抽奖上下滚动动画示例,分享给大家.具体如下: <!DOCTYPE> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>Document</title> <meta name="viewport" content=

  • VUE实现大转盘抽奖

    UI 老规矩,先看下静态UI,以便于有个图像概念 初始参考各值参考图 方案分析-参数配置 核心思路: 将指针和中奖区域划分两部分,目前常规的效果,控制中奖区域旋转,然后停在指针处,当然控制指针也可以,一套思路,dom结构也比较简单,唯一算是复杂点的就是中奖区域,但是如果你足够懒,像我一样,你可以传递一张图也可以,完全依赖远端数据: 关于旋转位置 每个移动位置应均分,360/个数 === 每个奖品所占据的位置,以本文为例8个奖品位置,每个区域应为45deg,每个指针中心位置应为±22.5deg(±

  • vue实现宫格轮转抽奖

    vue实现宫格轮转抽奖(类似穿越火线的xx轮回),供大家参考,具体内容如下 不做过多的解说,直接上代码啦.关键的代码都写了注释,很容易理解.直接复制即可使用! 另外css部分依赖 node-sass.sass-loader,没有安装的安装一下,已有的小伙伴直接跳过~~ "node-sass": "^4.12.0", "sass-loader": "^8.0.2", <template> <div class=

  • vue简单实现转盘抽奖

    本文实例为大家分享了vue简单实现转盘抽奖的具体代码,供大家参考,具体内容如下 1.0 思路整理 转盘抽奖很常见,之前也没写过,现在有空来写写,分析如下: 1.1 转盘旋转 ----- 可以用 transform 的 rotate 来解决 1.2 旋转动画 ----- transition 过渡来处理 1.3 停留目标位置及中奖提示 ? ------ 通过控制旋转角度控制停留位置,中奖提示,考虑添加回调 1.1 开始行动 上面的思考,我们知道了大概要实现的步骤,首先我们搞张图片 这个圆盘有 10

  • Vue组件实现数字滚动抽奖效果

    本文实例为大家分享了Vue组件实现数字滚动抽奖效果的具体代码,供大家参考,具体内容如下 可调整数字滚动速度,可指定开奖延迟时间,可指定开奖数字,按个人需求自行改动(录了个效果供参考,临时找的录屏,表介意)不一一精简了 组件代码 <template>     <div class="info-span04" style="color: #333333;">         中奖号码:         <div style="ve

  • vue 实现数字滚动增加效果的实例代码

    项目中需要做数字滚动增加的效果,一开始很懵,研究了一下原理,发现很简单,贴出来分享一下 ^_^ 数字滚动组件: <template> <div class="number-grow-warp"> <span ref="numberGrow" :data-time="time" class="number-grow" :data-value="value">0</sp

  • Vue.js实现大屏数字滚动翻转效果

    大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果,以下是最终实现的效果: 整体思路: 在实现此效果之前,我们先来捋一下思路,用思维导图来设计一下我们的实现步骤,如下: 你可以审查元素,下载数字背景图片,复制图片地址,或者使用其他背景图片.背景颜色 有了以上的设计流程,我们先来简单实现一下: // CSS代码 <style> .box-item { position: relative; display: inline-

  • react 不用插件实现数字滚动的效果示例

    突然要实现个数字滚动效果,网上一搜,一大堆都是用组件的.我只是想实现个简单的效果而已,决定还是自己搞搞吧. 先来看看效果吧 也不多说了,实现起来不难,但是有点细节问题需要自己好好琢磨一下 大概思路, 1.一开始为0,获取第一次数据,记录下来 2.和前一次数据进行对比 3.然后transform 4.最后收工 好了,附上代码. export default class Number extends React.Component { constructor(props) { super(props

  • Unity实现老虎机滚动抽奖效果的示例代码

    直接看下效果图吧: 制作思路: 设计四张图片,五个点,每个图片同时向下一个点移动,到最后一个就回到0号点,以此循环. 场景搭建: 创建Image命名为Bg作为电视框背景: 创建Image命名Mask并添加Mask组件作为电视框内容显示遮罩框: 创建四个Image作为滚动图片: 创建开始抽奖按钮: PS:实际项目中可以根据需求来动态修改图片显示,以达到的控制每次抽奖奖品内容. 源码分享: using System.Collections; using UnityEngine; using Unit

  • jQuery实现类似老虎机滚动抽奖效果

    本文实例讲述了jQuery实现类似老虎机滚动抽奖效果.分享给大家供大家参考.具体如下: 这里使用jquery实现类似老虎机的网页抽奖功能,只是一个简单的投资功能实现,还有一些地方是需要完善的,比如抽奖快结束的时候,不会自动变慢速度,哪位高手感兴趣的话可以加以完善. 实现效果如下图所示: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/

  • 使用Vue组件实现一个简单弹窗效果

    最近在使用element-ui框架,用到了Dialog对话框组件,大致实现的效果,跟我之前自己在移动端项目里面弄的一个弹窗组件差不太多.然后就想着把这种弹窗组件的实现方式与大家分享一下,下面本文会带着大家手摸手实现一个弹窗组件. 本文主要内容会涉及到弹窗遮罩的实现, slot 插槽的使用方式, props . $emit 传参,具体组件代码也传上去了.如果喜欢的话可以点波赞/关注,支持一下,希望大家看完本文可以有所收获. 组件最后实现的效果 实现步骤 先搭建组件的html和css样式,遮罩层和内

  • vue使用动画实现滚动表格效果

    本文实例为大家分享了vue使用动画实现滚动表格效果的具体代码,供大家参考,具体内容如下 需求 在一些大屏项目中,需要使用到表格行数据滚动.本文介绍在vue项目中使用动画实现滚动表格. vue代码如下 <template>   <div style="cursor: default;margin:9px 10px 18px">     <div class="table-header table-row">       <di

  • vue实现竖屏滚动公告效果

    本文实例为大家分享了vue实现竖屏滚动公告效果的具体代码,供大家参考,具体内容如下 html文件 <template> <div class="scroll-wrap">           <div             class="scroll-content"             :style="{ top }"             @mouseenter="Stop()"  

  • 基于 flexible 的 Vue 组件:Toast -- 显示框效果

    基于flexible.js 的 Vue 组件 前言: 目前手头的移动端Vue项目是用手淘的 lib-flexible作适配的,并用px2rem 来自动转换成rem.关于lib-flexible和px2rem的配置,请移步 vue-cli 配置 flexible. 由于使用rem作适配,导致现有的很多移动端UI框架不能与之很好的配合,往往需要大动干戈更改UI框架的样式,背离了使用UI框架达到快速开发的初衷. 为了以后项目的组件复用,以及提高开发可复用组件的能力,特把平时项目中 常用的.简单的 组件

随机推荐