Визуализация некоторых данных на сайте может требовать наличие только одной рабочей области, к примеру, это могут быть блок-схемы, карта, и т.п. По этой причине может возникнуть необходимость в скроллинге рабочей области. Ярким примером может послужить карта GoogleMaps, на которой реализован механизм click&scroll, иными словами посредством клика и прокрутки можно перемещаться по рабочей области.
Предположим, вам потребовалось сделать нечто подобное со скроллингом, у меня на практике это оказались блок схемы, которые не всегда помещались в видимую часть браузера. Стандартные средства скроллинга браузера в этом случае позволяли просматривать растянувшийся до непонятных размеров блок, но такое дело меня не устраивало. Начался поиск, и было найдено решение, с которым я решил поделиться тут.
Создадим два блока, первый из них будет окном, это та самая видимая область, второй блок на порядок большего размера – рабочая область.
Код html:
<div class="frame">
<div class="content"></div>
</div>
Код css:
.frame {
width:300px;
height:300px;
overflow:hidden;
}
.content {
width:4000px;
height:4000px;
}
Далее необходимо прописать самое основное, это наш обработчик на javascript. Кстати в коде используется библиотека JQuery, это значит, что предварительно её следует подключить на странице.
Код javascript:
var startX = 0;
var offsetXs = 0;
var startY = 0;
var offsetYs = 0;
var onScroll = false;
$(document).ready(function(){
// запоминаем начальные координаты курсора при клике
$(".content").mousedown(function(e){
startX = e.clientX;
startY = e.clientY;
onScroll = true;
});
$(document.body).mousemove(function(e){
// отбираем события mousemove после только после клика
if (onScroll){
var offsetX = offsetXs + (startX - e.clientX);
var offsetY = offsetYs+ (startY - e.clientY);
// перемещение окна
$(".frame").scrollLeft(offsetX);
$(".frame").scrollTop(offsetY);
}
});
// записываем координаты после отпускания кнопки мыши
$(document.body).mouseup(function(){
onScroll=false;
offsetXs = $(".frame").scrollLeft();
offsetYs = $(".frame").scrollTop()
});
});
Для скроллинга используются методы .scrollLeft() и .scrollTop() библиотеки JQuery. Стандартные скролбары при этом отключаются в css – overflow:hidden.