Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change mouse cursor on mousedown event

I want to hold the mouse down and have its cursor change to an image. Then when I release the mouse I want it to rever back to its default.

Here is the code I have thus far. It does not work unless you right click then left-mousedown. Weird.

http://jsfiddle.net/HLLNN/

JQUERY

$("#background").on("mousedown", function () {
    $(this).addClass("mouseDown");
}).on("mouseup", function () {
    $(this).removeClass("mouseDown");
});

CSS

.mouseDown{
 cursor:progress  ; // I will eventually want an image file but I used this for brevity

}


#background{
    width:500px;
    height:500px;
    position:absolute;
    background-color:red;
}
like image 616
William Avatar asked Dec 21 '22 04:12

William


2 Answers

Well there is 2 things.

First, you have to prevent default. The default behavior is the drag (text selection) wich override your cursor.

$("#background").on("mousedown", function (e) {
    e.preventDefault();
    $(this).addClass("mouseDown");
}).on("mouseup", function () {
    $(this).removeClass("mouseDown");
});

Second, while your mouse is down, you need to move the cursor else it doesnt work. I don't know why and didnt find a fix yet.

Anyway, check this fiddle : http://jsfiddle.net/HLLNN/3/

like image 77
Karl-André Gagnon Avatar answered Dec 22 '22 17:12

Karl-André Gagnon


it seems that sometimes there are strange conditions, where Crome does not properly changes cursor after mousedown. I also have the situatin where cursor has changed shortly only in a moment after mouseup event :(

But the pure example in https://jsfiddle.net/romleon/429rf1tb/ works fine

var moved=document.getElementsByClassName('moved')[0]
moved.onmousedown = function(){
  moved.classList.add('do_move')
}
 moved.onmouseup = function(){
  moved.classList.remove('do_move')
}
.moved{  
    position: absolute;
    width:111px;
    height:55px;
    background-color: blue;
}
.moved:hover {cursor: pointer;}
.moved.do_move:hover {cursor: crosshair;}
<div class='moved'>
</div>
like image 34
Leon Rom Avatar answered Dec 22 '22 18:12

Leon Rom