当光标不移动时更改光标

3

我有一个基于HTML、CSS和JavaScript/jQuery的Web应用程序,它可以拖动元素(意思是,光标不会在该元素上移动,因为该元素随着光标移动)。我希望将光标更改为“移动”光标,但我遇到了奇怪的行为。我编写了以下代码以进行演示:

<html>
<head></head>
<body oncontextmenu="return false;">
    <script>
        var b=document.getElementsByTagName('body')[0];
        b.onmousedown=function(event){
            if(event.button){
                b.style.cursor='move';
            }
        }
        b.onmouseup=function(event){
            if(event.button){
                b.style.cursor='initial';
            }               
        }
    </script>
</body>
</html>

基本上,我希望每当用户按住鼠标右键时,光标就会改变为“cursor:move;”;但是,以下情况发生了:
- 初始状态:光标默认为default - 鼠标按下:光标默认为default - 鼠标移动:光标默认为default - 鼠标松开:光标变为move - 鼠标移动:光标默认为default
所以我的问题是:为什么会出现这种情况,有什么好的方法来解决它?
PS:在Chrome中测试过,这是我需要它工作的主要浏览器。
2个回答

0

您可以附加 mousedownmouseup 事件来启动函数,这些函数将更改和恢复光标。

在每个函数中,您可以确认刚刚按下(或释放)的按钮是右鼠标按钮。

工作示例:

var div = document.getElementsByTagName('div')[0];

function changeCursorToMove(event) {
 if ((event.which === 3) || (event.button === 2)) {
        div.classList.add('move-cursor');
    }
}

function changeCursorToDefault(event) {
 if ((event.which === 3) || (event.button === 2)) {
        div.classList.remove('move-cursor');
    }
}

div.addEventListener('mousedown', changeCursorToMove, false);
div.addEventListener('mouseup', changeCursorToDefault, false);

document.oncontextmenu = function(){return false;}
div {
width: 100px;
height: 100px;
background-color: red;
}

.move-cursor {
cursor: move;
}
<div></div>


你为什么要在我已经给出几乎相同且更符合原帖要求的答案后才回答呢?我想知道你浪费时间的逻辑。 - vsync
你花了一个小时?即使它是重复的,你还是发布了吗? - vsync
大约花了我10分钟。我猜你是一名程序员。 - Rounin
@vrugtehagel - 为什么这么奇怪?为什么你没有将我的答案标记为正确的答案?它正是你想要的。 - vsync
@vrugtehagel - 不可能它对你不起作用。它在所有浏览器上都可以运行。我已经检查过了。你应该验证一下。我已经花时间帮助你了,它确实可用。 - vsync
显示剩余6条评论

-1

http://jsbin.com/vepihik/edit?html,css,js,output

document.addEventListener('mousedown', onMouseAction)
document.addEventListener('mouseup', onMouseAction)

function onMouseAction(e){
    document.body.style.cursor = e.buttons && e.button == 2 ? 'move' : 'default';        
}
html, body{ height:100%; }
Try to hold the RIGHT mouse button and move it, then release

在文档本身上附加mousedownmouseup事件,并使它们都调用相同的函数,该函数只是检查单击的按钮。right = 2在您的情况下。

当鼠标按钮释放时,这似乎没有将光标重置为默认样式。因为它是相同的按钮,所以e.button == 2在这里始终成立。它需要通过事件类型进行区分。 - CBroe
它只是因为上下文菜单被打开而简单地改回默认光标。如果您在“body”中添加“oncontextmenu =“return false;””,则您的片段将不再起作用。 - user3546284
@vrugtehagel - 抱歉,我编辑时出了问题。我会再次进行编辑! - vsync

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接