导航菜单
  • 首页
  • 首页>万博manbext3.0首页登录集>JavaScript万博manbext3.0首页登录集

    利用lottery.js和anime.js实现一个抽奖小转盘

    几乎每年快过年的时候,我都要为公司写一个抽奖小游戏,而且每次抽奖我都能中奖,记得有一年我拿到二百多的号码,结果中了二等奖,奖品是一个挂烫机。有一年拿到三百多的号码,中了三等奖,奖品是一个床上四件套。搞得同事们都以为我给自己开了buff,天地良心,年会入场的时候我和大家一样随机拿了入场券,我哪知道自己的号码是多少,只能说劳动的人运气都不会太差。

    那些页面都喜气冲天,还带有公司logo,不适合放上来,这里放一个很简单的转盘抽奖小游戏吧。

    2.jpg

    点击图片看效果。

    功能:

    1、页面的布局需要一点技巧。

    2、随机数的应用。

    3、根据得到的随机数执行转盘的旋转角度。

    4、用anime.js实现动画效果

    5、lottery.js构造转盘实例并配置参数

    6、点击按钮,就可以试试啦

    核心代码:

        <script src="js/jquery.min.js"></script>
        <script src="js/anime.min.js"></script>
        <script src="js/lottery.js"></script>
        <script>
            const oBtnPlay = document.querySelector('.fy-play');
            const oResult = document.querySelector('.fy-result');
            const oList = document.querySelectorAll('.fy-list');
            // 创建构造函数的实例
            const Lottery = Turntable.create();
            // 点击按钮开始抽奖
            oBtnPlay.onclick = function () {
                // 清空中奖的结果
                oResult.innerHTML = '';
                // 产生[0,5]的随机数,一共6个奖项,每一个数字对应一个奖项
                // [0,50]
                let num = Math.floor(Math.random() * (50 - 0 + 1) + 0);
                // console.log(Math.floor(Math.random()*10));
                console.log(num);
    
                if (num <= 5) {
                    num = num;
                } else if (num > 5 && num < 10) {
                    num = 3;
                } else if (num > 15 && num < 20) {
                    num = 1;
                } else if (num > 30 && num < 40) {
                    num = 5;
                } else {
                    num = 2;
                }
                // 使用了插件,传入num值,转盘会转到对应的位置,并执行回调函数
                Lottery.start(num, function (index) {
                    // 获取中奖的结果
                    let result = oList[index].children[0].innerHTML;
                    // 显示在页面上
                    oResult.innerHTML = result;
                });
            }
        </script>
    // lottery.js
    var Turntable = (function () {
        function Turntable(opts) {
            _classCallCheck(this, Turntable);
    
            this.opts = $.extend(true, {
                target: '.lottery-wrap', // 旋转对象
                easing: 'easeInOutSine', // anime.js 动画曲线
                isplay: false, // 动画是否在播放
                duration: 3000, // 动画时长
                rotateNum: 5, // 旋转圈数
                total: 6, // 奖励个数
                offset: 0}, // 旋转偏移值
            opts);
    
            this.opts.angle = 360 / this.opts.total; // 旋转角度
        }
    
        _createClass(Turntable, [{
            key: 'start',
            value: function start(index, cb) {
                this.opts.isplay = true;
    
                var self = this,
                    opt = this.opts,
                    angle = opt.angle,
                    off = (opt.total - index) * angle - angle / 2 - opt.offset;
    
                aniLottery = anime({
                    targets: this.opts.target,
                    easing: this.opts.easing,
                    autoplay: false,
                    duration: this.opts.duration,
                    rotate: opt.rotateNum * 360 + off,
                    complete: function complete() {
                        $(self.opts.target).css({
                            '-webkit-transform': 'rotate(' + off + 'deg)',
                            'transform': 'rotate(' + off + 'deg)'
                        });
                        self.stop();
                        cb && cb(index);
                    }
                });
                aniLottery.restart();
            }
        }, {
            key: 'stop',
            value: function stop() {
                this.opts.isplay = false;
                aniLottery.pause();
            }
        }], [{
            key: 'create',
            value: function create(opts) {
                return new Turntable(opts);
            }
        }]);
        return Turntable;
    })();


    点赞


    2
    保存到:

    相关文章

    发表评论:

    ◎请发表你卖萌撒娇或一针见血的评论,严禁小广告。

    Top