Как использовать JQuery/Javascript для прокрутки вниз страницы, когда курсор находится в верхнем или нижнем краю экрана?
Простой, Я просто хотел бы иметь это, когда пользователь перетаскивает элемент, и они достигают самого низа или вершины окна просмотра (10 пикселей или около того), страница (около 3000 пикселей в длину) аккуратно прокручивается вниз или вверх, пока они не перемещают курсор (и, следовательно, элемент, который вытаскивают) из области.
Элемент - это тег li, который использует jquery для перетаскивания элементов списка. Конкретно:
В настоящее время я использую window.scrollBy(x = 0, y = 3) для прокрутки страницы и переменных:
- e.pageY... обеспечивает абсолютные Y-координаты курсора на странице (не относительно экрана)
- $. scrollTop()... обеспечивает смещение от верхней части страницы (когда полоса прокрутки полностью вверх, она равна 0)
- $. height()... обеспечивает высоту видимой области в пользовательском браузере/окне просмотра
- body.offsetHeight... высота всей страницы
Как я могу достичь этого и какое событие лучше всего подходит для этого (в настоящее время оно находится в наведении курсора мыши)? Мои идеи:
- используйте a if/else, чтобы проверить, находится ли он в верхнем регистре или внизу, прокрутите вверх, если e.pageY показывает, что он находится сверху, вниз, если e.page & находится внизу, а затем вызывает событие $('li'). mouseover(), чтобы выполнить итерацию...
- Используйте цикл do while... это работает умеренно хорошо на самом деле, но его трудно остановить от прокрутки до далекой. Но я не уверен, как контролировать итерации....
Моя последняя попытка:
('li').mouseover(function(e) {
totalHeight = document.body.offsetHeight;
cursor.y = e.pageY;
var papaWindow = window;
var $pxFromTop = $(papaWindow).scrollTop();
var $userScreenHeight = $(papaWindow).height();
var iterate = 0;
do {
papaWindow.scrollBy(0, 2);
iterate++;
console.log(cursor.y, $pxFromTop, $userScreenHeight);
}
while (iterate < 20);
});
Ответы
Ответ 1
Хорошо работает теперь, пользователю просто нужно "поддразнивать" мышь, иногда перетаскивая элементы, чтобы продолжать прокрутку, но для прокрутки только с позицией мыши ее довольно солидно. Вот что я, наконец, использовал:
$("li").mouseover(function(e) {
e = e || window.event; var cursor = { y: 0 }; cursor.y = e.pageY; //Cursor YPos
var papaWindow = parent.window;
var $pxFromTop = $(papaWindow).scrollTop();
var $userScreenHeight = $(papaWindow).height();
if (cursor.y > (($userScreenHeight + $pxFromTop) / 1.25)) {
if ($pxFromTop < ($userScreenHeight * 3.2)) {
papaWindow.scrollBy(0, ($userScreenHeight / 30));
}
}
else if (cursor.y < (($userScreenHeight + $pxFromTop) * .75)) {
papaWindow.scrollBy(0, -($userScreenHeight / 30));
}
}); //End mouseover()
Ответ 2
Это не будет работать, поскольку событие срабатывает только тогда, когда вы находитесь над литом.
('li').mouseover(function(e) { });
Вам нужно указать положение мыши относительно окна просмотра, когда элемент перетаскивается. Когда пользователи начинают перетаскивать элемент, присоединяют событие "mousemove" к телу, а затем проверяют положение мыши и прокручиваем при необходимости.
$("body").on("mousemove", function(event) {
// Check mouse position - scroll if near bottom or top
});
Не забудьте удалить свое событие, когда пользователь перестает перетаскивать.
$("body").off("mousemove", function(event) {
// Check mouse position - scroll if near bottom or top
});
Ответ 3
Я получаю еженедельный информационный бюллетень (адрес электронной почты) от CodeProject, и у него есть некоторые вещи, которые, безусловно, похожи на то, что он решит мою проблему... надеюсь, это может помочь другим:
-
http://johnpolacek.github.com/scrollorama/ - JQuery основан и анимирует прокрутку
-
https://github.com/IanLunn/jQuery-Parallax - на основе JQuery, аналогично выше
-
http://remysharp. com/2009/01/26/element-in-view-event-plugin/- JQuery, определяет, является ли элемент в настоящее время пользователем (очень полезно для этой проблемы!)
-
Также на сайте в # 2 был интересный код:
var windowHeight = $window.height();
var navHeight = $('#nav').height() / 2;
var windowCenter = (windowHeight / 2);
var newtop = windowCenter - navHeight;
//ToDo: Find a way to use these vars and my original ones to determine scroll regions
Ответ 4
Это может быть не совсем то, что вы хотите, но это может помочь. Он будет автоматически прокручиваться, когда мышь находится над "границей экрана" (пользовательская область). Скажем, у вас есть ширина шириной 40 пикселей в правой части экрана, если мышь достигает первого 1px, она начнет прокрутку. Каждый пиксель, который вы перемещаете в него, будет увеличиваться. Он даже имеет приятную анимацию.
http://www.smoothdivscroll.com/v1-2.htm