Изменить тип курсора для HTML-документа из JavaScript - PullRequest
5 голосов
/ 12 марта 2009

Допустим, у меня есть метод javascript, который занимает немного или много времени, чтобы завершить работу без какой-либо обратной связи с пользователем. В моем случае это сортировка строк в элементе таблицы (все в DOM; это занимает слишком много времени, если имеется lot строк), но это может сделать что угодно. Я хочу показать курсор прогресса, пока он работает. Вот то, что у меня есть в настоящее время, но я пробовал и несколько других вещей:

// SORT   
document.body.style.cursor = "progress";
MyLongRunningMethod(); //blocks for 10-15 seconds before returning
document.body.style.cursor = "auto";    

К сожалению, ничего не происходит. MyLongRunningMethod () делает все правильно, но курсор никогда не меняется. Я думаю, что браузер должен ждать, пока метод вернется, чтобы иметь возможность обрабатывать сообщение об изменении курсора, генерируемое средой управления окнами, но это может быть далеко, и даже если это правда, я не знаю, как это исправить.

Есть еще идеи?


[править]: Я решил, что весь рассказ, который у меня был, не был действительно необходим. Если вы действительно хотите прочитать его, проверьте историю изменений.


Окончательные результаты

В итоге я воспользовался решением Роборга. Он не так сильно портит код, как я первоначально думал, потому что я могу сохранить функцию, объявленную прямо там, - это все равно, что добавить встроенный блок контекста.

Интересно, что в Firefox я обнаружил, что это означает, что мне вообще не нужно менять курсор. Я обнаружил, что после того, как я добавил вызов setTimeout, я иногда видел, как курсор ожидания показывался до того, как был установлен курсор прогресса, поэтому я закомментировал свой код курсора. Оказывается, что что-то в использовании setTimeout для выталкивания этого из самого обработчика события click позволяет FireFox самостоятельно определять, что курсор должен измениться. К сожалению, IE не такой умный, поэтому я вернул код курсора обратно.

Это подтверждает мою уверенность в том, что смена курсора является подходящим действием & mdash; учитывая возможность, это то, что браузер будет делать в любом случае. Я действительно не хочу добавлять и удалять новые элементы (например, изображение какого-то типа) в DOM для страницы, о которой я очень мало знаю. Сценарий должен соответствовать независимо от того, какой визуальный дизайн использует страница.

Наконец, Chrome делает все это неактуальным. Используя те же данные, Chrome делает менее чем за 5 секунд, на что IE и Firefox потребовалось 10-15 секунд. Таким образом, их движок JavaScript действительно быстрее. Я не могу ждать двигателя Firefox 3.1. К сожалению, люди все еще в основном используют IE6.

Ответы [ 3 ]

9 голосов
/ 12 марта 2009

Использование таймера исключено?

document.body.style.cursor = "progress";

setTimeout(function()
{
    SortTable(cell.cellIndex, dir, sortType);
    document.body.style.cursor = "auto";
}, 10);
2 голосов
/ 12 марта 2009

В Интернете изменение курсора мыши не является обычным и не очень приятным.

Гораздо лучше (и проще) использовать небольшие анимации на самой странице, отметьте http://www.ajaxload.info/ для таких изображений (это онлайн-генератор).

0 голосов
/ 12 марта 2009

Попробуйте удалить document.body.style.cursor = "auto" и поместить его в функцию, вызываемую при завершении функции SortTable. Таким образом, вы сохраните курсор занятости до тех пор, пока функция не будет завершена. Убедитесь, что если вы столкнулись с ошибкой в ​​SortTable (), вы все равно нажали вызов функции «Больше не занят».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...