我正在尝试创建一个元素,用户可以将它们的鼠标放在缓慢向下滚动页面的同时拖动元素。这是支持我的Drag-& -Drop编辑器所必需的。DragOver和DragLeave AngularJS
我正在检测用户是否悬停在锚上并正在拖动,如果是这样,我开始$interval
,在那里启动慢滚动。如果鼠标离开锚点,或者用户停止拖动,应该取消慢速滚动,但事实并非如此。以下是我的代码。
elem.on('dragover', mouseOver);
elem.on('dragleave', mouseLeave);
elem.on('dragend', mouseLeave);
var scroller = null;
function mouseOver(ev) {
ev.preventDefault();
console.log('over');
scroller = $interval(function() {
if (!scrolledToBottom()) {
$(window).scrollTop($(window).scrollTop() + 1);
}
}, 10);
}
function mouseLeave(ev) {
ev.preventDefault();
console.log('left');
$interval.cancel(scroller);
scroller = null;
}
function scrolledToBottom() {
return ($(window).scrollTop() + $(window).height()) ==
$(document).height();
}
尽管console.log
的火很好,滚动程序从不停止滚动。我认为这是因为Angular在触发事件时看不到内部事件,并且无法将更改应用于滚动器。但是,Angular没有ngDragOver
,我只能想到JQuery实现。
有什么建议吗?
为什么你甚至需要定制滚动?如果您将元素拖出视口,则窗口滚动将自动发生。 – Gaurav
对熟悉电脑的人来说,这是一个明智的回应,但恐怕我的用户不会。如果站点有固定的顶栏菜单,这也不适用于滚动备份。 – FvB
好的,这是有道理的,但你应该记住要照顾任何其他可访问性问题,你会介绍(如果有的话)。无论如何,看看我发布的答案。 – Gaurav