2016-04-13 53 views
7

Trong mã của tôi, tôi sử dụng jQuery/CSS để thiết lập và unset các 'chờ' con trỏ chuột với đoạn mã sau:Chuột con trỏ bộ sử dụng jQuery/CSS không thay đổi cho đến khi con chuột di chuyển

function setWaitCursor() { 
    $('body').css('cursor', 'wait'); 
    } 

    function setDefaultCursor() { 
    $('body').css('cursor', ''); 
    } 

tôi sử dụng mã này để thay đổi con trỏ chuột trong một thời gian dài:

setWaitCursor(); 

... do stuff that takes a few seconds ... 

setDefaultCursor(); 

Mã này dường như không hoạt động trừ khi bạn di chuyển chuột (ít nhất là cho Chrome trên Win 10). Nếu con chuột không được di chuyển sau khi setDefaultCursor được gọi, con trỏ sẽ hiển thị con trỏ 'chờ' cho đến khi con chuột được di chuyển (hoặc ngược lại).

Ví dụ: https://jsfiddle.net/antonyakushin/0jv6rqkf/

Trong fiddle này, những thay đổi con trỏ trong 2 giây sau khi liên kết là nhấp vào. Nếu bạn không di chuyển chuột khi bạn nhấp vào liên kết, con trỏ sẽ không thay đổi.

Cách tốt nhất để giải quyết vấn đề này là gì, do đó ngay cả khi con chuột không được di chuyển con trỏ sẽ bị thay đổi?

+0

Xem câu trả lời của tôi tại https://stackoverflow.com/a/47055518/83169. –

Trả lời

2

Một số yếu tố có kiểu con trỏ mặc định. Vì vậy, wile thay đổi kiểu con trỏ, chúng ta cũng cần phải thay đổi kiểu đó.

$(document).ready(function() { 
    function setWaitCursor(elem) { 
    elem.css('cursor', 'wait'); 
    $('body').css('cursor', 'wait'); 
    } 
    function setDefaultCursor(elem) { 
    elem.css('cursor', ''); 
    $('body').css('cursor', ''); 
    } 
    $('#testLink').on('click', function() { 
    var x = $(this) 
    setWaitCursor(x); 
    setTimeout(function() { 
     setDefaultCursor(x); 
    }, 5000); 
    return false; 
    }); 
}); 

Demo fiddle

+0

Tôi thấy rằng việc chạy loại mã này trên tải trang dường như hoạt động, nhưng không phải khi được kích hoạt mặc dù một sự kiện như một liên kết hoặc nút được nhấp. Ví dụ, tôi có vấn đề ở đây nếu con chuột nếu không di chuyển khi "Test Link" được nhấp: https://jsfiddle.net/antonyakushin/0jv6rqkf/ – Anton

+0

Tôi đã cập nhật câu trả lời của mình. Vui lòng xác minh và cho tôi biết nếu bạn cần bất kỳ thay đổi nào. –

+0

Giải thích tuyệt vời, tôi đã không nhận ra một số yếu tố có kiểu con trỏ mặc định. Cảm ơn! – Anton

1

Chỉ cần thay đổi body-*. Nó sẽ được áp dụng cho tất cả các yếu tố.

Fiidle Demo

đoạn Code:

$(document).ready(function() { 
 

 
    function setWaitCursor() { 
 
    $('*').css('cursor', 'wait'); 
 
    } 
 

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

 
    $('#testLink').on('click', function() { 
 
    setWaitCursor(); 
 
    setTimeout(function() { 
 
     setDefaultCursor(); 
 
    }, 2000); 
 
    return false; 
 
    }); 
 

 
});
body { 
 
    min-width: 500px; 
 
    min-height: 500px; 
 
    background-color: gray; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<div id="mouseContainer"> 
 
    <a href="#" id="testLink">Test Link</a> 
 
</div>

+0

Sử dụng '*' loại bỏ các đặc tính con trỏ trên các phần tử đã được thiết lập. – Bobort

Các vấn đề liên quan