【来、来、来本身写——九宫格转盘】

五一告急,4月29日接到小任务,放假前作个九宫格转盘小页面,噢~~设计稿已出,当前时间下午两点,

正在改bug,主流项目30日得上线,九宫格30日中午得上线。时间略紧下午6点改完bug,加班搞九宫格。



一个页面,三屏内容,九宫格、结果弹窗和分享提示。

计划:

晚上写静态页面
明早写js
晚上搞定了静态界面,以下: 111821h4i011f1l0pt1tss.png 
111822b64y3rfjrp2yhjz2.png 

111825rnmr2aqlrnqvkr4z.png 

css

htmlcss方面,宽度用320px(主要用于移动端),主体内容绝对定位,我以为目前的写法仍是不错,html

这里就不贴代码了,结尾我会附上页面连接,若是有好的建议,但愿获得大神的指点。数组



JS方面,由于不想到网上去下载别人的代码,也没时间去研究别人的好的实现方式,就本身随便写了个。app

大体思路以下:dom

1.先实现匀速转动:把执行顺序存入数组,setTimeout重复调用,改变当前active位置(这里的命名有点坑请忽略):ide

  1. var turnOrder = ['bg-3','bg-6','bg-9','bg-8','bg-7','bg-4','bg-1','bg-2'];
    函数

  2. var turnDom = [];
    this

  3. for(var i = 0;i < turnOrder.length; i++){
    spa

  4.     turnDom.push($('.'+turnOrder[i]));
    设计

  5. }

  6. function goScroll(i){if(i==8)  i = 0;

  7.     turnDom[i].addClass('active');

  8.     setTimeout(function(){

  9.                     turnDom[i].removeClass('active');

  10.                     i++;

  11.                     goScroll(i);

  12.               },500);

  13. }

复制代码


2.实现先加速、再减速、最后得出结果。

加速和减速须要用setTImeout的延迟控制,加速或者减速须要用延迟范围来判断。

为方便理解,我先直接提代码:

  1. $(document).on('click', '[data-action]', function(e){

  2.     var $this = $(this),

  3.         action = $this.data('action');

  4.     switch(action){

  5.         case 'start':

  6.             var speed = Math.floor(Math.random()*150) + 200;//350-200的范围

  7.             goScroll(0,  speed, 0.8);

  8.             break;

  9.     }

  10. });


  11. function goScroll(i, speed, mul){

  12.     if(speed < 30) mul = 1.1;

  13.     if(i==8)  i = 0;

  14.     turnDom[i].addClass('active');

  15.     if(speed > 350) {//结束

  16.         turnDom[i].addClass('active');

  17.         scrolling = false;

  18.         openResult(i);

  19.         return;

  20.     }

  21.     setTimeout(function(){

  22.                     turnDom[i].removeClass('active');

  23.                     i++;

  24.                     speed = speed * mul;

  25.                     goScroll(i, speed, mul);

  26.               },speed);

  27. }

复制代码


向自调函数goScroll传入速度和乘数,speed随机范围我设置为350-200毫秒,初始乘数是0.8,每次自调用speed和mul相乘,

这样速度就慢慢变快了,当速度小于30毫秒,乘数为1.1,速度慢慢就变慢了,当速度大于350时,中止并公布结果。这里的结果速度

必定要大于初始的随机速度,不然会出现直接输出结果。


到目前为止还不完善,如今每一种的结果随机概率并不平均,开始转动后、也没有阻止转动按钮。

仍是直接贴代码:

  1. var scrolling = false;//是否在转

  2. var who;

  3. function setWho(){

  4.     who = Math.floor(Math.random()*9);

  5.     if(who == 8) who = 0;

  6. }


  7. $(document).on('click', '[data-action]', function(e){

  8.     var $this = $(this),

  9.         action = $this.data('action');

  10.     switch(action){

  11.         case 'start':

  12.             if(scrolling==true) return;

  13.             setWho();

  14.             var speed = Math.floor(Math.random()*150) + 200;//350-200的范围

  15.             scrolling = true;

  16.             goScroll(0,  speed, 0.8);

  17.             break;

  18.     }

  19. });


  20. function goScroll(i, speed, mul){

  21.     if(speed < 30) mul = 1.1;

  22.     if(i==8)  i = 0;

  23.     turnDom[i].addClass('active');

  24.     if(speed > 350 && who==i) {//结束

  25.         turnDom[i].addClass('active');

  26.         scrolling = false;

  27.         openResult(i);

  28.         return;

  29.     }

  30.     setTimeout(function(){

  31.                     turnDom[i].removeClass('active');

  32.                     i++;

  33.                     speed = speed * mul;

  34.                     goScroll(i, speed, mul);

  35.               },speed);

  36. }

复制代码

setWho用来肯定结果(这里给本身公司的软件的几率+1,也就是九分之二的几率,不过度撒 O(∩_∩)O ...),isScrolling,肯定是否正在转动。


嗯,大体比较重要的逻辑就是这些了。固然还有部分都没贴出来,若是须要,能够到实际项目里去看,那么来看看效果吧!》点这里《

相关文章
相关标签/搜索