找回密码
 立即注册

QQ登录

只需一步,快速开始

ymslx_sjs

初级会员

49

主题

122

帖子

413

积分

初级会员

积分
413
ymslx_sjs
初级会员   /  发表于:2022-9-1 22:12  /   查看:1181  /  回复:9
1金币
在sheet有一个形状和一个图形,sheer上绑定下面两个事件

activeSheet.bind(GC.Spread.Sheets.Events.FloatingObjectSelectionChanged, function(event, args) {
    let floatingObject = args.floatingObject;
    if (floatingObject && floatingObject instanceof GC.Spread.Sheets.Charts.Chart) {
        console.log("chart");
    }
});

activeSheet.bind(GC.Spread.Sheets.Events.ShapeSelectionChanged, function(sender, args) {
    console.log("Shape");
});

当焦点第一次定位在图形上时,有触发事件FloatingObjectSelectionChanged,当焦点从图形上切换到形状上时,也有触发事件ShapeSelectionChanged,
而当焦点从形状上切换到图形时,没有触发FloatingObjectSelectionChanged





最佳答案

查看完整内容

可以参考这个代码

9 个回复

倒序浏览
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-9-1 22:12:05
来自 9#
本帖最后由 Ellia.Duan 于 2022-9-2 18:38 编辑
Ellia.Duan 发表于 2022-9-2 14:44
明白您的需求了,这边尽会尽快给您答复。
image.png936765441.png image.png396205138.png image.png972113952.png image.png447475585.png
可以参考这个代码
  1.    let chartClickNum = 0;
  2.             sheet.bind(GC.Spread.Sheets.Events.FloatingObjectSelectionChanged, function (event, args) {
  3.                 let floatingObject = args.floatingObject;
  4.                 if (floatingObject && floatingObject instanceof GC.Spread.Sheets.Charts.Chart ) {
  5.                     if( chartClickNum ==0){
  6.                         console.log('焦点在chart上')
  7.                         chartClickNum ++
  8.                     }else{
  9.                         console.log('离开了chart')
  10.                         chartClickNum--;
  11.                     }
  12.                 }
  13.             });

  14.             let shapeClickNum = 0;
  15.             sheet.bind(GC.Spread.Sheets.Events.ShapeSelectionChanged, function (e, info) {
  16.                 if(shapeClickNum==0){
  17.                     shapeClickNum++
  18.                     console.log('离开了chart,焦点在shape上')
  19.                 }else{
  20.                     shapeClickNum--;
  21.                 }
  22.             });

  23.             sheet.bind(GC.Spread.Sheets.Events.CellClick, function(sender, args) {
  24.                 // 焦点没有在chart时,清空参数chartData
  25.                 console.log('离开了chart,焦点在单元格上')
  26.             });
复制代码
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-9-2 12:30:50
2#
您好,
经测试v14.0.0未能复现您的问题,请参考附件demo实际测试下,如有补充信息请在demo基础上添加。 image.png82993163.png


demo-sjs模板.html

3.48 KB, 下载次数: 42

回复 使用道具 举报
ymslx_sjs
初级会员   /  发表于:2022-9-2 13:14:36
3#
Lynn.Dou 发表于 2022-9-2 12:30
您好,
经测试v14.0.0未能复现您的问题,请参考附件demo实际测试下,如有补充信息请在demo基础上添加。

...

从shape切换到chart时,除了调用的chart的方法,也触发了一遍shape的方法,可以不触发?
回复 使用道具 举报
ymslx_sjs
初级会员   /  发表于:2022-9-2 13:18:09
4#
Lynn.Dou 发表于 2022-9-2 12:30
您好,
经测试v14.0.0未能复现您的问题,请参考附件demo实际测试下,如有补充信息请在demo基础上添加。

...

或者说,怎么区分,焦点在chart时触发了方法,焦点离开chart 不触发同一个方法?
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-9-2 13:55:07
5#
本帖最后由 Ellia.Duan 于 2022-9-2 13:56 编辑
ymslx_sjs 发表于 2022-9-2 13:14
从shape切换到chart时,除了调用的chart的方法,也触发了一遍shape的方法,可以不触发?

单独点击chart时,只触发了FloatingObjectSelectionChanged事件;当点击了形状后,触发了ShapeSelectionChanged与FloatingObjectSelectionChanged事件。当再次点击chart,由于此时焦点不在shape上,同样还是触发了ShapeSelectionChanged与FloatingObjectSelectionChanged事件。
就是说点击shape会触发ShapeSelectionChanged事件,离开shape也触发了一次ShapeSelectionChanged事件。这个逻辑时没有什么问题的。
请问 您的需求是:点击chart触发一个事件,离开chart触发另一个事件。和shape没有关系是吗? 具体来说,是什么样子业务场景需要chart触发焦点和离开焦点用到不同事件呢?



回复 使用道具 举报
ymslx_sjs
初级会员   /  发表于:2022-9-2 14:26:45
6#
Ellia.Duan 发表于 2022-9-2 13:55
单独点击chart时,只触发了FloatingObjectSelectionChanged事件;当点击了形状后,触发了ShapeSelectionC ...

有抽取chart数据的逻辑,是写在焦点在chart上的,现在就是如果焦点从shape的chart进行切换时,对应的逻辑就不对

activeSheet.bind(GC.Spread.Sheets.Events.FloatingObjectSelectionChanged, function(event, args) {
    let floatingObject = args.floatingObject;
    if (floatingObject && floatingObject instanceof GC.Spread.Sheets.Charts.Chart) {
        // 焦点在chart时
        // 实现选中的图片置顶
        // 抽取图片的数据并设置在某个chartData参数里
    }
});

activeSheet.bind(GC.Spread.Sheets.Events.CellClick, function(sender, args) {
    // 焦点没有在chart时,清空参数chartData
});

activeSheet.bind(GC.Spread.Sheets.Events.ShapeSelectionChanged, function(sender, args) {
    // 焦点没有在chart时,清空参数chartData
});
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-9-2 14:44:45
7#
ymslx_sjs 发表于 2022-9-2 14:26
有抽取chart数据的逻辑,是写在焦点在chart上的,现在就是如果焦点从shape的chart进行切换时,对应的逻辑 ...

明白您的需求了,这边尽会尽快给您答复。
回复 使用道具 举报
ymslx_sjs
初级会员   /  发表于:2022-9-2 16:07:26
8#
Ellia.Duan 发表于 2022-9-2 14:44
明白您的需求了,这边尽会尽快给您答复。

应该是事件的触发顺序,没错都是先出发chart的事件,是因为我先绑定了chart的事件?单元格的触发事件,好像是只触发了一次?那chart和shape有没有click的事件?
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-9-6 09:34:56
10#
那本贴就先结贴了,有问题欢迎另开新帖交流。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部