在离开画布后如何使用MouseLeave更改光标?

时间:2018-08-30 08:25:31

标签: javascript jquery css html5

我正在尝试实现一个十字光标,一旦光标进入画布,它将通过MouseEnter激活。但是,将光标更改为十字准线后,即使它离开了画布,它仍然保留为十字准线。我希望仅在画布内部激活十字准线光标,并在光标离开画布后使其恢复为默认光标。

CSS:

#crosshair-h {
  width: 100%;
}

#crosshair-v {
  height: 100%;
}

.hair {
  position: fixed;
  top:0; left:0;
  margin-top: -3px;
  margin-left: -2px;
  background: transparent;
  border-top: 1px dotted #000;
  border-left: 1px dotted #000;
  pointer-events: none;
  z-index: 2;
}

#mousepos {
  position: absolute;
  top:0; left:0;
  padding: 10px;
  margin: 10px;
  font: 14px arial;
  color: #fff;
  background: rgba(0,0,0,0.5);
  border-radius: 24px;
  z-index: 1;
}

JavaScript:

$(document).ready(function() {
  // Setup our variables
  var cH = $('#crosshair-h'),
      cV = $('#crosshair-v');

  $(this).on('mousemove touchmove', function(e) {
    var x = e.pageX - 1;
    var y = e.pageY - 1;
    cH.css('top', e.pageY);
    cV.css('left', e.pageX);

    $('#mousepos').css({
      top: e.pageY + 'px',
      left: e.pageX + 'px'
    }, 800);
    $('#mousepos').text( "X: " + x + "px, Y: " + y + "px");
    e.stopPropagation();
  });

  // Anchor Hover Effects
  $("a").hover(function() {
    $(".hair").stop().css({borderColor: "#fff"}, 800)},
     function() {
    $(".hair").stop().css({borderColor: "black"},800)
  });
  e.stopPropagation();
});

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:3)

如果默认十字线光标已足够,您可以使用简单的CSS悬停规则来做到这一点:

canvas {
  border: 1px solid grey;
  height: 50px;
  width: 100px;
}
canvas:hover {
  cursor: crosshair;
}
<canvas></canvas>

如果确实需要自定义对象,则可以在画布上使用mouseleave或mouseout事件来删除css类。