Вдохновляясь @gaynorvader и ответ, расположенного here, я появилось следующее решение, которое выглядит следующим образом:
с HTML, как этот (в приведенном ниже коде ASP.NET панель и просмотр дерева разметки отображается в виде реального HTML элементов в браузере):
<div id="container" style="border:1px solid;">
<div id="top" style="background-color:red;height:20px;opacity:0.4;filter:alpha(opacity=40);"></div>
<asp:Panel ID="panel"
Style="overflow:auto;"
runat="server"
Width="100%" Height="100px">
<cc1:ASTreeView ID="treeView1"
OnNodeDragAndDropStartScript="startDrag()"
OnNodeDragAndDropCompletedScript="completedDragHandler()" ... />
</asp:Panel>
<div id="bottom" style="background-color:red;height:20px;opacity:0.4;filter:alpha(opacity=40);"></div>
</div>
Что я сделал здесь созданы два DIV элемента в верхнем и нижнем краях панели, которая содержит TreeView (со всеми тремя элементами, содержащимися в div контейнера). Цель двух элементов div состоит в том, что они могут инициировать прокрутку, когда курсор мыши входит в них при перетаскивании.
Затем в HTML для TreeView, я связан две функции JavaScript с начальным сопротивлением событием TreeView в (OnNodeDragAndDropStartScript
), и этом сопротивлении завершено событие (OnNodeDragAndDropCompletedScript
):
function startDrag()
{
$("#top").hover(function() {
$("#MainContent_panel").animate({ scrollTop: 0 }, "slow");
});
$("#bottom").hover(function() {
$("#MainContent_panel").animate({ scrollTop: $(window).scrollTop() + $(window).height() }, "slow");
});
}
function completedDragHandler()
{
$("#top").off();
$("#bottom").off();
}
В обработчик события начала перетаскивания function (startDrag
), я использовал JQuery для добавления функции обработчика событий в событие «Hover». Эта функция вызывается всякий раз, когда курсор мыши входит в элемент div.
Чтобы инициировать прокрутку, API-панель JQuery animate
вызывается на панели, содержащей TreeView, с аргументами, чтобы прокручивать ее вверх медленно.
В JQuery нет аргументов для прокрутки вниз, и поэтому, беря вдохновение из ответа here, я смог реализовать нисходящий свиток.
Кроме того, я использовал функцию JQuery off()
для удаления обработчиков событий после завершения события перетаскивания (OnNodeDragAndDropCompletedScript
).
Можете ли вы поднять часть своего кода? Вы используете jQuery-UI 'sortable'? – gaynorvader
Нет, JQuery UI Sortable API работает только со списками, где я работаю с элементом управления TreeView. Я использую ASTreeView, у которого есть своя реструктуризация перетаскивания. Я добавлю код (извинения за пренебрежение делать это в первый раз) –
Возможный (похожий) дубликат: http://stackoverflow.com/questions/6677035/jquery-scroll-to-element Вы можете настроить обработчик так что пока мышь не работает, он перебирает этот скрипт, создавая прокрутку div так, чтобы элемент всегда был виден. –