Как сделать прокрутку такой же реальной, как нажатие на стрелки полосы прокрутки?
Я хочу смоделировать щелчки стрелок полосы прокрутки, наведя определенные элементы. Основной пример:
function scrollBody(dir, speed){
$('html, body').animate(
{'scrollTop': dir+'='+speed+'px'},
{duration: 300, easing: 'easeOutQuad'}
);
};
$('#top').hover(function(){scrollBody('-', '50')});
$('#bottom').hover(function(){scrollBody('+', '50')});
$('#top-fast').hover(function(){scrollBody('-', '150')});
$('#bottom-fast').hover(function(){scrollBody('+', '150')});
#content{width: 300px}
.scroller{
position: fixed;
background-color: grey;
color: white;
right:0;
padding: 5px;
width: 35px;
}
.scroller:hover{background-color:green}
#top{top:35px}
#bottom{bottom:35px}
#top-fast{top:0}
#bottom-fast{bottom:0}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
<div id="content">
Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet
</div>
<div id="top" class="scroller">
2Top
</div>
<div id="bottom" class="scroller">
2Bot
</div>
<div id="top-fast" class="scroller">
2T++
</div>
<div id="bottom-fast" class="scroller">
2B++
</div>
Я знаю, это очень просто и хуже, у него есть икота... Вам нужно переместить курсор, чтобы прокрутить его. Я хочу превратить его в непрерывную плавную прокрутку.
После этого я просто повернул его рекурсивно (скрипка), но у меня переполнение стека (консоль), должен ли я использовать stopPropagation
в какой-то момент (после нескольких рекурсий) или цикла вместо использования переключателя при наведении курсора (для остановки, когда не зависания) или что-то еще?
Если вы знаете другие способы (без jQuery-UI для сглаживания или вообще без jQuery), я буду признателен!
1 ответ
Дайте всем элементам, для которых нужно это поведение при наведении, определенный класс.
Грязная проверка, если мышь находится над этими элементами.
Отправляйте соответствующие клики / активируйте прокрутку, в желаемом темпе или до тех пор, пока наведение активно.
Обновление:
Вот рабочий фрагмент. Ничего не изменилось в скрипке, кроме JS. Из-за тайм-аута произошла небольшая задержка, чтобы остановить прокрутку. Соответствующие документы:
var actions;
function scroll(dir, speed){
$('html, body').animate(
{'scrollTop': dir+'='+speed+'px'},
{duration: 300, easing: 'easeOutQuad'}
);
};
function startScroll(dir, speed){
actions = setTimeout(function(){
scroll(dir, speed);
startScroll(dir, speed);
}, 300);
};
function endScroll(){
clearTimeout(actions);
}
$('#top').hover(function(){startScroll('-', '50')}, endScroll);
$('#bottom').hover(function(){startScroll('+', '50')}, endScroll);
$('#top-fast').hover(function(){startScroll('-', '150')}, endScroll);
$('#bottom-fast').hover(function(){startScroll('+', '150')}, endScroll);
парить, особенно 2-й обратный вызов при выходе мыши.
clearTimeout, так как он нам нужен, чтобы отключить прокрутку и остановить бесконечный цикл.