javascript - JQuery - 在整个页面(也是 JQuery UI 元素)上显示进度鼠标光标并在之后正确重置

标签 javascript jquery css

(我的用户主要使用 Chrome 和 Firefox。)

当一个长时间运行的 Action 开始时,我想通过将鼠标光标设置为进度来指示正在进行的操作。我想在所有可见元素上显示此进度 - 主体以及按钮、可拖动元素、可调整大小元素以及任何其他可用的 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);
});

最佳答案

请参阅此 fiddle 以了解执行此操作的方法:http://jsfiddle.net/sptDP/

它涉及将一个类添加到您的 body (或任何您想要的地方),并为其后代添加一个 CSS 通用选择器。您应该对大多数不可避免的后续评论持保留态度,认为通用选择器是多么邪恶 (http://www.kendoui.com/blogs/teamblog/posts/12-09-28/css_tip_star_selector_not_that_bad.aspx)。

body.loading, body.loading * {
    cursor:progress !important;
}

FWIW - 我倾向于同意来自其他链接线程的一些海报,即加载器 GIF 或其他东西比弄乱光标更好。但最终您会比我们更了解您的应用 :)

关于javascript - JQuery - 在整个页面(也是 JQuery UI 元素)上显示进度鼠标光标并在之后正确重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16719330/

相关文章:

javascript - highcharts group series 点击事件获取类别中的所有数据

html - 如何在容器中完美居中一个div

javascript - 客户互动矢量图

javascript - Puppeteer 不会点击元素

jquery - 滚动后降低标题高度

c# - Ajax调用成功失败

css - 如何更改浏览器的默认悬停背景颜色?

javascript - FireFox 上的 CSS 溢出隐藏问题

javascript - 如何从工具提示格式化程序显示 highchart 系列线标记符号?

javascript - gmaps v0.3 中如何自动打开信息窗口