javascriptとjqueryでロト7のクイックピックみたいな数字を選択できるものを作りました

2018年12月19日

もう何年もクイックピックという数字の自動選択でロト7を買ってるのですが、当たったためしがないです。
趣向を変えて、自分で7つ数字を選ぼうと思い、作成してみました。

<style>
#slot {
  width: 20em;
  margin: 1em auto;
}
#slot div {
  margin: 0;
  padding-bottom: .5em;
}
#slot_choices span {
  margin: 0;
  padding: 0;
  display:inline-block;
  width: 2em;
  height: 2em;
  text-align: center;
  line-height: 2em;
  position: relative;
}
#slot_choices span.hit {
  color: red;
}
#slot_choices span.now::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 2em;
  height: 2em;
  border: 1px solid blue;
  border-radius: 50%;
}
#slot_btns {
  text-align: center;
}
#slot_btns button {
  padding: .5em 1em;
}
</style>

<div id="slot"></div>

<script src="./jquery.min.js"></script>
<script>
"use strict";
var Slot7 = function () {
  var choices = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37];
  var choiced_id = null;
  var stop_flag = true;
  var choiced_count = 0;

  var elem_id = $('#slot');
  var div_choices = $('<div id ="slot_choices"></div>');
  for (var i = 0, len = choices.length; i < len; ++i) {
    div_choices.append('<span class="slot_id_'+choices[i]+'">'+choices[i]+'</span>');
  }
  elem_id.append(div_choices);

  var div_btn = $('<div id="slot_btns"></div>'),
      btn_start = $('<button></button>');
  div_btn
  .append(btn_start)
  elem_id.append(div_btn);

  function reset_choices() {
    if (choiced_id !== null) {
      choices.splice(choiced_id, 1);
    }
    var i, r, tmp;
    for(i = choices.length - 1; i > 0; i--) {
      r = Math.floor(Math.random() * (i + 1));
      tmp = choices[i];
      choices[i] = choices[r];
      choices[r] = tmp;
    }
  }

  function game_slot() {
    if (choiced_id !== null) {
      div_choices.find('.now').removeClass('now');
      div_choices.find('.slot_id_'+choices[choiced_id]).addClass('now');
    }
    if (! stop_flag) {
      return;
    }
    choiced_id++;
    if (choices.length <= choiced_id) {
      choiced_id = 0;
    }
    setTimeout(game_slot, 50);
  }

  function toggle_slot() {
    if (choiced_id === null || ! stop_flag) {
      reset_choices();
      stop_flag = true;
      game_slot();
    } else {
      stop_flag = false;
      div_choices.find('.slot_id_'+choices[choiced_id]).addClass('hit');
      choiced_count++;
    }
    toggle_btn(stop_flag);
    if (choiced_count >= 7) {
      btn_start.attr('disabled', true);
    }
  }

  function toggle_btn(flag) {
    if ( ! flag) {
      btn_start.text('START');
    } else {
      btn_start.text('STOP');
    }
  }
  toggle_btn(false);
  
  btn_start.on('click', function(){
    toggle_slot();
  });
}


$(function() {
  var slot7 = Slot7();
});
</script>