Перетаскивание не работает в IE


У меня есть список объектов, которые нужно перетащить на холст SVG. Вы можете это видеть здесь.

Блоки определяются и настраиваются для этой операции следующим образом:

var units = html.document.querySelectorAll('ul.units li');
units.onDragStart.listen(_onDragStart);
units.onDragEnd.listen(_onDragEnd);

void _onDragStart(html.MouseEvent e) {
    _dragSource = e.target as html.LIElement;
    _dragSource.classes.add('moving');
    e.dataTransfer.effectAllowed = 'move';

    if (isFirefox) {
      e.dataTransfer.setData('text/plain', 'Required for Firefox!');
    }
}

void _onDragEnd(html.MouseEvent e) {
    _dragSource.classes.remove('moving');
}

И SVG canvas имеет следующее определение:

canvas = html.document.querySelector(canvas_id);
canvas.onDragOver.listen(_onDragOver);
canvas.onDrop.listen(_onDrop);

void _onDragOver(html.MouseEvent e) {
    e.preventDefault();
}

void _onDrop(html.MouseEvent e) {
    e.preventDefault();
    html.Element dropTarget = e.target;
    if (dropTarget == canvas && _dragSource != null && _dragSource.classes.contains('moving')) {
      String operatorId = 'operator_${opNumber}';
      var mouseCoordinates = getRelativeMouseCoordinates(e);
      operators[operatorId] = addOperator(operatorId, _dragSource.dataset['unit-type'], mouseCoordinates['x'], mouseCoordinates['y']);
      opNumber += 1;
    }
}

Это работает для всех браузеров, кроме IE и Safari на Windows. Проблема в том, что я даже не получаю никаких сообщений об ошибках или исключениях. У вас есть какие-нибудь идеи?

2 2

2 ответа:

IE11 и более старые версии не поддерживают перетаскивание HTML5 для элементов SVG. Я сделал простойCodepen , который можно использовать для тестирования в разных браузерах.

Вам нужно будет выполнить ручное тестирование хитов, если вы хотите поддерживать перетаскивание элементов SVG. Если вам интересно, вы можете посмотреть на drag-drop.Дарт . Это моя библиотека, которая поддерживает кросс-браузерное перетаскивание на SVG. Документация не существует, но вы можете посмотреть на примеры и тесты, чтобы получить представление о как им пользоваться.

Вы пробовали эту библиотеку?

Https://github.com/marcojakob/dart-html5-dnd

Это помогает работать с dnd, не беспокоясь о реализации каждого конкретного браузера.