• 技术文章 >web前端 >js教程

    案例分享转盘抽奖的demo(附代码)

    php是最好的语言php是最好的语言2018-08-06 15:41:26原创1795
    工作之余,总想找出点事干,所以就想试试看自己能否写个圆盘抽奖的demo。
    开发思路

    效果图
    1.png

    代码

        <p class="rotate tn">
            <!-- 外部圆-->
            <p class="out-circle">
                <p class="p1">1</p>
                <p class="p2">2</p>
                <p class="p3">3</p>
            </p>
             <!--内部园-->
            <p class="inner-circle">
                <p class="p11">a</p>
                <p class="p12">b</p>
                <p class="p13">c</p>
                <p class="p14">d</p>
                <p class="p15">e</p>
                <p class="p16">f</p>
            </p>
        </p>
        <p class="start-game">
            <label for="num">
                <input 
                       type="text" 
                       id="num" name="num"
                       placeholder="请输入外数字(0-2))"
                       />
            </label>
            <a href="javascript:void(0);">开始</a>
        </p>
            * {
                margin: 0;
            }
            .rotate {
                position: relative;
                margin: 0 auto;
                width: 400px;
                height: 400px;
                text-align: center;
                color: #fff;
                font-size: 50px;
                border-radius: 50%;
                background: antiquewhite;
            }
            .tn {
                transition: all 3s cubic-bezier(.11,.77,.2,.94);
                transform-origin: 50% 50%;
            }
            .out-circle {
                position: absolute;
                width: 300px;
                height: 300px;
                left: 0;
                right: 0;
                top: 0;
                bottom: 0;
                margin: auto;
            }
            /*基础旋转的圆*/
            .out-circle  p {
                position: absolute;
                display: block;
                margin: 0 auto;
                left: 0;
                right: 0;
                width: 30px;
                height: 30px;
                line-height: 30px;
                background: red;
                /*以自己的宽度的一半 为 x,以父盒子的高度一半 为 y, 作为旋转点。*/
                transform-origin: 15px 150px;
                border-radius: 50%;
                font-size: 16px;
            }
            .inner-circle {
                position: absolute;
                width: 200px;
                height: 200px;
                left: 0;
                right: 0;
                top: 0;
                bottom: 0;
                margin: auto;
            }
            /*基础旋转的圆*/
            .inner-circle p {
                position: absolute;
                display: block;
                margin: 0 auto;
                left: 0;
                right: 0;
                width: 30px;
                height: 30px;
                line-height: 30px;
                background: #4eff00;
                transform-origin: 15px 100px;
                border-radius: 50%;
                font-size: 16px;
            }
            .p11 {
                transform: rotate(0deg);
            }
            .p12 {
                transform: rotate(60deg);
            }
            .p13 {
                transform: rotate(120deg);
            }
            .p14 {
                transform: rotate(180deg);
            }
            .p15 {
                transform: rotate(240deg);
            }
            .p16 {
                transform: rotate(300deg);
            }
            .p1 {
                transform: rotate(0deg);
            }
            .p2 {
                transform: rotate(120deg);
            }
            .p3 {
    
                transform: rotate(240deg);
            }
            a {
               padding: 2.5px 10px;
               background: #0ebeff;
               border-radius: 5px;
               color: #fff;
               text-decoration: none;
            }
         .start-game {
          position:absolute;
          top: 20px;
          left: 20px;
        }
            (function () {
                let deg = 0;
                // 基础角度
                let baseDeg = 120;
                let $input = $('#num');
                // 多少个旋转点
                let blocks = 360 / baseDeg;
                let k = null;
                let flag =  false;
                const $rotate = $('.rotate');
                // 0 1 2
                $('a').on('click', function () {
                    var num = $input.val();
                    // 当前旋转 位置
                    var curLc = deg % 360 / 120;
                    // 待旋转的角度
                    deg = deg + 4 * 360 + (2*blocks  - num - curLc) * baseDeg;
                    if (flag === true) {
                        return false;
                    }
                    flag = true;
                    clearInterval(k);
                    k = null;
                    $rotate.addClass('tn');
                    $rotate.css({
                        'transform': `rotate(${deg}deg)`
                    });
                    // 监听过渡结束效果!--没加入兼容性
                    $rotate.on('transitionend', function () {
                        flag = false;
                        $(this).removeClass('tn');
                        let timeK = null;
                        // 抽奖后 圆盘动旋转
                        setTimeout(() => {
                            k = timeK = setInterval( () => {
                                var temDeg = deg.toString();
                                if (k !== timeK) {
                                    clearInterval(timeK);
                                    return false;
                                }
                                if ($rotate.hasClass('tn')) {
                                    return false;
                                }
                                // 一下代码 正则是为了解决 js 小数点 计算 问题。
                                temDeg = (/\./).test(temDeg) ? temDeg.replace(/\.\d+/, function ($1) {
                                    var result = $1.length === 2 ? `${$1.substr(1)}0`: `${$1.substr(1)}`;
                                    return result
                                }) : `${temDeg}00`;
                                temDeg = parseInt(temDeg);
                                temDeg += 5;
                                temDeg = temDeg.toString().split('');
                                temDeg.splice(temDeg.length - 2, 0, '.');
                                temDeg = temDeg.join('');
                                deg = parseFloat(temDeg);
                                $(this).css({
                                    'transform': `rotate(${deg}deg)`
                                });
                            }, 13)
                        }, 1000);
    
                    });
                })
            })()

    相关文章:

    PHP转盘抽奖接口实例,php转盘抽奖

    手机端转盘抽奖代码分享

    以上就是案例分享转盘抽奖的demo(附代码)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:javascript html5
    上一篇:输入框只能输入负数,整数,2位小数(键盘弹起事件) 下一篇:Vue子组件与父组件之间的通信(附代码)
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 深入了解angular中的@Component装饰器• 详解node中如何安装多版本并进行切换• JavaScript面向对象详细解析之属性描述符• 浅析node中path路径模块的一些API• 什么是状态?深入学习angular中的动画
    1/1

    PHP中文网