改编自http://www.webdeveloper.com/forum/archive/index.php/t-65078.html 的文本和示例代码,可能无法反映实际问题:
我有一个 div,然后有一个 div,里面有一个嵌套表:在父 div 之外还有一些 div。
<div onmousemove="move()" onmouseout="out()">
<div id="dvRep"> </div>
<table>
<tr><td>ITEM 1</td></tr>
<tr><td>ITEM 2</td></tr>
<tr><td>ITEM 3</td></tr>
<tr><td>ITEM 4</td></tr>
<tr><td>ITEM 5</td></tr>
</table>
</div>
<div id="divChartPopupMenu">
Hide me.
</div>
Run Code Online (Sandbox Code Playgroud)
每当我在 div 内移动鼠标时,它都会正确调用移动函数,但该onmouseout属性并不像我想象的那样工作。我认为out()只有当您将鼠标移出 div 时才会调用该函数,但是out()每当我移出表格行之一时都会调用该函数。因此,如果我的鼠标在一行上并且我移动到下一行,它会调用out(). 我只想out()在用户离开整个 div 时被调用。有任何想法吗?
我正在尝试的功能是我隐藏了另一个 div。
在 Windows 中,当我创建 QMainWindow 时,我可以通过单击标题栏并拖动它来在屏幕上移动它。
在我的应用程序中,我通过使用隐藏了标题栏,setWindowFlags(Qt::CustomizeWindowHint)并且我正在尝试使用小部件构建自定义标题栏并将其设置在菜单空间中setMenuWidget(myWidget)。
现在我想重现原始行为:我想单击MyWidgetQMainWindow 内的小部件,然后在按下鼠标时拖动鼠标移动窗口。
有办法做到吗?
我试图在window单击对象时添加一个事件侦听器,然后在再次单击该对象时删除该事件侦听器。
Card单击组件时,状态isCardMoving会打开或关闭。
我添加了一个useEffect来观看isCardMoving。当isCardMoving打开时,它应该向mousemove触发该handleCardMove功能的窗口添加一个事件侦听器。该函数仅记录鼠标的坐标。
如果我再次单击该卡,isCardMoving将为 false,并且我希望窗口上的事件侦听器在useEffect.
isCardMoving但会发生什么情况,事件侦听器将在is时添加true,然后一旦isCardMovingis就不会被删除false。
import React from 'react';
const App = () => {
const [isCardMoving, setIsCardMoving] = React.useState(false);
React.useEffect(() => {
if (isCardMoving) window.addEventListener('mousemove', handleCardMove);
else window.removeEventListener('mousemove', handleCardMove);
}, [isCardMoving]);
const handleCardMove = (event) => console.log({ x: event.offsetX, y: event.offsetY });
return <Card onClick={() => setIsCardMoving(!isCardMoving)} />;
};
Run Code Online (Sandbox Code Playgroud)
然后我尝试ref在窗口上设置 …
addeventlistener mousemove reactjs react-hooks removeeventlistener
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
if (wParam == WM_MOUSEMOVE)
{
cout << "X : " << GET_X_LPARAM(lParam) << " Y: " << GET_Y_LPARAM(lParam) << "\n";
}
}
return CallNextHookEx(hMSHook, nCode, wParam, lParam);
}
int _tmain() {
HMODULE hInstance = GetModuleHandle(NULL);
hMSHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, hInstance, NULL);
MSG Msg;
while (GetMessage(&Msg, NULL, 0, 0)) { DispatchMessage(&Msg); }
::ReleaseDC(0, dc);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果 = 总是返回错误的坐标,
示例 = X = -1844,Y = 79, …
mousemove ×4
c++ ×2
dom-events ×1
hook ×1
javascript ×1
qt ×1
react-hooks ×1
reactjs ×1
titlebar ×1
winapi ×1
window ×1