【问题标题】:Draw horizontal and vertical lines collapsing at mouse position绘制在鼠标位置折叠的水平和垂直线
【发布时间】:2026-01-08 21:55:01
【问题描述】:

我正在绘制在鼠标位置折叠的水平和垂直线。我面临两个问题

  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);
});

【问题讨论】:

    标签: javascript


    【解决方案1】:

    水平线问题可以通过以下方式解决:

    .straightLine, .hrLine {
        position: absolute;
        background-color: red;
    }
    

    查看更新的fiddle

    编辑
    您还可以使用以下方法来平滑动画(您必须调整时间跨度以满足您的需要:

    .straightLine, .hrLine {
        position: absolute;
        background-color: red;
        transition: transform .05s ease-in-out;
    }
    

    查看更新的fiddlew3schools.com

    【讨论】:

    • 谢谢,看起来像小提琴问题。
    • @adamdc 添加动画很有意义。但它的移动速度没有鼠标快:)
    • @Exception 鼠标移动并不总是平滑的(我的灵敏度设置非常不稳定),添加一个过渡可以让你弥补这一点。更短的时间或不同的过渡时间功能可以让你更接近你所追求的结果。即使没有过渡,动画也会在鼠标后面移动(对我来说非常流畅)。