Lynn.Dou 发表于 2022-4-29 16:36:02

限制浮动对象在单元格区域内拖动

背景:
客户希望将自定义浮动对象限制在某一单元格区域内拖动,请问如何实现呢?

思路:
监听FloatingObjectChanged事件,当拖动位置超过单元格区域时,强制拖回区域边缘位置。

过程:
实现代码如下
// 设置浮动元素
            var customFloatingObject = new GC.Spread.Sheets.FloatingObjects.FloatingObject('f1');
            customFloatingObject.startRow(1);
            customFloatingObject.startColumn(1);
            customFloatingObject.endColumn(6);
            customFloatingObject.endRow(6);
            var div = document.createElement('div');
            div.innerHTML = "<span>SpreadJS supports FloatingObject.</span><div style='border: 1px dotted red; width: 80%; margin:auto;'><ul><li>I am list one.</li><li>I am list two.</li><li>I am list three.</li></ul></div>";
            div.style.background = 'gray';
            customFloatingObject.content(div);
            sheet.floatingObjects.add(customFloatingObject);

            // 设置区域背景色
            sheet.getRange(0, 0, 10+5, 10+5, GC.Spread.Sheets.SheetArea.viewport).backColor("yellow");
            
            sheet.bind(GC.Spread.Sheets.Events.FloatingObjectChanged, function (e, info) {
                console.log(sheet.floatingObjects.all().x());
                console.log(sheet.floatingObjects.all().y());
                var x = sheet.floatingObjects.all().x();
                var y = sheet.floatingObjects.all().y();
                var rangeX = sheet.getColumnWidth(0)*10;
                var rangeY = sheet.getRowHeight(0)*10;
                // 限制单元格区域为10行、10列
                if(x > rangeX) {
                        sheet.floatingObjects.all().x(rangeX);
                } else if(y > rangeY ) {
                        sheet.floatingObjects.all().y(rangeY);
                }
            });实现效果如下动图所示:

完整demo请参考附件。
页: [1]
查看完整版本: 限制浮动对象在单元格区域内拖动