javascript / jquery에서 커서를 대기로 변경


120

여기에 이미지 설명 입력

함수가 호출 될 때 커서를이 로딩 아이콘으로 변경하려면 어떻게해야하며 자바 스크립트 / jquery에서 일반 커서로 다시 변경하려면 어떻게해야합니까?


7
이 커서를 정확히 원하는 경우 URL을 지정해야합니다. 그렇지 않으면 (Roberts 솔루션 사용) 모든 사용자가 자신의 OS에 따라 로딩 커서를 볼 수 있습니다.
크리스토프

1
Christoph, 내가 현재 Windows 7을 사용하고있는 다른 운영 체제에 대해 '기다릴 것'이 무엇을 보여줄
까요?

2
음, 비스타에서는 윈도우 7과 같은 커서를 보여 주겠지 만, 애니메이션이 깨져서 오래된 윈도우 OS에서는 좋은 모래 시계를 보여주고, 리눅스 나 맥 OS에서는 각각의 "대기"커서를 보여줄 것입니다. 또한 일반적으로 OS-Operations와 관련이 있기 때문에 사용자 커서를 조작하지 않는 것이 좋습니다. 대신 웹 페이지에서 이와 같은 약간의 대기 애니메이션을 제공 하여 사용자가 한눈에 볼 수 있도록 대기 작업 OS가 아닌 사이트에 의해 발생합니다.
크리스토프


1
바탕 화면에 대한 좋은 생각, 모바일에 대한 나쁜 생각 ...
Please_Dont_Bully_Me_SO_Lords

답변:


195

jQuery에서 다음을 사용하십시오.

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

다시 정상으로 돌아갑니다

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

8
$("html,body")내 페이지의 본문이 창의 절반에만 맞기 때문에 사용 했기 때문에 아래쪽 절반을 가리킬 때 커서가 여전히 기본값이었습니다.
Keith

커서를 기본값이 아닌 디스플레이로 재정의하는 페이지의 다른 요소 (예 : Bootstrap 버튼)는 커서가 요소 위에있는 동안이 접근 방식을 차단합니다. 이 경우 !important아래 @hrabinowitz의 솔루션과 함께 사용하는 것이 더 낫다는 것을 알았습니다
Addison Klinke

82

동료가 여기에서 선택한 솔루션보다 선호하는 접근 방식을 제안했습니다. 먼저 CSS에서 다음 규칙을 추가합니다.

body.waiting * {
    cursor: progress;
}

그런 다음 진행률 커서를 켜려면 다음과 같이 말하십시오.

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

진행률 커서를 끄려면 다음과 같이 말하십시오.

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

이 접근 방식의 장점은 진행률 커서를 끄면 CSS에 정의 된 다른 커서가 복원된다는 것입니다. CSS 규칙이 다른 CSS 규칙을 무시할만큼 우선적으로 강력하지 않은 경우 본문 및 규칙에 ID를 추가하거나 !important.


훌륭한 솔루션!
Kenton de Jong

31

2018 년에는이를 위해 jQuery를 사용하지 마십시오! 한 줄로 수행 할 수있는이 작업을 수행하기 위해 전체 외부 라이브러리를 포함 할 이유가 없습니다.

커서를 스피너로 변경 : document.body.style.cursor = 'wait';

커서를 정상으로 되돌리기 : document.body.style.cursor = 'default';


3
해당 페이지에 사용자 지정 처리 커서에 대한 필요성을 추가하는 무언가가있을 가능성이 큽니다. 그렇지 않습니까? 물론 나쁜 점은 아니지만, 이미 다른 것을 위해로드되고있는 jQuery의 변경 사항은 ... 음 ... 100 %?
patrick

@ahmet이 javascript / jquery 솔루션을 요청함에 따라 귀하의 솔루션도 답이되어야한다고 생각합니다. +1
Javier

8

다음은 내가 선호하는 방법이며 페이지가 변경 될 때마다 커서를 변경합니다. beforeunload

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

1
이것은 여러분이 할 수있는 가장 쉽고 간단한 구현입니다. 감사합니다.
JC203

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
이 접근 방식의 문제점은 대기가 끝나면 : active / : hover와 같은 선택기의 CSS 스타일을 잃게된다는 것입니다.
Ahmad

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당신이 가야하므로, jQ3에서 제거 $.ajax(...).always(...);통해 진행 상태의 커서가 설정 될 수있는 beforeSend기능.
Christoph

6

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

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

순수한:
document.body.style.cursor = 'progress';

다시
document.body.style.cursor = 'default';


5

이를 위해 JavaScript가 필요하지 않습니다. CSS를 사용하여 커서를 원하는대로 변경할 수 있습니다.

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

브라우저에 따라 약간의 차이가 있으므로 브라우저 지원 은 여기 를 참조 하십시오.


1
다른 커서로 변경을 트리거하기 위해 자바 스크립트가 필요하지 않습니까?
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

커서를 대기 스타일로 변경하기 전의 스타일로 효과적으로 재설정하는 유일한 방법은 스타일 시트 또는 페이지 시작 부분의 스타일 태그에서 원래 스타일을 설정하는 것뿐이라는 것을 알았습니다. 스타일의 이름에 해당 객체의 클래스. 그런 다음 대기 기간 후에 커서 스타일을 "기본값"이 아닌 빈 문자열로 다시 설정하고 스타일 태그 또는 스타일 시트에 설정된 원래 값으로 되돌립니다. 대기 기간 후에 "default"로 설정하면 모든 요소의 커서 스타일이 포인터 인 "default"라는 스타일로 변경됩니다. 이전 값으로 되 돌리지 않습니다.

이 작업을 수행하는 데는 두 가지 조건이 있습니다. 먼저 스타일을 인라인 스타일이 아닌 스타일 태그가있는 페이지의 헤더 또는 스타일 시트에 설정해야하며 두 번째는 대기 스타일을 빈 문자열로 다시 설정하여 스타일을 재설정하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.