Π― ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ» Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² ΡΠ°ΠΌΠΎΠΌ Firefox. Π― ΠΌΠΎΠ³Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π΄Π°ΠΆΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ΅Π±Π½ΠΈΠΊΠ° ΠΏΠΎ ΡΠ°Ρ ΠΌΠ°ΡΠ°ΠΌ. ΠΠΎ ΡΡΡΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΠ°ΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Firefox Π½Π΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΡΡΠΈ, ΠΊΡΠΎΠΌΠ΅ dragstart.
Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ ΠΈ Π½Π°ΡΠ½ΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ, ΠΎΡΠΏΡΡΡΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΈ Π΄ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°. Π ΡΡΠ΅Π±Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅ ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΡΠ΅Π»ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ ΠΎΡΡΠ°Π½ΡΡΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ. ΠΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠ½ΠΎΠ²Π°, ΡΡΠΎΠ±Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΏΠΎΠ»Π½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΡΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ°Ρ , Π³Π΄Π΅ Π΄Π»Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅ΠΌΡ. Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΈ Ρ ΠΌΠΎΠ³Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π΅Π΅, ΠΎΡΠΏΡΡΠΊΠ°Ρ ΡΠ΅Π»ΡΠΎΠΊ, ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΠΎΡΠ»Π΅ Π½Π°ΡΠ°Π»Π° ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π²ΡΠ·Π²Π°Π»ΠΈ ΠΎΡΠΈΠ±ΠΊΡ, Firefox ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ, ΠΊΡΠΎΠΌΠ΅ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΡΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ Π²ΠΊΠ»Π°Π΄ΠΊΡ. ΠΠ½ΠΎΠ³Π΄Π° Ρ ΠΌΠΎΠ³Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΈΠ·-Π·Π° ΡΠ΅Π°ΠΊΡΠΈΠΈ Π½Π° Π½Π΅Π΅, ΠΈ ΡΠΎΠ³Π΄Π° Π²ΡΠ΅ ΠΌΠΎΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΏΡΠΎΡΠ²Π»ΡΡΡ ΡΠ΅ ΠΆΠ΅ ΡΠΈΠΌΠΏΡΠΎΠΌΡ.
ΠΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° Π²ΡΠΉΡΠΈ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠ»ΠΎΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΊΡΡΡΡ ΠΈ ΡΠ½ΠΎΠ²Π° ΠΎΡΠΊΡΡΡΡ Π±ΡΠ°ΡΠ·Π΅Ρ. ΠΠΎ-Π²ΡΠΎΡΡΡ , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ, Π³Π΄Π΅ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ response-dnd. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅, ΡΡΡΠ°Π½ΠΈΡΠ°, Π²ΡΠ·Π²Π°Π²ΡΠ°Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΡ, ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΠ΅ dragend. Π’Π°ΠΊ:
ΠΠΎΡ Π²ΠΈΠ΄Π΅ΠΎ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ ΡΡΠΎ ΡΡΡΠ°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π²ΡΡ Π²ΠΊΠ»Π°Π΄ΠΎΠΊ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΡ https://react-dnd.github.io/react-dnd/examples-chessboard-tutorial-app.html.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ macOS High Sierra 10.13.3 (17D102) Ρ Firefox 59.0.2 (64-ΡΠ°Π·ΡΡΠ΄Π½Π°Ρ Π²Π΅ΡΡΠΈΡ). ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ Π»ΡΠ±ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ> = 57. Π― Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π» ΠΎΡΠΈΠ±ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ response-dnd 2.6.0 ΠΈ 2.5.4.
Π― Π±ΡΠ» Π±Ρ ΡΠ°Π΄ ΠΏΠΎΠΌΠΎΡΡ Ρ Π»ΡΠ±ΡΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΎΠΉ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠ°ΠΌΠΎΠΌ Firefox.
Π― Π½Π°ΡΠ΅Π» Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠ·Π²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ response-dnd.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΡΠ»ΠΎΠΌΠ°Π»ΠΈ ΡΡΡΠ°Π½ΠΈΡΡ, Ρ ΠΌΠΎΠ³Ρ Π½Π°ΠΉΡΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ - ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΡΡ ΡΠΈΠ³ΡΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ response-dnd ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ Firefox. Π― Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠΈΠΌΠ΅Ρ response-dnd, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΠ»Π΅ΠΈΡΡ Π΅Π³ΠΎ, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π½Π°ΠΉΡΠΈ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ.
<html>
<head>
</head>
<body>
<p>
Click and drag the draggable item for longer than 1 second to see it dragging.
Click, drag, and release within 1 second to cause the error.
</p>
<div class="dropzone">
<div id="draggable" draggable="true" ondragstart="event.dataTransfer.setData('text/plain',null)">
This div is draggable
</div>
</div>
<div class="dropzone"></div>
<div class="dropzone"></div>
<div class="dropzone"></div>
<style>
#draggable {
width: 200px;
height: 20px;
text-align: center;
background: white;
}
.dropzone {
width: 200px;
height: 20px;
background: blueviolet;
margin-bottom: 10px;
padding: 10px;
}
</style>
<script>
var dragged;
/* events fired on the draggable target */
document.addEventListener("drag", function( event ) {
console.log('drag')
}, false);
function sleep(ms){
var waitTimeInMilliseconds = new Date().getTime() + ms;
while(new Date().getTime() < waitTimeInMilliseconds ) true;
}
document.addEventListener("dragstart", function( event ) {
// store a ref. on the dragged elem
dragged = event.target;
// make it half transparent
event.target.style.opacity = .5;
sleep(1000);
// You can use this approach instead of the sleep. The image is quite
// large so it's easy to release the mouse before the image is loaded
// var img = new Image();
// img.src = 'http://awakeningthegoddesswithin.net/wp/wp-content/uploads/2015/06/moon.jpg';
// event.dataTransfer.setDragImage(img, 10, 10);
}, false);
document.addEventListener("dragend", function( event ) {
console.log("dragend")
// reset the transparency
event.target.style.opacity = "";
}, false);
/* events fired on the drop targets */
document.addEventListener("dragover", function( event ) {
console.log("dragover")
// prevent default to allow drop
event.preventDefault();
}, false);
document.addEventListener("dragenter", function( event ) {
console.log("dragenter")
// highlight potential drop target when the draggable element enters it
if ( event.target.className == "dropzone" ) {
event.target.style.background = "purple";
}
}, false);
document.addEventListener("dragleave", function( event ) {
console.log("dragleave")
// reset background of potential drop target when the draggable element leaves it
if ( event.target.className == "dropzone" ) {
event.target.style.background = "";
}
}, false);
document.addEventListener("drop", function( event ) {
console.log("drop")
// prevent default action (open as link for some elements)
event.preventDefault();
// move dragged elem to the selected drop target
if ( event.target.className == "dropzone" ) {
event.target.style.background = "";
dragged.parentNode.removeChild( dragged );
event.target.appendChild( dragged );
}
}, false);
</script>
</body>
ΠΠΈΠ»Π΅Ρ ΠΎΡΠΊΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Mozilla Π·Π΄Π΅ΡΡ: https://bugzilla.mozilla.org/show_bug.cgi?id=1452131
Π― ΠΌΠΎΠ³Ρ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ :(
ΠΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΎ
Π Firefox Π²Π½Π΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΡΠΏΡΡΠ΅Π½ΠΎ Ρ Firefox 63 (Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΡΠΏΡΡΠΊ Π½Π° 2018-10-23)
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. ΠΠ½ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
ΠΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎ ΠΌΠ½ΠΎΠΉ ΠΊΠ°ΠΊ Π² Fedora 30, ΡΠ°ΠΊ ΠΈ Π² Windows 10 (Firefox 69). Π― ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² Π·Π°ΡΠ²ΠΊΡ Firefox. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΊ Π±ΠΈΠ»Π΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΌΠΎΠΈΠΌ Π³Π»Π°ΡΠΈΡ:
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡ, ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ° Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Β«Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅Β».
ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ Π² requestAnimationFrame () ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
Π§ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΠΎΡΠΈΠ±ΠΊΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅?
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ 19.09.2019:
ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ Π² Firefox 69 ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» ΡΠ΅Π³ΡΠ΅ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΡΠ½ΠΎΠ²Π° ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ, Ρ ΠΏΠΎΠ΄Π°Π» ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΊΠ΅Ρ: https://bugzilla.mozilla.org/show_bug.cgi?id=1582401
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΈΠ»Π΅Ρ ΠΎΡΠΊΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Mozilla Π·Π΄Π΅ΡΡ: https://bugzilla.mozilla.org/show_bug.cgi?id=1452131