我试图模仿使用Javascript从Windows资源管理器中选择的文件。我注意到Windows资源管理器有两种类型的“选择”。一个是正常选择,突出显示该文件,另一个是虚线,表示该文件当前处于焦点状态。因此,我将“ selected”和“ focus”用作css类。
在这里,您可以找到我的代码在网页上工作的示例。
在我的代码中,它只是找到焦点项目和当前项目之间的行,然后选择它们。
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");
}
}
Run Code Online (Sandbox Code Playgroud)
这可以“正常”运行,但与Windows资源管理器所选择的功能并不完全一样。在Windows资源管理器中,它们并不总是选择上一个焦点项目与当前焦点项目之间的行。如果选择中没有“空白”,他们会将这些项目添加到选择中。但是,如果存在差距,它将从关注的项目开始。
我不确定该怎么做。看来他们在Windows中使用的算法对我来说有点复杂。因此,如果有人可以帮助我或将我推向正确的方向,我将不胜感激。
Windows的Shift-click算法(至少是Windows 7,这是我正在运行的算法)是:跟踪上一次没有通过Shift-Click 选定的项目。按住Shift键单击时,选择该项目和当前单击之间的所有项目。
例子:
1)如果仅选择了项目5,然后按住Shift键并单击8,它将选择5-8。
2)如果选择了项目5,则按住Ctrl键单击3,然后按住Shift键单击8,然后将其选择3-8。但是,如果选择了项目3,则按住Ctrl键单击5,然后按住Shift键单击8,它将改为选择5-8。因此历史很重要。
3)如果选择了项目5,然后按住Shift并单击8,它将选择5-8;否则,请选择5-8。如果在按住Shift的同时单击3,它将取消选择5-8并选择3-5。即使最后选择的项目是8,它还是使用5作为锚点,因为这是最后一次未被按住shift键选择的项目。因此,使用Shift键单击选择的项目将从历史记录中排除。
这意味着要模拟Windows的Shift-click,您不仅要知道选择了什么,还需要知道如何选择它。
Mac OS在两个方面与Windows有所不同。首先,如果在当前选定项的范围之外按住Shift键并单击,它将始终展开。例如,如果您选择了项目5,然后按住Shift键并单击8,它将选择5-8。如果然后按住Shift键并单击3,它将选择范围扩展到3-8,而不是取消选择5-8,然后像Windows一样选择3-5。其次,如果您在当前选择的范围内单击,它将从最上面的选定项目填充到您单击的项目。如果您选择了第3项和第8项,并按住Shift键并单击5,则无论您最近单击3还是8,它都将选择3-5。因此,要模拟Mac OS,您无需跟踪历史记录。
| 归档时间: |
|
| 查看次数: |
1258 次 |
| 最近记录: |