zoukankan      html  css  js  c++  java
  • 大转盘抽奖css3+js(简单书写)

       今天花了一段时间简单写了下抽奖大转盘,这里写的只是自己想到的简单的写了下(也希望收获其他想法),后续,再写的话会更新。

       大体思路:页面加载完成后,通过监听开始按钮的点击事件。然后会根据产生的随机数,通过控制旋转针对象的transform属性,然后进行旋转,最后在结束后获取存储来数组中对应的抽奖内容最后弹出。

       知识点:transform, translation,js数组,Math等等

       先看下效果,没有素材,只是用css简单的布了下局。不要喷我比较简陋,嘿嘿。

       

    接下来是基本代码结构:

     1 <div class="rotate_con">
     2             <div class="rotate_row">
     3                 <div class="rotate_item">
     4                     RMB100
     5                 </div>
     6                 <div class="rotate_item">
     7                     流量100M
     8                 </div>
     9                 <div class="rotate_item">
    10                     谢谢参与
    11                 </div>
    12             </div>
    13             <div class="rotate_row">
    14                 <div class="rotate_item">
    15                     再接再厉
    16                 </div>
    17                 <div class="rotate_item item_start" id="start">
    18                     开始
    19                     <div class="rotate" id="rotate_zhen">
    20 
    21                     </div>
    22                 </div>
    23                 <div class="rotate_item">
    24                     RMB2
    25                 </div>
    26             </div>
    27             <div class="rotate_row">
    28                 <div class="rotate_item">
    29                     RMB100
    30                 </div>
    31                 <div class="rotate_item">
    32                     谢谢参与
    33                 </div>
    34                 <div class="rotate_item">
    35                     流量100M
    36                 </div>
    37             </div>
    38         </div>

    接下来是样式:

     1 <style>
     2             * {
     3                 margin: 0;
     4                 padding: 0;
     5             }
     6             
     7             .rotate_con {
     8                 margin: 50px auto;
     9                 width: 320px;
    10                 height: 320px;
    11                 border: 1px solid #FFFFFF;
    12                 border-radius: 50%;
    13             }
    14             
    15             .rotate_row {
    16                 display: flex;
    17                 display: -webkit-flex;
    18                 height: 33.3333333%;
    19             }
    20             
    21             .rotate_item {
    22                 flex: 0 0 33.3333333%;
    23                 -webkit-flex: 0 0 33.3333333%;
    24                 line-height: 106.666666px;
    25                 text-align: center;
    26                 background: yellow;
    27                 padding: 1px;
    28                 border: 1px solid #fff;
    29                 box-sizing: border-box;
    30             }
    31             
    32             .item_start {
    33                 position: relative;
    34                 background-color: #FF5E5E;
    35                 color: #FFFFFF;
    36                 font-weight: bold;
    37                 cursor: pointer
    38             }
    39             
    40             .item_start:active {
    41                 background: #ED745B;
    42             }
    43             
    44             .rotate {
    45                 position: absolute;
    46                 width: 5px;
    47                 height: 106px;
    48                 top: -53px;
    49                 left: 53px;
    50                 background: #fff;
    51                 transform: rotateZ(0deg);
    52                 transform-origin: left bottom;
    53                 -webkit-transform-origin: left bottom;
    54                 transition: all 1.5s cubic-bezier(0.25, 0.1, 0.25, 1);
    55             }
    56             
    57             .item_active {
    58                 border-color: red;
    59             }
    60         </style>

    最后js部分

     1 <script>
     2             //获取对象
     3             var getid = function(id) {
     4                 return document.getElementById(id);
     5             };
     6             //按照旋转顺序的数组
     7             var context = ["流量100M", "谢谢参与", "RMB2", "流量100M", "谢谢参与", "RMB100", "再接再厉", "RMB100"];
     8             var deg = 45, //旋转的默认角度360/8
     9                 numdeg = 0, //记录上次旋转停止时候的角度
    10                 num = 0, //记录旋转后数组的位置
    11                 isRotated = false; //判断是否在进行中
    12             window.onload = function() {
    13                 var zhen = getid("rotate_zhen");
    14                 getid("start").addEventListener('click', function() {
    15                     if(isRotated) return; //如果正在旋转退出程序
    16                     isRotated = true;
    17                     var index = Math.floor(Math.random() * 8); //得到0-7随机数
    18                     num = index + num; //得到本次位置
    19                     numdeg += index * deg + Math.floor(Math.random() * 3 + 1) * 360;
    20                     zhen.style.webkitTransform = zhen.style.transform = "rotateZ(" + numdeg + "deg)";
    21                     setTimeout(function() {
    22                         if(num >= 8) { //如果数组位置大于7就重新开始
    23                             num = num % 8;
    24                         }
    25                         alert(context[num]);
    26                         isRotated = false; //旋转改为false说明没有旋转
    27                     }, 1700)
    28                 }, false)
    29             }
    30         </script>

    最后是测试结果:

  • 相关阅读:
    迎接2019多校联合新生训练赛(2018/12/31)
    Educational Codeforces Round 57 (Rated for Div. 2) 前三个题补题
    睡学预习(4)
    睡学预习(3)
    Python学习笔记(3)动态类型
    Maya Calendar POJ
    睡学预习(2)——数列极限
    2018-2019赛季多校联合新生训练赛第八场(2018/12/22)补题题解
    蓝桥杯入门题:Hello, world!
    蓝桥杯:P1103
  • 原文地址:https://www.cnblogs.com/hsp-blog/p/5901075.html
Copyright © 2011-2022 走看看