Я пытаюсь отобразить элемент-призрак вместо предварительного просмотра браузера по умолчанию для перетаскивания. Проблема заключается в том, что в файле firefox внутри элемента ghost не отображается при перетаскивании. Но если я его сброшу и снова перетаскиваю, изображение будет отображаться.
Итак, я думаю, что это может быть какая-то проблема с кешем. Но я не вижу, как я могу предварительно кэшировать изображение в этом случае.
Здесь код:
//HTML:
<div class="parent container">
<img class="element" src="http://www.thekrausemouse.com/wp-content/uploads/2016/03/Sample.jpg" draggable="true" />
</div>
//JS:
document.querySelector(".element").addEventListener("dragstart", function(e) {
var img = document.createElement("img");
var div = document.createElement('div');
div.style.width = '100px';
div.style.height = '100px';
div.style.position = 'fixed';
div.style.top = '-1000000px';
div.style.left = '-1000000px';
div.style.border = '2px solid red';
img.src = "http://www.thekrausemouse.com/wp-content/uploads/2016/03/Sample.jpg";
img.style.width = '100px';
img.style.height = '100px';
div.appendChild(img);
document.body.appendChild(div);
e.dataTransfer.setData('text/plain', 'test');
e.dataTransfer.setDragImage(div, 0, 0);
}, false);
Скрипка: https://jsfiddle.net/etseq5cg/5/
Шаги для воспроизведения:
1) открыть скрипт/запустить фрагмент
2) попробуйте перетащить образец изображения
Фактически: вы увидите пустой квадрат с красной рамкой
Ожидается: квадрат с изображением внутри.
Чтобы воспроизвести его снова, вам необходимо принудительно перезагрузить страницу (ctrl + f5). Вот почему я думаю, что это проблема с кешем.
Примечание. Я знаю, что я должен удалить элемент-призрак из DOM в обработчике dragend, но здесь это не важно.
Обновление:
1) фактический прецедент включает в себя просмотр с большим количеством изображений (~ 500), поэтому он не может предварительно кэшировать изображения через js.
2) Для тех, кто не смог воспроизвести проблему, вот скриншот: сначала вы видите предварительный просмотр после жесткой перезагрузки (ctrl + f5), а затем вторую попытку перетаскивания. Обратите внимание, что никакие HTTP-запросы не отображаются на вкладке сети в веб-инспекторе в обоих случаях.