Я пытаюсь имитировать файл, выбрав из проводника Windows в Javascript. Я заметил, что Windows Explorer имеет два типа «выбора». Один из них - это обычный выбор, который выделяет файл, а другой - пунктирная линия, что означает, что в настоящее время этот файл сосредоточен. Поэтому я использую «selected» и «focus» как классы css.Алгоритм для 'Shift + Clicking' элементов в коллекции для их выбора
Here вы можете найти пример моего кода, работающего на веб-странице.
В моем коде он просто находит строки между фокусным элементом и текущим элементом и выбирает их.
select: function (e) {
if (e.ctrlKey) {
rs.removeFocus();
$(this).toggleClass("selected");
$(this).addClass("focus");
}
else if (e.shiftKey) {
var focusItem = $("#Items p.focus");
var currentItem = $(this);
var betweenItems = rs.betweenItems(currentItem, focusItem);
rs.unSelectAll();
rs.removefocus();
$(betweenItems).each(function() {
this.addClass("selected");
});
focusItem.addClass("selected");
$(this).addClass("focus");
$(this).addClass("selected");
}
else {
rs.unSelectAll();
rs.removeFocus();
$(this).addClass("selected");
$(this).addClass("focus");
}
}
Это работает «хорошо», но это не так точно, как Windows Explorer. В проводнике Windows они не всегда выбирают строки между последним сосредоточенным элементом и текущим. Если в выборе нет «пробелов», они будут добавлять эти элементы к выбору. Но если есть пробел, он начнется с фокуса.
Я не уверен, как я должен это делать. Кажется, что алгоритм, который они используют в Windows, немного сложный для меня. Поэтому, если кто-нибудь может мне помочь или подтолкнуть меня в правильном направлении, я был бы признателен.
Способ много кода.И вы не должны задавать такой вопрос, поскольку вы на самом деле просите других сделать вашу работу. Возможно, вы должны пересмотреть это как вопрос алгоритма? –
Я считаю, что поле «пунктирная линия» в Windows более точно означает фокусировку, но не выбранную. Вы можете удерживать клавишу управления и использовать стрелки, чтобы изменить, какой элемент имеет фокус, и использовать пробел для выбора. –
@Sean Kinsey: Спасибо за вход, я скорректировал свой вопрос и сделал его меньше. @JC: Спасибо, я изменил «последний» на «фокус», что лучше для него. – Pickels