Пожалуйста, проверьте следующее javascript.
$(document).ready(function(){
var item_width = $('main ul li ').width() + 14;
var length = $('main ul li').length;
var move_count = 2;
var movement_width = item_width * move_count;
var cloneStr = $('main ul').html();
$(cloneStr).appendTo('main ul');
$(cloneStr).prependTo('main ul');
$('main ul').css('left', -item_width * length );
$(".left").click(function(event) {
var moveRight = parseFloat( $('main ul').css('left') ) + movement_width;
$('main ul').animate({left:moveRight}, 500, function functionName() {
var rightElems = $('main ul li').slice( -move_count );
rightElems.clone().prependTo('main ul');
rightElems.remove();
$('main ul').css('left', -item_width * length );
});
});
$(".right").click(function(event) {
var moveLeft = parseFloat( $('main ul').css('left') ) - movement_width;
$('main ul').animate({left:moveLeft}, 500, function functionName() {
var leftElems = $('main ul li').slice(0, move_count );
leftElems.clone().appendTo('main ul');
leftElems.remove();
$('main ul').css('left', -item_width * length );
});
});
});
move_count означает количество перемещаемых предметов. Когда ваш html был загружен, добавляйте текущие элементы до и после. Таким образом, ul будет иметь 3 раза предметов. И как только анимация будет выполнена, первые n-элементы или последние n-элементы будут перемещены в последний или первый в соответствии с направлением. Например, если вы двигаетесь вправо, первые элементы move_count будут перемещены в последний, а при нажатии влево последние элементы move_count будут перемещены в первый.
ОБНОВЛЕНО: Новая версия :
$(document).ready(function(){
var item_width = $('main ul li ').width() + 14;
var length = $('main ul li').length;
var move_count = 2;
var movement_width = item_width * move_count;
var cloneStr = $('main ul').html();
$(cloneStr).appendTo('main ul');
$(cloneStr).prependTo('main ul');
$('main ul').css('left', -item_width * length );
$(".left").click(function(event) {
moveTo( -move_count );
});
$(".right").click(function(event) {
moveTo( move_count );
});
function moveTo( moveCount ){
var moveLeft = parseFloat( $('main ul').css('left') ) - ( item_width * moveCount );
$('main ul').animate({left:moveLeft}, 500, function functionName() {
var moveElems;
if ( moveCount > 0 ){
moveElems = $('main ul li').slice(0, moveCount );
moveElems.clone().appendTo('main ul');
}else{
moveElems = $('main ul li').slice( moveCount );
moveElems.clone().prependTo('main ul');
}
moveElems.remove();
$('main ul').css('left', -item_width * length );
});
}
});