本帖最后由 Wilson.Zhang 于 2024-9-2 14:48 编辑
在工作表Worksheet中选中某单元格区域,当光标操作活跃在工作表中时,选中新单元格区域将释放旧单元格区域,江山易主,新旧代替,诚然如此。当光标移出Worksheet范围后,鼠标点击Worksheet范围外的控件或执行其他操作,原本被选中的单元格区域依然还是被选中的状态。这是符合常理的设计和现象,就好像关闭游戏前要保存的副本中将会记录当时的所有环境信息和角色状态等信息。然而,也有另一种声音认为光标移出Worksheet区域外便要同步将选中区域释放。这种需求合理吗?在有理有据的情况下,可能是合理的。比如,关闭游戏后,包括环境信息和角色状态信息等画面均不可见了,而光标移出Worksheet范围后页面内容仍在显示,这就可能给正在操作的用户产生歧义。正如一个人不可能踏入同一条河流两次一般,这种声音也不希望一个动作同时作用在两个目标对象上,那就释放前者,占有后者吧!如何释放前者呢?令SpreadJS程序内部关于选中区域的信息清零即可,即 - Worksheet:setSelection(null);
复制代码图1. 复制选中区域 当仅选中区域而不针对区域有其他动作时,清掉选中区域即可。然而,一般情况下,选中区域后可能会对该区域设置统一样式、边框或复制该区域,如图1所示。以复制选中区域为例,除了会使用默认的有透明度的灰黑色填充所选单元格区域的背景色外,区域的外边界会暂时披上虚线围成的所谓蚂蚁线,如图2所示。此时,除了清掉选中区域外,还需要消除蚂蚁线。蚂蚁线围绕在区域外边界,像特殊的边框样式,那就尝试将其当作边框样式处理,即清除区域上的样式, - Worksheet:clear(GC.Spread.Sheets.StorageType.style);
复制代码之后,便发现蚂蚁线被拆除掉了。 图2. 复制区域的外边界蚂蚁线 请参考附件Demo,结合如下动图了解详情:
额......然而,SpreadJS原生有更好的支持:
1. 在工作表中选中单元格后光标退出工作表区域,这一动作现象有一个专属名词--失焦,当SpreadJS组件失焦时,通过IWorkbookOptions:hideSelection即可控制被选中区域是否还需要高亮显示。
2. 对于选中的复制区域,可通过cancelInput命令取消。
抛砖引了块璞玉,前面提到的方法当然也可以满足需要,但是产品迭代更新的过程中可能会对相关接口进行更新,就不确保未来版本是否还允许如此曲线救国了,原生支持的功能更安全可靠。
|