在鼠标位置绘制水平和垂直线条

3

我正在尝试在鼠标位置绘制水平和垂直线,但是我遇到了两个问题:

  1. 水平线没有显示出来。看起来像是一些CSS问题,但是无法解决。
  2. 移动鼠标时,线条的重绘不够流畅。有没有什么方法可以避免这种情况?

fiddle

代码:

var element = document.getElementById('box');

var drawLines = function(event) {
  var x = event.pageX;
  var y = event.pageY;

  var straightLine = element.querySelector('.straightLine');
  var hrLine = element.querySelector('.hrLine');

  var slTrans = 'translate(' + x + 'px, 0px)';
  var hrTrans = 'translate(0px, ' + y + 'px)';
  if(!straightLine) {
     straightLine = document.createElement('div');
     straightLine.classList.add('straightLine');
     straightLine.style.height = "100%";
     straightLine.style.width = '2px';
     element.appendChild(straightLine);
  }
  straightLine.style.transform = slTrans;

  if(!hrLine) {
     hrLine = document.createElement('div');
     hrLine.style.height = "2px";
     hrLine.classList.add('hrLine');
     hrLine.style.width = '100%';
     element.appendChild(hrLine);
  }
  hrLine.style.transform = hrTrans;
}

element.addEventListener('mousemove', function(event) {
   drawLines(event);
});

element.addEventListener('mousedown', function(event) {
   drawLines(event);   
});

element.addEventListener('mouseup', function(event) {
   drawLines(event);
});

element.addEventListener('mouseout', function(event) {
   drawLines(event);
});
1个回答

6
水平线问题可以通过以下方式解决:
.straightLine, .hrLine {
    position: absolute;
    background-color: red;
}

请查看更新的代码示例编辑
您还可以使用以下方法来平滑动画(您需要根据自己的需要调整时间跨度):
.straightLine, .hrLine {
    position: absolute;
    background-color: red;
    transition: transform .05s ease-in-out;
}

请查看更新后的代码示例w3schools.com了解更多相关的IT技术。


1
谢谢,看起来像是代码问题。 - Exception
1
@adamdc 添加动画是有意义的。但它不会像鼠标一样快 :) - Exception
@异常 鼠标移动不总是平滑的(我的灵敏度设置非常卡顿),添加过渡效果可以让您进行补偿。较短的时间或不同的过渡时间函数可以让您更接近所需的结果。即使没有过渡效果,动画也会落后于鼠标(对我来说非常平滑)。 - adamdc78

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