2016/07/03

[JavaScript]スロットの実装その2

昨日のエントリーでスロットを実装するプログラムの紹介をしましたが、それを編集して掲載さいているサイトがあったので、紹介。

jQuery + jQuery Easing Plugin

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8" />
  <title>Sample Slot:jQuery+jQuery Easing Plugin</title>
  <script src="libs/jquery-1.8.3.min.js" type="text/javascript"></script>
  <script src="libs/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="slots.js" type="text/javascript"></script>
  <link href="slots.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
  <p align="center">
   回転スタートから停止までの時間:
   <input id="txt_duration" type="text" value="3" size="3" maxlength="3" />
   [秒]
  </p>
  <p align="center">
   アニメーション(回転)方式:
   <select id="sel_easing" size="1">
    <option selected>jswing</option>
    <option>easeInQuad</option>
    <option>easeOutQuad</option>
    <option>easeInOutQuad</option>
    <option>easeInCubic</option>
    <option>easeOutCubic</option>
    <option>easeInOutCubic</option>
    <option>easeInQuart</option>
    <option>easeOutQuart</option>
    <option>easeInOutQuart</option>
    <option>easeInQuint</option>
    <option>easeOutQuint</option>
    <option>easeInOutQuint</option>
    <option>easeInSine</option>
    <option>easeOutSine</option>
    <option>easeInOutSine</option>
    <option>easeInExpo</option>
    <option>easeOutExpo</option>
    <option>easeInOutExpo</option>
    <option>easeInCirc</option>
    <option>easeOutCirc</option>
    <option>easeInOutCirc</option>
    <option>easeInElastic</option>
    <option>easeOutElastic</option>
    <option>easeInOutElastic</option>
    <option>easeInBack</option>
    <option>easeOutBack</option>
    <option>easeInOutBack</option>
    <option>easeInBounce</option>
    <option>easeOutBounce</option>
    <option>easeInOutBounce</option>
   </select>
  </p>
  <div align="center">
   <div style="width:306px;" align="center">
    <div class="slots" id="slots_a">
     <div class="wrapper" style="margin-top: -200px;"></div>
    </div>
    <div class="slots" id="slots_b">
     <div class="wrapper" style="margin-top: -200px;"></div>
    </div>
    <div class="slots" id="slots_c">
     <div class="wrapper" style="margin-top: -200px;"></div>
    </div>
    <div style="text-align:center;clear:both;">
     <input id="btn_start" type="button" value="Start" onClick="go();" style="margin-top:4px;">
     <input id="btn_reset" type="button" value="Reset" onClick="reset();" style="margin-top:4px;" disabled>
    </div>
    <p id="result" style="text-align:center;color:red;font-size:42px;margin-top:0px"></p>
   </div>
  </div>
 </body>
</html>
body {
 background-color: white;
 padding: 0px;
 margin: 0px;
 font-size: 12px;
}

.slots {
 font-size: 100px;
 font-family: arial, helvetica, sans-serif;
 overflow: hidden;
 width: 100px;
 height: 100px;
 border: 1px solid black;
 float: left;
}

.slots .wrapper {
 margin-top: 3px;
 width: 100px;
}

.slots .slot {
 width: 100px;
 height: 100px;
 text-align: center;
}
var opts = ['1357464992_github.png', '1357465001_ffffound.png', '1357465007_live-journal.png', '1357465012_bebo.png', '1357465021_icon-dock.png', '1357465029_metacafe.png', '1357465036_newsvine.png'];
var results = new Array(3);
var time;
var select;
var columns;

$(document).ready(function() {
 onload();
});

function onload() {
 // initialize drawed this html page.
 columns = 0;
 addSlots($("#slots_a .wrapper"));
 addSlots($("#slots_b .wrapper"));
 addSlots($("#slots_c .wrapper"));
}

function go() {
 // initialize after pushed Start button.
 time = parseInt($("#txt_duration").val()) * 1000;
 select = document.getElementById('sel_easing');
 $("#btn_start").attr("disabled", "disabled");

 // addSlots($("#slots_a .wrapper"));
 moveSlots($("#slots_a .wrapper"));
 // addSlots($("#slots_b .wrapper"));
 moveSlots($("#slots_b .wrapper"));
 // addSlots($("#slots_c .wrapper"));
 moveSlots($("#slots_c .wrapper"));

 // refee.
 $(this).delay(time + 1000).queue(function() {
  if (results[0] == results[1] && results[1] == results[2]) {
   $("#result").text("当たり!");
  } else {
   $("#result").text("はずれ~");
  }
  $("#btn_reset").removeAttr("disabled");
  $(this).dequeue();
 })
}

function reset() {
 $("#slots_a .wrapper").children().remove();
 $("#slots_a .wrapper").css({
  "margin-top" : "-200px"
 });
 $("#slots_b .wrapper").children().remove();
 $("#slots_b .wrapper").css({
  "margin-top" : "-200px"
 });
 $("#slots_c .wrapper").children().remove();
 $("#slots_c .wrapper").css({
  "margin-top" : "-200px"
 });

 $("#btn_start").removeAttr("disabled");
 $("#btn_reset").attr("disabled", "disabled");
 $("#result").text("");
 onload();
}

function addSlots(jqo) {
 for (var i = 0; i < 15; i++) {
  var ctr = Math.floor(Math.random() * opts.length);
  jqo.append("<div class='slot'><img border='0' src='../images/" + opts[ctr] + "' /></div>");
  if (i == 12) {
   results[columns] = ctr;
   columns++;
  }
 }
}

function moveSlots(jqo) {
 time += Math.round(Math.random() * 1000);

 var marginTop = parseInt(jqo.css("margin-top"), 10)
 marginTop -= (10 * 100)

 jqo.stop(true, true);
 jqo.animate({
  "margin-top" : marginTop + "px"
 }, {
  'duration' : time,
  'easing' : select.options[select.selectedIndex].text
 });
}

0 コメント:

コメントを投稿