【jQuery】スロットモーション2

改造版!Thanks Stackoverflow!!

by tea4two

HTML

<script src="http://gsgd.co.uk/sandbox/jquery/easing/jquery.easing.1.3.js"></script>
<div id="result">
    Result: <span><!-- result text or img will be inserted dynamically--></span>
</div>

<ul class="mholder">
    <li class="pip pip01">001</li>
    <li class="pip pip02">002</li>
    <li class="pip pip03">003</li>
    <li class="pip pip04">004</li>
    <li class="pip pip05">005</li>
    <li class="pip pip06">006</li>
    <li class="pip pip07">007</li>
    <li class="pip pip08">008</li>
    <li class="pip pip09 last">009</li>
</ul>
<ul class="mholder">
    <li class="pip pip01">001</li>
    <li class="pip pip02">002</li>
    <li class="pip pip03">003</li>
    <li class="pip pip04">004</li>
    <li class="pip pip05">005</li>
    <li class="pip pip06">006</li>
    <li class="pip pip07">007</li>
    <li class="pip pip08">008</li>
    <li class="pip pip09 last">009</li>
</ul>
<ul class="mholder">
    <li class="pip pip01">001</li>
    <li class="pip pip02">002</li>
    <li class="pip pip03">003</li>
    <li class="pip pip04">004</li>
    <li class="pip pip05">005</li>
    <li class="pip pip06">006</li>
    <li class="pip pip07">007</li>
    <li class="pip pip08">008</li>
    <li class="pip pip09 last">009</li>
</ul>

<p id="extraText">extra text</p>
<p id="goBack"><a href="#">go back</a></p>
<!--p><a href="#" id="start">start</a></p-->

CSS

#result {
    padding: 5px;
    width: 200px;
    margin-bottom: 10px;
    border: 1px solid #ccc;
    background: #000;
    color: #fff;
}
.mholder {
    height: 120px;
    width:60px;
    border: solid 1px black;
    position: relative;
    overflow: hidden;
    float:left;
}
.pip {
    height:58px;
    width:58px;
    color: #ccc;
    border: 1px solid #666;
    position:absolute;
}
.pip01 {background-color: red;}
.pip02 {background-color: blue;}
.pip03 {background-color: skyblue;}
.pip04 {background-color: pink;}
.pip05 {background-color: orange;}
.pip06 {background-color: green;}
.pip07 {background-color: grey;}
.pip08 {background-color: yellow;}
.pip09 {background-color: purple;}

#extraText {
    clear: both;
    padding: 5px;
    font-weight: bold;
}
#goBack a{
    display: block;
    width: 200px;
    padding: 5px;
    text-align: center;
    border-radius: 5px;
    background: #a33;
    text-decoration: none;
    color: #fff;
}

JavaScript

$(document).ready(function() {
    $(".pip").last().addClass("last");
    $(".mholder").each(function() {
        var i = 0;
        $(this).find(".pip").each(function() {
            var $this = $(this);
            $this.css("top", i);
            i += $this.height();
        });
    });
});

function slotStart(){
    var countScrolls = $('.mholder .pip').length;
    for (var i=0; i < countScrolls; i++) {
       doScroll($('.mholder .pip:nth-child(' + i + ')'));
    }
}

function doScroll($ele) {
    var top = parseInt($ele.css("top"));
    if (top < -60) {
        var $lastEle = $ele.closest('.mholder').find(".last");
        $lastEle.removeClass("last");
        $ele.addClass("last");
        var top = (parseInt($lastEle.css("top")) + $lastEle.height());
        $ele.css("top", top);
    }
    $ele.animate({ top: (parseInt(top) - 60)}, 100, 'linear', function() {
        doScroll($(this))
    });
}
                 
$(slotStart);