Перевод курсора на ожидание в javascript / jquery


120

введите описание изображения здесь

Как мне заставить мой курсор измениться на этот значок загрузки при вызове функции и как мне вернуть его на обычный курсор в javascript / jquery


7
если вам нужен именно этот курсор, вам нужно указать URL-адрес, в противном случае (с решением Робертса) каждый пользователь будет видеть курсор загрузки в зависимости от его ОС.
Christoph

1
Кристоф, что бы «подождать» покажет для других операционных систем. Я сейчас использую Windows 7, потому что на данный момент все выглядит нормально
ахмет

2
ну, в перспективе он будет отображать тот же курсор, что и в Windows 7, но с его неработающей анимацией, в более старых ОС Windows он будет отображать старые добрые песочные часы, а в Linux или Mac OS он будет отображать соответствующий «ожидающий» курсор. Также я бы посоветовал не манипулировать курсором пользователя, поскольку это обычно связано с операциями ОС, а скорее предоставить небольшую анимацию ожидания, подобную этой, прямо на вашей веб-странице, которая помогает пользователю с первого взгляда увидеть, что операция ожидания вызвано вашим сайтом, а не ОС.
Christoph


1
Хорошая идея для настольных компьютеров, ПЛОХАЯ идея для мобильных ...
Please_Dont_Bully_Me_SO_Lords

Ответы:


196

В вашем jQuery используйте:

$("body").css("cursor", "progress");

а затем снова вернуться в нормальное состояние

$("body").css("cursor", "default");

8
Я использовал, $("html,body")потому что тело моей страницы помещается только в половину окна, поэтому курсор все еще оставался по умолчанию при наведении курсора на нижнюю половину.
Кейт

Другие элементы на странице (например, кнопки Bootstrap), которые заменяют курсор на отображение не по умолчанию, будут блокировать этот подход, пока курсор все еще находится над элементом. В этих случаях я счел предпочтительным использовать !importantрешение @ hrabinowitz ниже
Аддисон Клинке

83

Коллега предложил подход, который я считаю предпочтительным по сравнению с выбранным здесь решением. Сначала в CSS добавьте это правило:

body.waiting * {
    cursor: progress;
}

Затем, чтобы включить курсор выполнения, произнесите:

$('body').addClass('waiting');

и чтобы выключить курсор выполнения, скажите:

$('body').removeClass('waiting');

Преимущество этого подхода состоит в том, что при выключении курсора выполнения все другие курсоры, которые могли быть определены в вашем CSS, будут восстановлены. Если правило CSS не имеет достаточного приоритета для отмены других правил CSS, вы можете добавить идентификатор в тело и в правило или использовать !important.


Отличное решение!
Кентон де Йонг,

31

Пожалуйста, не используйте для этого jQuery в 2018 году! Нет причин включать всю внешнюю библиотеку только для выполнения этого единственного действия, которое может быть выполнено одной строкой:

Измените курсор на счетчик: document.body.style.cursor = 'wait';

Вернуть курсор в нормальное состояние: document.body.style.cursor = 'default';


3
Скорее всего, на этой странице есть что-то, что добавляет необходимости в настраиваемом курсоре обработки, не так ли? Неплохо, конечно, но замена уже загруженного jQuery на что-то еще будет ... эм ... 100%?
Патрик

Поскольку @ahmet запрашивает решение javascript / jquery, я думаю, что ваш тоже должен быть ответом. +1
Хавьер

8

Я предпочитаю следующий способ, который будет менять курсор каждый раз, когда страница собирается измениться, т.е. beforeunload

$(window).on('beforeunload', function(){
   $('*').css("cursor", "progress");
});

1
это, безусловно, самая легкая и простая реализация, которую вы можете сделать. Большое спасибо.
JC203

Нет возможности вернуть это обратно!
Ωmega

@ Ωmega, поскольку страница загружается после этих изменений, нет необходимости возвращать ее обратно.
шанепарсонс

Ну, но вопрос ОП требует чего-то еще, я полагаю ...
Ωmega

7

Используя jquery и css:

$("#element").click(function(){ 
    $(this).addClass("wait");
});​

HTML: <div id="element">Click and wait</div>​

CSS: .wait {cursor:wait}​

Демо здесь


Это демонстрирует, что курсор ожидания может отображаться над контейнером, который меньше всей страницы - это может иметь смысл, если с другими частями страницы все еще можно взаимодействовать. Вот только пока завис над div. На практике выбранный элемент для отображения курсора ожидания должен быть больше, чем элемент, на котором щелкнули. Часто лучше всего отображать на всей странице, как в принятом ответе.
ToolmakerSteve

6

Переопределить все отдельные элементы

$("*").css("cursor", "progress");

6
Проблема с этим подходом заключается в том, что вы потеряете стиль CSS для таких селекторов, как: active /: hover, когда ожидание закончится
Ахмад

6
$('#some_id').click(function() {
  $("body").css("cursor", "progress");
  $.ajax({
    url: "test.html",
    context: document.body,
    success: function() {
      $("body").css("cursor", "default");
    }
  });
});

Это создаст курсор загрузки, пока ваш вызов ajax не будет успешным.


1
@Christoph, почему бы тебе не дать нам ответ с лучшим кодом, пожалуйста? Я определенно предпочитаю всегда лучший код.
Bobort

@Bobort, на этот вопрос уже есть много достойных ответов. Кроме того, 4 -х лет , а между тем successи completeудаляются в СВ3, так что вы должны пойти с $.ajax(...).always(...);ходом процесса курсор может быть установлен в beforeSendфункции.
Кристоф

6

JQuery:
$("body").css("cursor", "progress");

назад снова
$("body").css("cursor", "default");

Pure:
document.body.style.cursor = 'progress';

назад снова
document.body.style.cursor = 'default';


5

Для этого вам не нужен JavaScript. Вы можете изменить курсор на что угодно, используя CSS:

selector {
    cursor: url(myimage.jpg), auto;
}

См. Здесь для поддержки браузера, поскольку есть некоторые тонкие различия в зависимости от браузера


1
Разве вам не нужен javascript для переключения на другой курсор?
ToolmakerSteve

@ToolmakerSteve нет - вы можете использовать только CSS - просто измените селектор, чтобы определить, где вы хотите использовать курсор
Мэнс

3

Вы можете сделать еще кое-что интересное. Определите функцию для вызова непосредственно перед каждым вызовом ajax. Также назначьте функцию для вызова после завершения каждого вызова ajax. Первая функция установит курсор ожидания, а вторая очистит его. Они выглядят так:

$(document).ajaxComplete(function(event, request, settings) {
    $('*').css('cursor', 'default');
  });

function waitCursor() {
    $('*').css('cursor', 'progress');
  }

1

Если сохраняется слишком быстро, попробуйте следующее:

<style media="screen" type="text/css">
    .autosave {display: inline; padding: 0 10px; color:green; font-weight: 400; font-style: italic;}
</style>

<input type="button" value="Save" onclick="save();" />&nbsp;
<span class="autosave" style="display: none;">Saved Successfully</span>


$('span.autosave').fadeIn("80");
$('span.autosave').delay("400");
$('span.autosave').fadeOut("80");

1

Установка курсора для «тела» изменит курсор для фона страницы, но не для элементов управления на ней. Например, кнопки по-прежнему будут иметь обычный курсор при наведении на них курсора. Я использую следующее:

Чтобы установить курсор ожидания, создайте элемент стиля и вставьте в заголовок:

var css = "* { cursor: wait; !important}";
var style = document.createElement("style");
style.type = "text/css";
style.id = "mywaitcursorstyle";
style.appendChild(document.createTextNode(css));
document.head.appendChild(style);

Затем, чтобы восстановить курсор, удалите элемент стиля:

var style = document.getElementById("mywaitcursorstyle");
if (style) {
  style.parentNode.removeChild(style);
}

0

Я обнаружил, что единственный способ заставить курсор эффективно сбросить свой стиль обратно к тому, который он имел до изменения на стиль ожидания, - это установить исходный стиль в таблице стилей или в тегах стиля в начале страницы, установить класс рассматриваемого объекта на имя стиля. Затем, по истечении периода ожидания, вы устанавливаете стиль курсора обратно на пустую строку, НЕ «по умолчанию», и он возвращается к исходному значению, установленному в ваших тегах стиля или таблице стилей. Установка его на «по умолчанию» после периода ожидания изменяет только стиль курсора для каждого элемента на стиль, называемый «по умолчанию», который является указателем. Он не возвращает его к прежнему значению.

Есть два условия, чтобы это работало. Сначала вы должны установить стиль в таблице стилей или в заголовке страницы с тегами стиля, а НЕ как встроенный стиль, а во-вторых, сбросить его стиль, установив для стиля ожидания обратно пустую строку.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.