我有一个拖拽UI程序,在可拖动元素上单击时,鼠标光标会变成手型。
问题是,我允许在屏幕上的任何地方进行拖拽,并且光标会在锚点标记等处发生变化...
我尝试过$('*').addClass('grabbing')
,但这非常耗费资源。
有没有一个简单高效的方法可以处理这个问题?
我有一个拖拽UI程序,在可拖动元素上单击时,鼠标光标会变成手型。
问题是,我允许在屏幕上的任何地方进行拖拽,并且光标会在锚点标记等处发生变化...
我尝试过$('*').addClass('grabbing')
,但这非常耗费资源。
有没有一个简单高效的方法可以处理这个问题?
在 CSS 层面上实现:
* {
cursor: pointer;
}
使用jQuery实现这个功能会强制迭代DOM中的每个节点并重写它们的CSS类。在一个长文档中,这将是一种巨大的时间浪费。
!important
。 - Marc B尝试这个
$('body').addClass('grabbing');
或者
$(document).addClass('grabbing');
//编辑后的答案
$('body').mousedown(function(e){
$(this).css({'cursor':'pointer'});
}).mouseup(function(e){
$(this).css({'cursor':'auto'});
});
我尝试了大部分方法,但并不是所有元素都会显示光标。一种快速而简单的方法是遍历整个DOM,并为每个元素设置光标。
document.querySelectorAll('*').forEach(function(node) {
node.style.cursor = 'progress';
});
在这里执行ajax或其他操作...之后跟随:
document.querySelectorAll('*').forEach(function(node) {
node.style.cursor = 'default';
});
当你需要时,可以调用一行JavaScript代码:
document.body.style.setProperty('cursor', 'pointer');
当您想再次撤销操作时,可以执行另一条单行命令:
document.body.removeAttribute('style');
您可以向页面/站点添加新样式表。
https://codepen.io/Swell_boy/pen/oNMBbKq
const css = "* { cursor: grabbing !important; }",
styletag = document.createElement("style");
styletag.type = "text/css";
if (styletag.styleSheet) {
styletag.styleSheet.cssText = css;
} else {
styletag.appendChild(document.createTextNode(css));
}
document.addEventListener("mouseup", function myFunction_Default() {
styletag.remove();
});
document.addEventListener("mousedown", function myFunction_Grab() {
document.body.appendChild(styletag);
});