У меня есть jpg, который имеет высоту 500 пикселей и ширину 50 пикселей. Он состоит из 10 50px x 50px квадратов, каждый из которых содержит число от 1 до 10 (1 в верхней части изображения и 10 внизу). (Jpg находится здесь: http://i39.tinypic.com/mmq4x5.jpg)
Затем у меня есть контейнер размером 50x50 на странице с переполнением, установленным в скрытое. Внутри этого у меня есть 500 high x 50 wide div, который содержит вышеупомянутое изображение в качестве фона.
Всякий раз, когда посетитель нажимает на div, я прокручиваю внутренний div на 50 пикселей, используя jquery animate (снимая 50px с вершины css для внутреннего div. Это дает эффект гладкого счетчика прокрутки.
Все это отлично работает независимо от того, что я не могу понять способ, чтобы при достижении 10 я мог сгладить прокрутку до 1 (IE: оберните вокруг так, чтобы, когда на div нажали 10, число 10 прокручивается вверх и заменяется на номер 1 от верхней части графической прокрутки вверх). Я знаю, что могу проверить верхнюю позицию, и если она находится в правильном месте, просто переустановите ее на 0px, но это заставит ее "прыгать" на 1, а не обертываться. Я мог бы прокрутить длину jpg в обратном направлении, чтобы прокрутить BACK до 1, но это не тот эффект, который я хочу - я хочу, чтобы он выглядел как непрерывный счетчик, который идет от 1 до 10, а затем до 1 снова.
Вот jsFiddle для этого: http://jsfiddle.net/ChrisJones/zTBYe/2/
Может кто-нибудь подумать о том, как это сделать?
Для справки здесь приведен полный код:
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<style type="text/css">
#slider{
width:50px;
height:500px;
background: url(numstrip.jpg) no-repeat;
position:relative;
top:0px;
}
#wrapper{
width:50px;
height:50px;
position:fixed;
overflow:hidden;
}
</style>
</head>
<body>
Div is below
<br>
<br>
<div id="wrapper">
<div id="slider"></div>
</div>
<script type="text/javascript">
$(document).ready(function () {
$('#slider').click(function () {
topPos = parseInt($(this).css("top")) - 50;
$(this).animate({
'top': topPos
}, 200);
});
});
</script>
</body>
</html>
Попробуйте это, это поможет вам
$('#slider').click(function () {
if($(this).css("top")=='-450px')
topPos = parseInt($(this).css("top")) + 450;
else
topPos = parseInt($(this).css("top")) - 50;
$(this).animate({
'top': topPos
}, 200);
});
Скриншот here
Добавлен только счетчик и проверен;
$(document).ready(function () {
var counter = 1;
$('#slider').click(function () {
if(counter == 10)
topPos = 0;
else
topPos = parseInt($(this).css("top")) - 50;
$(this).animate({
'top': topPos
}, 200);
counter++;
});
});
Обновил свою скрипку, вот она.