使用jQuery/CSS设置的鼠标光标在鼠标移动之前不会更改
Mouse cursor set using jQuery/CSS not changing until mouse moved
在我的代码中,我使用jQuery/CSS设置和取消设置"等待"鼠标光标,代码如下:
function setWaitCursor() {
$('body').css('cursor', 'wait');
}
function setDefaultCursor() {
$('body').css('cursor', '');
}
我用这个代码来更改鼠标光标进行长时间操作:
setWaitCursor();
... do stuff that takes a few seconds ...
setDefaultCursor();
不过,除非你移动鼠标,否则这段代码似乎不起作用(至少对于Win 10上的Chrome来说)。如果在调用setDefaultCursor
之后没有移动鼠标,则光标将显示"等待"光标,直到移动鼠标为止(反之亦然)。
示例:https://jsfiddle.net/antonyakushin/0jv6rqkf/
在这个小提琴中,在链接被单击。如果单击链接时不移动鼠标光标不会改变。
解决这个问题的最佳方法是什么,这样即使没有移动鼠标,光标也会发生变化?
虽然这不是这个特定问题的答案,但这种行为可能会发生:
- 在Chrome上
- 打开DevTools(很可能是为了调试这个问题)
解决方案只是关闭Chrome DevTools。
一些元素具有默认的光标样式。因此,在改变光标样式时,我们也需要改变它。
$(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;
});
});
演示小提琴
只需将body
更改为*
。它将适用于所有元素。
Fiidle演示
代码片段:
$(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>
我想我解决了!只需在更改光标后调用setTimeout()。例如
$('body').addClass('in-progress-cursor');
setTimeout(null, 0); //in typescript we need to provide arguments
这是众所周知的技巧(为什么setTimeout(fn,0)有时有用?)但我没想到这在这种情况下会起作用。
这是我最喜欢的一种方法,可以不引人注意地告诉用户发生了什么事情。例如,我用它来指示http请求正在进行中。找到了解决办法,真是松了一口气。为什么我又觉得自己很愚蠢。。。事实上,我现在在约翰·R的回答中看到了暂停。但这还不够明显。
我也遇到了同样的问题,我注意到在另一个帖子上,光标不会改变,直到鼠标移动,他们建议进行模糊和聚焦来解决这个问题。它对我有效。所以,你的setWaitCursor()应该是这样的。这应该会迫使它在不移动鼠标的情况下进行更改。它在Chrome中对我有效,但没有尝试过其他浏览器。
function setWaitCursor(elem) {
elem.css('cursor', 'wait');
$('body').css('cursor', 'wait');
window.blur();
window.focus();
}
- js:停止鼠标移动
- Zingchart-平移键和鼠标移动
- 在鼠标上触发鼠标移动'的当前位置
- 当用户将鼠标移到屏幕/图表上时,自动滚动将暂停.如果鼠标移动停止,自动滚动将再次恢复
- 如何在谷歌地图上用鼠标移动标记
- 如何在鼠标移动事件时更改图像的窗口中心和宽度
- 如何模仿鼠标移动和事件
- 鼠标点击不会'不起作用,鼠标移动可以
- 有没有办法提高鼠标移动的分辨率
- 如何在JS中随机化backgroundPosition而不使用鼠标移动来制作万花筒的动画
- 如何使用onmousemove函数在每次鼠标移动时更改背景图像
- 使用jQuery/CSS设置的鼠标光标在鼠标移动之前不会更改
- 在谷歌地图中用鼠标移动标记
- 在HTML5画布中绘制鼠标移动的半透明线条
- 如何使用Protractor/Senium将鼠标移动到任意点
- 防止鼠标移动对elementFromPoint的攻击
- 如果鼠标悬停得很快,Jquery鼠标移动会错过一些单元格
- 检查人员是否通过鼠标移动离开网站
- 使用鼠标移动操作选择选项
- 如何在D3Javascript中将鼠标移动到节点上时显示和隐藏节点