web*_*lse 14 javascript jquery scroll draggable viewport
很简单,我只想这样,当用户拖动一个项目并且它们到达视口的最底部或顶部(10px左右)时,页面(大约3000px长)轻轻向下或向上滚动,直到它们移动他们的光标(以及被拖动的项目)离开该区域.
项是一个li标签,它使用jquery使列表项可拖动.再具体一点:
我目前使用window.scrollBy(x = 0,y = 3)滚动页面并具有以下变量:
我怎样才能实现这一目标以及最适合这种情况的事件(目前在鼠标悬停中)?我的想法:
我的最新尝试:
('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);
});
Run Code Online (Sandbox Code Playgroud)
现在工作得很好,用户有时只需要在拖动项目时“摇动”鼠标即可保持滚动,但对于仅使用鼠标位置滚动来说,它非常稳定。这是我最终使用的:
$("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()
Run Code Online (Sandbox Code Playgroud)