Я не лучший из всех с математикой, но в основном вам нужно выяснить, насколько перемещался ваш прокручиваемый контент, и остановить его перемещение, когда он слишком сильно сдвинулся вверх или вниз. Я создал аналогичную вещь для того, что, как вы пытаетесь достичь, здесь http://codepen.io/lukeocom/pen/nHuri
Я получаю высоту контейнера и высоту содержимого, а затем проверяю, что количество прокрутки контента минус высота контейнер, меньше высоты содержимого. Это все очень запутывает мой математический слабый мозг, но, возможно, вы можете найти более простой метод. Во всяком случае, мой пример работает.
Вы должны быть осторожны с тем, сколько вы прокручиваете контент, а также насколько быстро анимация завершена и как часто выполняется интервал.
Я попытаюсь очистить рабочий пример кода, но здесь ...
var scrollamnt = 0, timer, $content = $('#content');
var theoff, scroll = true;
var sHeight = $content.height(),
cHeight = $('#scrollC').height(),
oHeight;
$('#up, #down').bind('mouseover', function() {
$this = $(this).attr('id');
timer = setInterval(function() {
theoff = $content.offset();
oHeight = (-theoff.top + cHeight);
if ($this === 'down' && (oHeight < sHeight)) {
scrollamnt -= 10;
scroll = true;
} else if ($this === 'up' && scrollamnt < 0) {
scrollamnt += 10;
scroll = true;
} else
scroll = false;
if (scroll) {
$content.animate({
'margin-top' : scrollamnt
}, 0, 'linear');
//end animate
}//end if
}, 10);
//end interval*/
}).bind('mouseout', function() {
clearInterval(timer);
});
, не смотря на свой код, как вы думаете, это может быть сделано при наличии DIV, с переливом , и контроль прокрутки этого переполнения? Я чувствую, что сделал это в прошлом таким образом. EDIT: см. Http://stackoverflow.com/questions/13362/scrolling-overflowed-divs-with-javascript – loesak
Вы пробовали использовать функции offset(), position(), scrollTop() и т. Д., Чтобы проверить положение div, которое вы двигаться? – lukeocom
Проверьте позицию div, будет ли он исчезать или нет, а затем выполните действие. – vusan