(我的用户主要使用 Chrome 和 Firefox。)
当一个长时间运行的动作开始时,我想通过将鼠标光标设置为进度来指示正在执行某些操作。我想在所有可见元素上显示此进度 - 主体以及按钮、可拖动、可调整大小以及任何其他可用的 UI 元素。当然,我还想在之后为所有元素重置鼠标光标。所以我必须知道每个元素的默认样式(光标指针、可拖动移动、可调整大小-...)。
我的方法:
如果我只是为“body”设置进度光标,按钮和可拖动的光标仍然是旧的,这可能会使用户感到困惑:
$("body").css("cursor", "progress");
// do long running stuff
$("body").css("cursor", "default");
如果我为所有元素设置光标,我还有另一个问题,因为我不知道哪些元素有哪个光标。所以按钮、可拖动、可调整大小等将在之后松开光标:
$("*").css("cursor", "progress");
// do long running stuff
$("*").css("cursor", "default");
我发现的唯一可行方法是:
$("body").css("cursor", "progress");
$("button").css("cursor", "progress");
$(".ui-dialog-titlebar").css("cursor", "progress");
$(".ui-resizable-n").css("cursor", "progress");
$(".ui-resizable-s").css("cursor", "progress");
$(".ui-resizable-w").css("cursor", "progress");
$(".ui-resizable-e").css("cursor", "progress");
// do long running stuff
$("body").css("cursor", "default");
$("button").css("cursor", "pointer");
$(".ui-dialog-titlebar").css("cursor", "move");
$(".ui-resizable-n").css("cursor", "n-resize");
$(".ui-resizable-s").css("cursor", "s-resize");
$(".ui-resizable-w").css("cursor", "w-resize");
$(".ui-resizable-e").css("cursor", "e-resize");
有没有更优雅/通用的方法来做到这一点?此外,我不确定是否忘记将特定的 JQuery 样式重置为其默认值。我想为我的所有页面解决这个问题,而不用再考虑它。
对于“长期运行的操作”,我的意思是 $.ajax / $.post 调用。像这样:
// my new magic mouse cursor method which should do what I want
showProgressCursor(true);
$.post(window.location.href, {action: 'reprovide'}, function(data) {
// should reset all cursor CSS to their correct defaults
showProgressCursor(false);
});