2016-10-04 6 views
0

私はモバイルデバイス上の特定の種類のスライダを扱っています。 アイデアは、cssアニメーションを利用して動きを実行することです。 したがって、私は "タッチ移動"イベントを通じて指の位置を検出し、特定の機能を通じて位置を決定します。 問題のポイントは、最初の数値と最後の数値の間にアニメーションが誤動作しているように見えることです。 prevAll関数とnextAll関数は正しく機能しますが、最初と最後の番号では機能しません。 方向を変えずに無限ループを作る方法がわかりません。 誰かが私を助けることができますか?CSSの遷移を伴うスライダの無限ループ

var 
 
    isMobile = function() { 
 
    if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) 
 
     return true; 
 
    else 
 
     return false; 
 
    }, 
 
    _child = $('ul'), 
 
    human = false, 
 
    saved = 1, 
 
    _check = function(int) { 
 
    _child.find('li').removeClass('selected before after'); 
 
    _child.find('li[value=' + int + ']').addClass('selected'); 
 
    _child.find('li.selected').nextAll('li').addClass('after'); 
 
    _child.find('li.selected').prevAll('li').addClass('before'); 
 
    }, 
 
    _m = function(n) { 
 
    if (n > 10) { 
 
     return _m(n - 10); 
 
    } else if (n < 1) { 
 
     return _m(n + 10); 
 
    } else 
 
     return n; 
 
    }; 
 

 
_child.on('mousedown touchstart', function(e) { 
 
    init = isMobile() ? e.originalEvent.touches[0].pageY : e.pageY; 
 
    human = true; 
 
}); 
 
$(document).on('mousemove touchmove', function(e) { 
 
    e.preventDefault(); 
 
    if (human) { 
 
    var 
 
     _current = isMobile() ? e.originalEvent.touches[0].pageY : e.pageY; 
 

 
    _current = init - _current; 
 
    _current = Math.round(_current * .03); 
 
    _current = saved + _current; 
 

 
    var 
 
     int = _m(_current); 
 

 
    _check(int); 
 

 
    $(this).on('mouseup touchend', function() { 
 
     saved = _current; 
 
     human = false; 
 
    }); 
 
    } 
 
}); 
 

 
_child.find('li[value=' + saved + ']').addClass('selected'); 
 
_check(saved);
body { 
 
    margin: 0; 
 
    background: #FCFCFC; 
 
    color: #222; 
 
    font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif; 
 
} 
 
ul { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
    width: 200px; 
 
    height: 200px; 
 
    background: #FFF; 
 
    position: absolute; 
 
    top: 50%; 
 
    left: 50%; 
 
    transform: translate(-50%, -50%); 
 
    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 32px rgba(0, 0, 0, 0.05); 
 
    overflow: hidden; 
 
} 
 
li { 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
    line-height: 200px; 
 
    text-align: center; 
 
    font-size: 72px; 
 
    opacity: .5; 
 
    transition: all .4s ease 
 
} 
 
li.after { 
 
    transform: translateY(100%); 
 
} 
 
li.before { 
 
    transform: translateY(-100%); 
 
} 
 
li.selected { 
 
    opacity: 1; 
 
    transform: translateY(0); 
 
    z-index: 1; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li value="1" class="selected">1</li> 
 
    <li value="2">2</li> 
 
    <li value="3">3</li> 
 
    <li value="4">4</li> 
 
    <li value="5">5</li> 
 
    <li value="6">6</li> 
 
    <li value="7">7</li> 
 
    <li value="8">8</li> 
 
    <li value="9">9</li> 
 
    <li value="10">10</li> 
 
</ul>

答えて

0

作業例を作成しようとしましたが、私は十分な時間を持っていません。 最後のliに到達したら、上から1つを取り出し、リストの最後に追加して最初のものを削除します。このようなもの:

var cloneLi = $(_child.find('li')[0]).clone() 
_child.append(cloneLi); 
$(_child.find('li')[0]).remove() 
関連する問題