找回密码
 立即注册

QQ登录

只需一步,快速开始

缪小花

注册会员

1

主题

3

帖子

12

积分

注册会员

积分
12
  • 52

    金币

  • 1

    主题

  • 3

    帖子

最新发帖
缪小花
注册会员   /  发表于:2024-9-16 15:39  /   查看:540  /  回复:5
1金币
本帖最后由 缪小花 于 2024-9-16 15:47 编辑

如题,我尝试使用Spreadjs进行协同编辑开发,为实现类似腾讯文档、金山文档,用高亮框+头像展示其他协作人选区,大致效果如下:

Screen Shot 2024-09-16 at 3.30.14 PM.png
当前采用边框(选区)+单元格装饰(头像)方式做的,大致代码如下:

  1. const style = new GC.Spread.Sheets.Style();
  2. const upperLeft = activeSheet.getCell(r.row<0?0:r.row, r.col<0?0:r.col)
  3. style.decoration = {
  4.     icons: [{
  5.         src: awarenessObj.user.avatar,
  6.         width: 16,
  7.         height: 16,
  8.         position: r.col<0?GC.Spread.Sheets.IconPosition.left:GC.Spread.Sheets.IconPosition.outsideLeft,}]
  9.         }
  10. upperLeft.setStyle(style)
  11. let range = activeSheet.getRange(r.row, r.col, r.rowCount, r.colCount);
  12. const color = getRandomColor()
  13. let lineBorder = new GC.Spread.Sheets.LineBorder(color, GC.Spread.Sheets.LineStyle.thick);
  14. range.setBorder(lineBorder, { outline: true });
复制代码

但目前存在以下问题:
1、会与表格原生样式产生冲突——会覆盖用户设置的边框,或被用户设置的边框覆盖
2、保存时选区和装饰数据也会被当做表格本身保存下来

我还尝试了使用FloatingObject实现绘制,但是会遮盖单元格,不能实现业务目标

想请教各位,是否有非侵入式(不影响表格本身数据和样式)的方式来实现这种只用于展示的高亮效果

谢谢!

最佳答案

查看完整内容

您好,请参考这篇demo: https://jscodemine.grapecity.com/share/mpNp1KNJm0qbm0HYvAE1fA/

5 个回复

倒序浏览
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-9-16 15:39:32
来自 2#
回复 使用道具 举报
缪小花
注册会员   /  发表于:2024-9-18 13:20:02
3#
Ellia.Duan 发表于 2024-9-18 09:27
您好,请参考这篇demo:
https://jscodemine.grapecity.com/share/mpNp1KNJm0qbm0HYvAE1fA/

收到,谢谢版主,就是这个功能!
Demo似乎还缺少表格缩放随动和清除选区功能,后者我自己改造一下,前者是否可以给个思路,谢谢!
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-9-18 13:34:36
4#
本帖最后由 Ellia.Duan 于 2024-9-18 13:35 编辑

您好,可以监听viewzoomed事件。如果要清除选择区域,可以使用clearSelection方法

回复 使用道具 举报
缪小花
注册会员   /  发表于:2024-9-18 13:55:27
5#
Ellia.Duan 发表于 2024-9-18 13:34
您好,可以监听viewzoomed事件。如果要清除选择区域,可以使用clearSelection方法

问题已解决,谢谢大佬
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-9-18 16:21:53
6#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部