Zuallererst sollten Sie sich darüber im Klaren sein, dass, wenn Sie einem Tag in Ihrem Körper einen Cursor zugewiesen haben, $('body').css('cursor', 'wait');
der Cursor dieses Tags nicht geändert wird (wie ich, verwende ich ihn cursor: pointer;
für alle meine Ankertags). Vielleicht möchten Sie zuerst meine Lösung für dieses spezielle Problem betrachten: Cursor warten auf Ajax-Aufruf
Für das Problem, dass der Cursor erst aktualisiert wird, wenn der Benutzer die Maus in Webkit-Browsern bewegt, gibt es, wie andere sagten, keine wirkliche Lösung.
Abgesehen davon gibt es immer noch eine Problemumgehung, wenn Sie dem aktuellen Cursor dynamisch einen CSS-Spinner hinzufügen. Dies ist keine perfekte Lösung, da Sie die Größe des Cursors und die korrekte Positionierung des Drehfelds nicht genau kennen.
CSS-Spinner nach dem Cursor: DEMO
$.fn.extend(
{
reset_on : function(event_name, callback)
{ return this.off(event_name).on(event_name, callback); }
});
var g_loader = $('.loader');
function add_cursor_progress(evt)
{
function refresh_pos(e_)
{
g_loader.css({
display : "inline",
left : e_.pageX + 8,
top : e_.pageY - 8
});
}
refresh_pos(evt);
var id = ".addcursorprog";
$('html').reset_on('mousemove' + id, refresh_pos);
$(window).
reset_on('mouseenter' + id, function(){ g_loader.css('display', 'inline'); }).
reset_on('mouseleave' + id, function(){ g_loader.css('display', 'none'); });
}
function remove_cursor_progress(evt)
{
var id = ".addcursorprog";
g_loader.css('display', 'none');
$('html').off('mousemove' + id);
$(window).off('mouseenter' + id).off('mouseleave' + id);
}
$('.action').click(add_cursor_progress);
$('.stop').click(remove_cursor_progress);
Sie müssen überprüfen, ob es sich ebenfalls um ein Touch-Gerät handelt var isTouchDevice = typeof window.ontouchstart !== 'undefined';
Abschließend sollten Sie versuchen, Ihrer Seite einen statischen Spinner oder etwas anderes hinzuzufügen, das den Ladevorgang anzeigt, anstatt zu versuchen, dies mit dem Cursor zu tun.