Сделать перетаскиваемые элементы HTML5 прокручивать страницу?
Я использую атрибут HTML5 draggable = "true"
на некоторых моих div на моей веб-странице. Я хочу, чтобы при перетаскивании одного из этих элементов в нижнюю часть страницы он прокручивает страницу вниз, а когда вы перетаскиваете ее вверх, она прокручивает страницу вверх.
В конечном итоге я создам плейлист на боковой панели, и поскольку он не всегда будет отображаться в зависимости от того, где вы смотрите на странице, страница должна прокручиваться при перетаскивании.
Моя страница здесь, и вы можете попробовать перетащить фотографии сообщений вокруг. В Chrome он автоматически позволяет прокручивать вниз, когда я перетаскиваю его в нижнюю часть, но не вверх. В Firefox он автоматически не позволяет мне прокручивать в любом направлении. Любая помощь?
Вот вам простой jsfiddle, чтобы вы начали. В Chrome вы сможете перетащить значок Google вниз и прокрутить страницу вниз, но не подниматься.
Ответы
Ответ 1
Вот код, который будет прокручивать или прокручивать страницу, пока вы что-то перетаскиваете. Просто поместите объект перетаскивания вверху или внизу страницы.:)
var stop = true;
$(".draggable").on("drag", function (e) {
stop = true;
if (e.originalEvent.clientY < 150) {
stop = false;
scroll(-1)
}
if (e.originalEvent.clientY > ($(window).height() - 150)) {
stop = false;
scroll(1)
}
});
$(".draggable").on("dragend", function (e) {
stop = true;
});
var scroll = function (step) {
var scrollY = $(window).scrollTop();
$(window).scrollTop(scrollY + step);
if (!stop) {
setTimeout(function () { scroll(step) }, 20);
}
}
Ответ 2
Я создал простой класс перетаскивания JavaScript. Он может автоматически прокручивать страницу вверх или вниз во время перетаскивания.
Смотрите jsfiddle. Также доступна на странице github.
Перетаскивание с высокой скоростью не рекомендуется сейчас. Мне нужно это выяснить.
Код ниже является частью библиотеки.
var autoscroll = function (offset, poffset, parentNode) {
var xb = 0;
var yb = 0;
if (poffset.isBody == true) {
var scrollLeft = poffset.scrollLeft;
var scrollTop = poffset.scrollTop;
var scrollbarwidth = (document.documentElement.clientWidth - document.body.offsetWidth); //All
var scrollspeed = (offset.right + xb) - (poffset.right + scrollbarwidth);
if (scrollspeed > 0) {
this.scrollLeft(parentNode, scrollLeft + scrollspeed);
}
scrollspeed = offset.left - (xb);
if (scrollspeed < 0) {
this.scrollLeft(parentNode, scrollLeft + scrollspeed);
}
scrollspeed = (offset.bottom + yb) - (poffset.bottom);
if (scrollspeed > 0) {
this.scrollTop(parentNode, scrollTop + scrollspeed);
}
scrollspeed = offset.top - (yb);
if (scrollspeed < 0) {
this.scrollTop(parentNode, scrollTop + scrollspeed);
}
} else {
var scrollLeft = offset.scrollLeft;
var scrollTop = offset.scrollTop;
var scrollbarwidth = parentNode.offsetWidth - parentNode.clientWidth; //17
var scrollbarheight = parentNode.offsetHeight - parentNode.clientHeight; //17
var scrollspeed = (offset.right + xb) - (poffset.right - scrollbarwidth);
if (scrollspeed > 0) {
this.scrollLeft(parentNode, scrollLeft + scrollspeed);
}
scrollspeed = offset.left - (xb + poffset.left);
if (scrollspeed < 0) {
this.scrollLeft(parentNode, scrollLeft + scrollspeed);
}
scrollspeed = (offset.bottom + scrollbarheight + yb) - (poffset.bottom);
if (scrollspeed > 0) {
this.scrollTop(parentNode, scrollTop + scrollspeed);
}
scrollspeed = offset.top - (yb + poffset.top);
if (scrollspeed < 0) {
this.scrollTop(parentNode, scrollTop + scrollspeed);
}
}
};
Ответ 3
Если вы хотите использовать dragable, вы должны знать, что теперь это функция HTML 5, ее jQuery, поэтому проверьте здесь http://jqueryui.com/draggable/..
Используется как
$( "#draggable" ).draggable();
http://jsfiddle.net/dFPVr/7/