Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

342
Views
How to set cursor to 'wait' for duration of script running?

I want to set the cursor style to 'wait' while a lengthy javascript function is running, and then reset back to normal afterwards.

I thought this might be enough:

document.body.style.cursor = 'wait';
// long scripting here
document.body.style.cursor = 'auto';

However .. if I move the cursor to point at (e.g.) an <input> then the cursor changes to the appropriate type e.g. 'text'. (Tested via individual commands in the console).

I did find this similar question, which sets up a css rule of
html.wait, html.wait * { cursor: wait !important; }
and uses that via this js:

document.querySelector("html").classList.add("wait");
// long scripting here
document.querySelector("html").classList.remove("wait");

.. but .. it doesn't seem to kick in while the script is running.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Put an idle delay where JS can release the CPU back to the browser so it gets a chance to do a repaint (or whatever it's called).

const DELAY_FOR_REFRESH = 25; // milliseconds
document.querySelector("html").classList.add("wait");
setTimeout( () => {
  // long scripting here
  document.querySelector("html").classList.remove("wait");
}, DELAY_FOR_REFRESH);

In limited testing, the DELAY_FOR_REFRESH needed to be more than at least 20ms — any quicker and the observed behaviour is that the browser doesn't repaint/update before the long scripting gets started.

NB. the reset of cursor back to 'auto' needs to happen at the end of the setTimeout() functionality (not after it).


My mental model of what happens here is something like this:

  1. DOM is updated with change to set the 'wait' cursor
  2. Browser hasn't updated the window yet because browser has'nt had a spare CPU cycle
  3. JS schedules the work for later
  4. CPU idles, waiting until the scheduled task
  5. Browser has idle CPU now, and enough time elapses it decides to do a repaint/whatever for the change in DOM from step 1
  6. the scheduled task kicks off
  7. the scheduled task eventually finishes, including resetting the cursor
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!