找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

200

主题

9897

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15523

讲师达人悬赏达人微信认证勋章SpreadJS 认证SpreadJS 高级认证元老葡萄

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-28 14:08  /   查看:926  /  回复:0
本帖最后由 Clark.Pan 于 2023-2-28 14:57 编辑

SpreadJS中命中测试的功能(hitTest)可以根据 x,y 坐标获取该坐标位置的内容归属(属于表格的区域,行列索引等)。
常被用于获取鼠标点击位置的信息,例如想要获取当前点击位置单元格,对该单元格进行操作。甚至于拖拽内容至指定单元格中这样的需求实现。

方法调用如下:
  1. spread.hitTest(x, y)
复制代码

其中, x与y是传入的坐标,返回一个对象,对象中包含了坐标归属单元格的行/列坐标,类型,所在区域等信息。

image.png502885131.png

但有一点需要注意,这里的 x , y 坐标是相对于SpreadJS的位置坐标,而不是相对于整个网页的位置坐标。
举个例子:x:0,y:0 这个点的位置是SpreadJS表格的左上角,而不是整个网页的左上角。


在实际情况中,SpreadJS容器的位置也并非每次都会从左上角开始排列。经常上方会被系统导航之类的内容占据。这个时候如果通过下面的代码获取x,y坐标就会有问题
  1. let x = e.pageX
  2. let y = e.pageY
复制代码
上述代码获取的x,y是相对于整个屏幕的x,y 坐标,这个时候需要减去offsetLeft、offsetTop获取的是固定定位。offsetLeft、offsetTop表示
相对于监听选择器的偏移量,这里可以用spread.getHost()方法获取SpreadJS的dom容器然后再获取其offsetLeft,offsetTop去相减,如下图代码所示:
  1. let x = e.pageX - spread.getHost().offsetLeft;
  2. let y = e.pageY - spread.getHost().offsetTop;
复制代码


0 个回复

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