javascript - 单击按钮时绘制多行 JavaScript - 不使用 Canvas

标签 javascript jquery html css canvas

我想知道是否可以像这样获得多条绘图线Fiddle元素-

但是没有使用 canvas,而是使用带有 css 背景图像的普通 div 框?

下面的代码使用 Canvas

var canvas = new fabric.Canvas('c', { selection: false });

var line, isDown;

canvas.on('mouse:down', function(o){
  isDown = true;
  var pointer = canvas.getPointer(o.e);
  var points = [ pointer.x, pointer.y, pointer.x, pointer.y ];
  line = new fabric.Line(points, {
    strokeWidth: 5,
    fill: 'red',
    stroke: 'red',
    originX: 'center',
    originY: 'center'
  });
  canvas.add(line);
});

canvas.on('mouse:move', function(o){
  if (!isDown) return;
  var pointer = canvas.getPointer(o.e);
  line.set({ x2: pointer.x, y2: pointer.y });
  canvas.renderAll();
});

canvas.on('mouse:up', function(o){
  isDown = false;
});

谢谢

最佳答案

我对示例进行了一些更正以在各个方向绘制,这仅适用于 css3:

请注意,您必须定义指向(两次单击)才能画一条线。

请看下面的片段:

$(function() {
  var x1 = null,
    y1 = null;
  var offsetX = 0,
    offsetY = 0;

  function createLine(x1, y1, x2, y2) {

    var length = Math.sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));
    var angle = Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;
    var transform = 'rotate(' + angle + 'deg)';

    offsetX = (x1 > x2) ? x2 : x1;
    offsetY = (y1 > y2) ? y2 : y1;

    var line = $('<div>')
      .appendTo('#demo')
      .addClass('line')
      .css({
        'position': 'absolute',
        '-webkit-transform': transform,
        '-moz-transform': transform,
        'transform': transform
      })
      .width(length)
      .offset({
        left: offsetX,
        top: offsetY
      });

    return line;
  }

  $('#demo').click(function(event) {
      var x = event.pageX,
        y = event.pageY;

      if (x1 == null) {
        x1 = x;
        y1 = y;
      } else {
        createLine(x1, y1, x, y);
        x1 = y1 = null;
      }
    })
    .delegate('.line', 'click', function(event) {
      event.preventDefault();
      $(this).toggleClass('active');
      x1 = y1 = null;
      return false;
    });





});
div.line {
  transform-origin: 0 100%;
  height: 3px;
  /* Line width of 3 */
  background: #000;
  /* Black fill */
}

#demo {
  border: 1px dashed #ccc;
  height: 400px;
}

div.transforming-on-corner {
  transform-origin: 0% 0%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<h3> click two point to draw a line :</h3>
<div id="demo" class="wide">

</div>

关于javascript - 单击按钮时绘制多行 JavaScript - 不使用 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911172/

相关文章:

javascript - 如何在 CSS 或 Javascript 中调整 <select> 元素的高度?

javascript - 如何在 mouseenter 和 mouseleave 上使用 jQuery 淡入淡出 2 个图像?

javascript - 任何文本输入更改时运行函数

html - 样式中的媒体查询不会影响设计

javascript - 将选择显示为 SVG 矩形 (JavaScript)

javascript - css 弹出屏幕动画不起作用

javascript - 在 div 之间切换语言

jquery - JQuery 验证引擎中带有参数的自定义函数

html - 除了 IE10 之外,保存为 web photoshop 在所有浏览器中看起来都很好

javascript - 获取 Node.js 中类的可用函数列表