холст html5, щелкающий по обнаружению формы пути Безье

У меня есть холст с рисунками неправильной формы, и я хотел бы получить обратную связь, когда кто-то нажимает на конкретную?

I Я искал повсюду для этого и нашел только решения для прямоугольника.

Я думаю, что это может быть связано с isPointInPath (), но мне еще предстоит найти краткое объяснение того, как его использовать.

Любая помощь приветствуется.

8
задан Brousselaine 19 August 2010 в 06:31
поделиться

1 ответ

Я сделал учебник, который использует второй невидимый холст для выбора объектов/тестирования попаданий. Нарисуйте все фигуры, одну за другой, на втором холсте, пока на одной из них не появится черный пиксель в месте расположения мыши. Значит, вы нашли объект!

Вот немного из руководства, которое я написал о выборе объектов с помощью canvas:

  // gctx is ghost context, made from the second canvas
  // clear(gctx)

  // ...

  // run through all the boxes
  var l = boxes.length;
  for (var i = l-1; i >= 0; i--) {
    // draw shape onto ghost context
    drawshape(gctx, boxes[i], 'black', 'black');

    // get image data at the mouse x,y pixel
    var imageData = gctx.getImageData(mx, my, 1, 1);
    var index = (mx + my * imageData.width) * 4;

    // if the mouse pixel exists, select and break
    if (imageData.data[3] > 0) {
      mySel = boxes[i];
      offsetx = mx - mySel.x;
      offsety = my - mySel.y;
      mySel.x = mx - offsetx;
      mySel.y = my - offsety;
      isDrag = true;
      canvas.onmousemove = myMove;
      invalidate();
      clear(gctx);
      return;
    }

  }

В моем полном демо используются только прямоугольники, но в более поздней версии я буду использовать круги/контуры/текст.

Если вы хотите посмотреть демо и мой полный код, он находится здесь.

13
ответ дан 5 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: