Reactjs 选择+;按住并拖动形状应水平或垂直滚动

Reactjs 选择+;按住并拖动形状应水平或垂直滚动,reactjs,react-hooks,react-konva,konva,Reactjs,React Hooks,React Konva,Konva,我想要一个形状,即Rectselect(使用鼠标左键按住并拖动)如果转到右侧,则应水平滚动,如果转到底部,则应在React Konva中垂直滚动 如果有人使用过trello,我将尝试模拟使用鼠标而不是滚动条水平拖动的能力 这是我增加舞台的宽度和高度的地方。同时将其拖动到右侧。它应该滚动,最后可以放置。如果有人知道如何实现它,请回答。有很多方法。如果要在节点靠近边缘时滚动(或仅移动)舞台,可以执行以下操作: const[stagePos,setStagePos]=React.useState({x

我想要一个形状,即
Rect
select(使用鼠标左键按住并拖动)如果转到右侧,则应水平滚动,如果转到底部,则应在React Konva中垂直滚动

如果有人使用过trello,我将尝试模拟使用鼠标而不是滚动条水平拖动的能力


这是我增加
舞台的宽度和高度的地方。同时将其拖动到右侧。它应该滚动,最后可以放置。如果有人知道如何实现它,请回答。

有很多方法。如果要在节点靠近边缘时滚动(或仅移动)舞台,可以执行以下操作:

const[stagePos,setStagePos]=React.useState({x:0,y:0});
常量saveStagePosition=(阶段)=>{
设置标记(stage.position());
};
常数handledrampove=(e)=>{
常量absPos=e.target.absolutePosition();
const stage=e.target.getStage();
如果(absPos.x<触发器\u填充){
舞台({
x:stage.x()+触发器_填充,
onFinish:()=>saveStagePosition(阶段)
});
}
if(绝对位置y<触发器填充){
舞台({
y:stage.y()+触发器_填充,
onFinish:()=>saveStagePosition(阶段)
});
}
if(absPos.x>stage.width()-触发器\u填充){
舞台({
x:stage.x()-触发器填充,
onFinish:()=>saveStagePosition(阶段)
});
}
如果(absPos.y>stage.height()-触发器填充){
舞台({
x:stage.y(),
onFinish:()=>saveStagePosition(阶段)
});
}
};
然后将该
handledRampove
用于拖动节点。另外,通过比较
e.target.getClientRect()
而不是
e.target.absolutePosition()
,您可以使计算变得更好


演示:

我正在做的拖放操作可能有点不同。但请看这里,我实际上在DragMove事件处理程序中使用了下面的代码来处理拖动项目时的滚动

    const viewPortHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
    const scrollTop = (document.documentElement &amp;&amp; document.documentElement.scrollTop) || document.body.scrollTop;
     
    const scrollLimit = document.body.scrollHeight - viewPortHeight;
     
    // See if we need to scroll while dragging
    if (scrollLimit >= 0) {
        const scrollSpeed = 20;
        const scrollSensitivity = 50;
        if (((event.pageY - scrollTop) <= scrollSensitivity)) {
            window.scrollTo(0, (scrollTop - scrollSpeed));
        } else if (((viewPortHeight + scrollTop - event.pageY) <= scrollSensitivity) &amp;&amp; (scrollTop <= scrollLimit)) {
            // mobile browsers sometimes report scrollTop as 0, this hack gets the accurate value
            if (scrollTop === 0) { window.scrollTo(0, 1); }
            window.scrollTo(0, (scrollTop + scrollSpeed));
        }
    }
const viewPortHeight=Math.max(document.documentElement.clientHeight,window.innerHeight | | 0);
常量scrollTop=(document.documentElement&;document.documentElement.scrollTop)| | document.body.scrollTop;
const scrollLimit=document.body.scrollHeight-视口高度;
//查看是否需要在拖动时滚动
如果(滚动限制>=0){
恒速=20;
常数灵敏度=50;

如果(((event.pageY-scrollTop)您好,当我更改
阶段的宽度和高度时,您的演示不起作用。@NidhiDadiya您想在屏幕边缘出现形状时启用本机滚动吗?基本上,出于性能原因,最好有一个尽可能小的阶段。我理解。但这是必需的。有没有办法滚动具有动态宽度和高度的形状ght?我不知道本地滚动是什么!有没有舞台高度和宽度都是动态的解决方案?非常努力。但我希望div随滚动一起移动。在您的演示中,当我向右滚动时,div消失。谢谢。是的,因为没有内容,请看我更新了示例,在页面底部添加了放置区域。没有Don’不要在拖动时消失。。