【问题标题】:JavaScript Cursor Change (and change back again)JavaScript 光标更改(并再次更改回来)
【发布时间】:2011-07-07 17:44:42
【问题描述】:

我有这个页面可以处理一些需要几秒钟来处理的时髦的数据库内容,同时我想设置一个"wait" 光标,这样用户就不会跳出并继续点击按钮。我看过了

document.body.style.cursor = "wait"

事情,问题在于它仅在鼠标悬停在页面主体上时才有效(即,如果它在按钮上仍显示正常指针)。怎么设置,不管鼠标在页面的哪个位置,都显示一个等待图标?

这个问题的第二部分是,一旦它完成了,我该如何设置它?如果我将其设置回 "default",这似乎会覆盖我在 CSS 中设置的任何 "hover" 光标更改(因此在指定对象上时它不再变成手等)。

编辑:第一个答案效果很好,除了在 IE 中它不会刷新光标(因此您会注意到光标类型的变化),直到您实际移动光标。有什么修复吗?

【问题讨论】:

    标签: javascript mouse-cursor


    【解决方案1】:

    任何默认不继承光标的元素(如按钮)都需要将光标设置为继承:

    someButton.style.cursor = 'inherit';
    

    要返回元素的默认值(而不是使用强制光标破坏 :hover 之类的内容),请将其设置为空字符串:

    document.body.style.cursor = '';
    

    【讨论】:

      【解决方案2】:

      我的建议是两件事: a) 最好写一个类似的 CSS

      body.waiting * { cursor: wait; }
      

      b) 使用JS处理body类

      /* when you need to wait */
      document.body.className = 'waiting';
      /* to remove the wait state */
      document.body.className = ''; // could be empty or whatever you want
      

      您可能想要添加类而不是替换整个类属性,我建议使用类似 jQuery 的东西。

      编辑 2019:不要为此使用 jQuery,使用 classList

      【讨论】:

      • 赞成这一点,因为您可以将其他更具体的选择器绑定到同一类,以处理链接和表单字段等元素,并使用它们自己的固有光标规范,如上所述。
      • 但是,我尝试过的所有技术,包括这个,在渲染内容的底部下方都没有效果。有趣的是,HTML 元素上的类(而不是 body)仍然保留默认光标,尽管它能够更改该区域的背景颜色。
      【解决方案3】:

      对于您的第一个问题,请尝试使用cursor: wait !important;

      对于第二个问题,元素的默认光标是cursor: auto;,而不是cursor: default;cursor: inherit;

      【讨论】:

      • 我发现第一个解决方案在 Firefox 16 或 Chrome 23 中都不起作用(仅经过测试)。添加 '!important' 实际上会导致它在两个浏览器中什么都不做。没有那个,就像OP所说的那样。当光标在 body 元素上方但不在其末尾下方,或者在链接或表单元素上方时,它可以工作,很可能是任何具有自己显式或内置光标设置的东西。我没有完全编写代码,但是按照@Tom Roggero 的建议添加一个类是可行的,因为您可以添加更具体的选择器来处理需要它的其他元素。
      【解决方案4】:

      不是问题的答案,而是实现目标的一种方式。

      在加载时使 div(参见下面的类)可见。

      • 确保没有任何元素可访问,并且暗色显示表明这一点。
      • 您可以添加动画 gif 来指示正在发生的事情,而不是光标。

        .loading{ position:fixed; height:100%; width:100%; left:0; top:0; cursor:wait; background:#000; opacity:.5; z-index:999}

      【讨论】:

        【解决方案5】:

        如果您对使用 JQuery 感到满意,那么解决此问题的快速方法是使用:

        $('*').css('cursor','wait')
        

        我不知道这有多优雅,但它一直对我有用,

        【讨论】:

          【解决方案6】:

          样式应通过 CSS 处理,如 W3C.com 所述:

          CSS 是用于描述网页呈现的语言,包括颜色、布局和字体。 ... HTML 与 CSS 的分离使得维护站点、跨页面共享样式表以及根据不同环境定制页面变得更加容易。这被称为结构(或:内容)与表示的分离。

          按照 Tom Rogerro 的建议,在 CSS 文件中添加一行:

          body.waiting * { cursor: wait; }
          

          但是,您的脚本不应覆盖整个类名列表。 Tom 建议通过 jQuery 设置类名,但在这种情况下不需要 jQuery。简单的 Javascript 可以做到这一点。

          在文档正文中添加类名“等待”:

          document.body.classList.add('waiting');
          

          从文档正文中删除类名“等待”:

          document.body.classList.remove('waiting');
          

          【讨论】:

            【解决方案7】:

            我尝试了所有方法,但最后这个 jquery 工作了,特别是如果你想等待光标在所有元素上,包括按钮和链接。

            在 Angular .ts 文件的顶部定义

            declare var $: any;

            然后你想要等待光标的地方:

            $('*').css('cursor','wait');

            并移除等待:

            $('*').css('cursor','auto');

            【讨论】:

              猜你喜欢
              • 2012-12-19
              • 1970-01-01
              • 2021-10-11
              • 2014-03-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-16
              相关资源
              最近更新 更多