Firefox μ체μμ λ¬Έμ λ₯Ό μΌμΌν€λ κ²μΌλ‘ 보μ΄λ λ§€μ° λΆμΎν λ²κ·Έλ₯Ό λ°κ²¬νμ΅λλ€. μ²΄μ€ νν λ¦¬μΌ μμ μμλμ΄ μ€λ₯λ₯Ό μ¬ν ν μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ Firefoxκ° dragstartλ₯Ό μ μΈν μ΄λ€ λ§μ°μ€ μ΄λ²€νΈλ 보λ΄μ§ μλ μνλ‘ λ€μ΄κ° μ μμ΅λλ€.
λλκ·Έ μμ€λ₯Ό ν΄λ¦νκ³ λλκ·Έλ₯Ό μμνκ³ λ―Έλ¦¬λ³΄κΈ°κ° λνλκΈ° μ μ λ§μ°μ€λ₯Ό λμ΅λλ€. μμ΅μ μμ μμ ν λ² μννλ©΄ λκΈ° λμμ΄ κ°μ‘° νμλ©λλ€. λλ‘λ μ 체 λ²κ·Έλ₯Ό νΈλ¦¬κ±°νκΈ° μν΄ μ¦μ λ€μ μνν΄μΌν©λλ€.
λ―Έλ¦¬λ³΄κΈ°κ° νμλλ λ° μκ°μ΄ 걸리λ λλ¦° νμ΄μ§μμμ΄ μμ μ μννλ κ²μ΄ ν¨μ¬ μ½μ΅λλ€. λ§€μ° λλ¦° νμ΄μ§κ° μλλ° λλκ·Έλ₯Ό μμν ν 1 μ΄λΌλ ν΄λ¦μ ν΄μ νμ¬ μ¬ν ν μ μμ΅λλ€.
λ²κ·Έλ₯Ό νΈλ¦¬κ±°νλ©΄ Firefoxλ κ±°μ λͺ¨λ νμ dragstart μ΄μΈμ λλκ·Έ μ΄λ²€νΈ μ μ‘μ μ€μ§νλ κ²μ²λΌ 보μ λλ€. λλ‘λ ν νμ΄μ§μμ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμΌλ©° λ€λ₯Έ λͺ¨λ νμμ λμΌν μ¦μμ λν λ΄κΈ° μμν©λλ€.
μ΄ κ³ μ₯ μνμμ λ²μ΄λλ λ°©λ²μ λ κ°μ§λΏμ λλ€. λ¨Όμ λΈλΌμ°μ λ₯Ό λ«μλ€κ° λ€μ μ΄ μ μμ΅λλ€. λμ§Έ, react-dndκ° μ¬μ ν μλνλ νμ΄μ§μμ λλκ·Έλ₯Ό μμν μ μμ΅λλ€. μ΄ μμ μ μννλ©΄ μ€λ¨μ μ λ° ν νμ΄μ§κ° dragend μ΄λ²€νΈλ₯Ό μμ ν©λλ€. κ·Έλμ:
λ€μμ https://react-dnd.github.io/react-dnd/examples-chessboard-tutorial-app.htmlμ 보μ¬μ£Όλ λ κ°μ νμ μ¬μ©νμ¬μ΄ μ΄μν λμμ 보μ¬μ£Όλ λΉλμ€
Firefox 59.0.2 (64 λΉνΈ)κ° μ€μΉλ macOS High Sierra 10.13.3 (17D102)μ μ¬μ©νκ³ μμ΅λλ€. 57 μ΄μμ λͺ¨λ λ²μ μμ λ°μνλ κ² κ°μ΅λλ€. react-dnd 2.6.0 λ° 2.5.4λ‘ μ€λ₯λ₯Ό μ¬ννμ΅λλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκ±°λ Firefox μ체μ λ¬Έμ κ°μλ κ²½μ° ν΄κ²° λ°©λ²μ μ°ΎκΈ° μν΄ ν μ€νΈ λλ λλ²κΉ μ λμμ λλ¦¬κ² μ΅λλ€.
react-dndλ₯Ό μ¬μ©νμ§ μλ λ²κ·Έλ₯Ό μ λ°νλ λ μ’μ λ°©λ²μ μ°Ύμμ΅λλ€.
νμ΄μ§λ₯Ό κΉ¨κ³ λλ©΄ λ¬Έμ λ₯Ό ν΄κ²°ν μμλ μ μΌν λ°©λ²μ react-dnd μμ μμ μ²΄μ€ μ‘°κ°μ μ΄λνκ±°λ Firefoxλ₯Ό λ€μ μμνλ κ²μ λλ€. react-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 ()μμ λ€μ 그리기λ₯Ό λννλ©΄ μμλλ‘ μλν©λλ€.
λΌμ΄λΈλ¬λ¦¬μ λ²κ·Έλ₯Ό ν΄κ²°νκΈ° μν΄ ν μμλ μΌμ΄ μμ΅λκΉ?
2019/09/19 μμ :
Firefox 69μμμ΄ λ²κ·Έλ₯Ό λ€μ μκ°νλ νκ·κ°μλ κ² κ°μ΅λλ€. λλ κ·Έλ€κ³Ό ν¨κ» μ ν°μΌμ μ μΆνμ΅λλ€ : https://bugzilla.mozilla.org/show_bug.cgi?id=1582401
κ°μ₯ μ μ©ν λκΈ
Mozillaλ‘ μ΄λ¦° ν°μΌ : https://bugzilla.mozilla.org/show_bug.cgi?id=1452131