React-dnd: Неправильное перетаскиваниеПредварительный просмотр в Chrome

Созданный на 19 июл. 2017  ·  20Комментарии  ·  Источник: react-dnd/react-dnd

1) На снимке экрана ниже показана странная проблема, связанная с dragPreview. В моем случае перетаскиваемый узел строки таблицы является и источником, и целью. По некоторым причинам предварительный просмотр перетаскивания содержит не только снимок экрана исходного узла, но и все строки ниже! В то же время операция перетаскивания вызывается только для 1 источника, и замена в обработчике перетаскивания работает нормально.

image

image

2) Также есть странная ошибка, связанная с отладкой: когда я помещаю точку останова в метод рендеринга узла dragSource и продолжаю запускать приложение, я получаю сообщение об ошибке во время перетаскивания

Неперехваченная ошибка: невозможно вызвать наведение после падения.
при инварианте (browser.js? 72b5: 40)
в DragDropManager.hover (dragDrop.js? 3115: 111)
в Object.eval [при наведении] (DragDropManager.js? b07f: 92)
в HTML5Backend.handleTopDragEnter (HTML5Backend.js? 5f50: 495)

image

Но проблема с dragPreview, описанная выше, исчезает, и перетаскивание работает нормально (один раз). Затем где-то после события перетаскивания возникает ошибка «Невозможно вызвать beginDrag при перетаскивании», и перетаскивание вообще перестает работать.

Неперехваченная ошибка: невозможно вызвать beginDrag при перетаскивании.
при инварианте (browser.js? 72b5: 40)
в DragDropManager.beginDrag (dragDrop.js? 3115: 50)
в Object.eval [как beginDrag] (DragDropManager.js? b07f: 92)
в HTML5Backend.handleTopDragStart (HTML5Backend.js? 5f50: 361)

image

Ошибка появляется только в Chrome (57 и 59). Любые идеи?

Самый полезный комментарий

Я решил эту проблему в Chrome, добавив transform: translate3d (0, 0, 0) в мой содержащий элемент.

Все 20 Комментарий

@tTwisTt Я столкнулся с этой проблемой, вы

@kaiomagalhaes В моем случае у меня

@tTwisTt Я могу подтвердить, что то же самое происходит с overflow: hidden. есть ли способ перетаскивать такие элементы без неправильного предварительного просмотра?

Этот вопрос закрыт, но, похоже, он все еще остается проблемой, не следует ли открывать его повторно?

У меня также есть такая же проблема - когда я начинаю перетаскивать предварительный просмотр, он слишком велик и не учитывает части, которые должны быть скрыты из-за переполнения.
Здесь вы можете увидеть, как я перетаскиваю элемент, но «граница», оставленная рядом с ним, также является частью предварительного просмотра.

image

РЕДАКТИРОВАТЬ: я смог исправить это, не используя изображение с относительным позиционированием в элементе, а вместо этого div с фоновым изображением.
Таким образом, кажется, что внутренний элемент img, выходящий из родительского элемента, вызвал проблему.

У меня возникла аналогичная проблема, когда я пытаюсь перетащить обернутый div материал ui Expansion Panel, который свернут, в конечном итоге он дает мне предварительный просмотр, который является высотой развернутой панели, но включает элементы со страницы вокруг панели, поскольку видимая часть панели меньше, чем предварительный просмотр.

Я решил эту проблему в Chrome, добавив transform: translate3d (0, 0, 0) в мой содержащий элемент.

@RahulRameshNarayan, это тоже сработало для меня. БЛАГОДАРЮ ВАС!
Любая идея, почему это решает проблему?

@jsyvino это проблема с перекрашиванием на хроме. translate3d обеспечивает лучшее аппаратное ускорение для этого элемента. Это также хитрость, которую люди используют для устранения мерцания прокручиваемых элементов на экранах с более высоким разрешением. вы можете прочитать об этом подробнее в следующих статьях.

Давайте поиграем с аппаратно-ускоренным CSS-
https://www.smashingmagazine.com/2012/06/play-with-hardware-accelerated-css/

Ускоренный рендеринг в Chrome
https://www.html5rocks.com/en/tutorials/speed/layers/

Упростите сложность окраски и уменьшите площади окраски
https://developers.google.com/web/fundamentals/performance/rendering/simplify-paint-complexity-and-reduce-paint-areas

transform3d (0,0,0) устраняет проблему со снимком экрана всей страницы, но имеет неправильное положение элемента.
DragIssue

Эта проблема возникает только в браузерах на основе хрома.
Были ли у кого-нибудь подобные проблемы и как вы их исправляли?

У меня также возникает эта проблема в Chrome 75 при использовании элемента ListItem в пользовательском интерфейсе материала в качестве перетаскиваемого узла. Я думаю, что элемент Ripple, содержащийся в overflow: hidden, является причиной несоответствия размеров.

Как упоминает @ makr11 , исправление @RahulRameshNarayan каким-то образом решает эту проблему (по-видимому, скрывая окружающие элементы от предварительного просмотра перетаскивания), у него все еще есть смещение позиции, которое было бы так, как если бы эти элементы были видимыми, поэтому оно все еще `` сломано '' ' по моему мнению.

Кто-нибудь понимает, в чем заключается основная проблема, возможно, на уровне генерации предварительного просмотра перетаскивания DOM или Native / HTML5? Хотелось бы заняться исправлением этого должным образом.

То же самое, я получаю эту проблему в Chrome 75, в Firefox все работает нормально ... Это нужно снова открыть!

Мой вариант использования специфичен, но, возможно, он кому-то поможет, я использую панель управления скоростью, которая использует response-dnd, а внутри виджетов (который является перетаскиваемым компонентом) отображается react-chart-js. Проблема возникла, когда chart-js был отрисован внутри виджета. Я просто установил, что, когда виджет перетаскивается, базовый div отображается внутри виджета, а не в компоненте chart-js.

Опять же, это довольно специфично, и я не эксперт в этом предмете, но, возможно, это кому-то поможет.

Проблема все еще воспроизводится (Chrome 75.0.3770.100), но решается путем добавления transform: translate3d (0) для включения element. Спасибо @RahulRameshNarayan

У меня тоже такая же проблема. Я попытался решить эту проблему, добавив transform: translate3d(0, 0, 0) , но возникла та же проблема, что и у https://github.com/react-dnd/react-dnd/issues/832#issuecomment -501292272

Проблема все еще присутствует в:
Safari 13.0.1
Хром 80

transform: translate3d(0, 0, 0) помогает, но может повлиять на другие стили / элементы вашего интерфейса.

@mismith Я

@dotbear К сожалению, нет, я просто живу с этим :(

Я согласен, что эту проблему не следует закрывать без официального решения, позволяющего избежать проблемы гигантского смещения.

Есть новости, относящиеся к этой проблеме?

Была ли эта страница полезной?
3 / 5 - 1 рейтинги