2016-10-04 2 views
0

Ich arbeite an einer bestimmten Art von Slider auf mobilen Geräten. Die Idee besteht darin, nur die CSS-Animationen zu nutzen, um die Bewegungen auszuführen. Also, ich erkenne die Position des Fingers durch das "touchmove" -Ereignis und durch eine bestimmte Funktion ermittele ich die Position. Nun, der Punkt der Sache ist, dass zwischen der ersten Nummer und der letzten, die Animation scheint fehlerhaft zu sein. Die Funktionen prevAll und nextAll funktionieren ordnungsgemäß, jedoch nicht für die erste und die letzte Nummer. Ich weiß nicht, wie man eine Endlosschleife macht, ohne die Richtung zu ändern. Kann mir jemand helfen?Unendliche Schleife in Slider mit CSS-Übergang

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>

Antwort

0

Versuchte Arbeitsbeispiel zu erstellen, aber ich habe nicht genug Zeit. Wenn Sie die letzte Li erreichen, nehmen Sie einfach eine von oben, fügen Sie sie am Ende der Liste an und entfernen Sie die erste. Etwas wie dieses:

var cloneLi = $(_child.find('li')[0]).clone() 
_child.append(cloneLi); 
$(_child.find('li')[0]).remove() 
Verwandte Themen