找回密码
 立即注册

QQ登录

只需一步,快速开始

Wilson.Zhang
超级版主   /  发表于:2024-10-31 17:43  /   查看:106  /  回复:0
当光标点击单元格令单元格为输入或编辑状态时,在不移动光标的情况下,Microsoft Excel对鼠标滚动同时滚动Sheet页面,而SpreadJS不滚动Sheet页面。经过调研,确认这是SpreadJS和Microsoft Excel的一个设计区别。在对文本内容较长的单元格进行再编辑时,SpreadJS的设计使得滚动鼠标将同步滚动单元格中的文本内容,即滚动对象为单元格中的内容,这一点确实有其存在之合理性。那么,如果某些只对Microsoft Excel有使用经验的用户可能想要在SpreadJS中保留针对该功能的Excel操作习惯,是否能够满足用户的需要呢?依然需要分析下先,之后自然可以得到结论。

鼠标双击单元格令单元格切换为输入状态,在此基础上再次单击单元格,即为编辑状态。当单元格处于输入状态或编辑状态时,焦点在活动单元格上。既然焦点在活动单元格上,由于单元格是Workbook实例的一部分,那么,焦点也在Workbook实例上。由于只能通过Workbook获取或失去焦点,所以,可以针对Workbook失焦再聚焦来切换鼠标滚动能够作用的内容。具体思路如下:

1. 对window监听mousewheel事件,以监听鼠标滚动事件。
2. 当mousewheel事件被触发时,判断当前Worksheet是否为编辑状态。
3. 如果当前Worksheet为编辑状态,则先令Workbook实例失焦,即退出编辑,然后再令其获取焦点,以结合鼠标滚动同步滚动页面。

上述代码对应的代码如下所示,其运行效果如图1所示。附上demo,以供参考。

  1. window.addEventListener('mousewheel', function(event) {
  2.     if (spread.getActiveSheet().isEditing()) {
  3.         console.log('鼠标滚动:', event.wheelDelta);
  4.         //  令spread实例失焦
  5.         spread.focus(false);
  6.         //  令spread实例聚焦,以同步鼠标滚动
  7.         spread.focus(true);
  8.     }
  9. });
复制代码


鼠标滚动页面.gif

图1. 鼠标滚动页面


问题原帖:https://gcdn.grapecity.com.cn/showtopic-228004-1-1.html

编辑状态时鼠标滚动页面.html

4.51 KB, 下载次数: 7

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部