将光标设置为等待的最简单方法,然后将所有元素还原
在我的网站上,我有一些CSS类,当你鼠标hover在它们上面时,它们会设置一个固定类型的光标。 当我在页面的任何地方进行AJAX调用时,我想将光标设置为等待图像,然后让它恢复到AJAX调用完成后它应该是的任何光标。
我试过了:
$(document).ajaxStart(function () { document.body.style.cursor = 'wait'; }); $(document).ajaxStop(function () { document.body.style.cursor = 'auto'; });
当我的鼠标位于一个带有改变光标的CSS类的DOM对象上时,这不起作用,而且我对如何使它这样做感到困惑。
目前我有一节课:
.pills a:hover { background-color: #0069D6; color: #FFFFFF; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); text-decoration:none; cursor:pointer; }
如果将鼠标hover在此类中的对象上,并且启动了Ajax调用,则光标仍将保留为指针。
你可以使用在body
上切换一个类的组合和!important
。
$("button").click(function(){ $("body").toggleClass("wait"); return false; });
body.wait, body.wait *{ cursor: wait !important; }
当body有wait
类时,一切都会显示等待光标。
如果你有一个包装或容器:
基本上,包装器的所有子进程都将获得cursor: wait
!important
条件。
另一个答案2014:
解决方案,如果你有至少一个样式表,改变它!
更改CSS样式表:
sh = document.styleSheets[0] Wait_a_bit="* {cursor: wait !important}" sh.insertRule(Wait_a_bit, 0)
在你的ajax之前删除它:
sh.deleteRule(0)
-
将空元素
div#wait-overlay
到您的页面。 我建议你在html文档的末尾添加它,就在结束元素之前。
-
像这样设置这个元素的样式(
.active
是故意的):div#wait-overlay.active { position: fixed; top: 0; bottom: 0; left: 0; right: 0; cursor: wait; z-index: 100000; background: black; opacity: 0; }
-
然后添加以下javascript:
$(document).ajaxStart(function () { $('#wait-overlay') .addClass('active') .animate({opacity: 0.6}); }); $(document).ajaxStop(function () { $('#wait-overlay') .animate( { opacity: 0 }, 400, function () { $(this).removeClass('active'); } ); });
说明:
-
div#wait-overlay
是空div,因此它不可见,因为它位于页面的末尾,所以它不会影响任何内容。 -
但是,如果我们将类
active
添加到此div,它会覆盖整个页面,并且由于非常高的z-index
覆盖了页面上的所有内容。 这样做的另一个好处是页面上的所有内容都变得无法点击。 -
javascript会自动在ajax start上添加
.active
类,并在ajax完成时删除它。 还要感谢调用animate
,页面在ajax启动时逐渐变暗,当ajax完成时,它会恢复正常。
问题是该类将覆盖游标的文档值,为避免这种情况,您应该确保所有元素在hover时都会显示等待符号。
你最好的办法是当你想要鼠标的等号时,在body元素中添加一个类,当那个类存在时,从CSS开始,你设置所有其他类来显示等号。
当ajax完成后,从body标签中删除该类,将恢复具有各种光标样式的原始元素类。
$(document).ajaxStart(function () { $('body').addClass('wait'); }); $(document).ajaxStop(function () { $('body').removeClass('wait'); });
$(document).ajaxStart(function () { $('*').css('cursor', 'wait'); }); $(document).ajaxStop(function () { $('*').css('cursor', ''); });
诀窍。