2011-12-17 1 views
1

전체 양식으로 끌어서 놓기 (즉석 업로드하지 않음)로 재생하고있었습니다. 나는 작은 부분이 특정 필드 세트를 파일로 덮어 씌울 때 강조 할 예정 이었지만. dragoverdragenter 이벤트 (및 dragleave 등)를 입력하십시오.dragenter/dragover 이벤트에 Event.fromElement가 있습니까?

작은 부분이 아닙니다. The Fiddle : http://jsfiddle.net/rudiedirkx/epp74/

시도해보기 : 필드 세트 위로 드래그하여 조금 이동하십시오. 첫 번째 over은 필드 세트의 dragenter 이벤트를 트리거합니다 (필드 세트는 노란색 임). 그 이후 (동일한 필드 세트 내에서) 주변을 돌아 다니면 dragenterdragleave (필드 세트가 더 이상 노란색)이 나쁘다. (그들은 단지 한 번 트리거) mouseentermouseleave을 : 나는 IE는 오래 전에 mouseovermouseout 위해 만들어진 것을 확인하고 싶었 이유

입니다. 드래그 이벤트의 경우 똑같은 것이 적용됩니다. 동일한 방식으로 한 번만 트리거해야합니다. JS 라이브러리는 Event.fromElementEvent.toElement을 사용하여 이러한 IE 이벤트를 스푸핑 (및 이벤트 소유자 요소와 비교)합니다. 자세한 내용은 jQuery 또는 Mootools 소스를 참조하십시오.

드래그 이벤트에 대해 동일한 내용을 사용하려면 동일한 fromElementtoElement이 필요합니다. 바이올린에서 볼 수는 있지만, 찾을 수는 없습니다.

누구인지 알고 계십니까? 왜 그들이 사용할 수없는거야?

것은 내가 dragenter 이벤트에 fromElement을 가지고 있지 않는, 주로 크롬을 사용하고 있지만, dragleave 이벤트에 toElement을 가지고있다. 파이어 폭스에서는 약간 더 나 빠졌다.

모든 아이디어는 대단히 환영합니다.

편집
a little more debugging 후 나는 크롬의 toElementdragleave에서 항상 올바르지 않은 것을 발견했습니다. this보다 결코 크지는 않지만 때로는 다음과 같아야합니다. 필드 집합 (this)을 상위 형식 (toElement)으로두면 다음과 같아야합니다. 그렇게 할 때 thistoElement이 필드 집합입니다 (올바르지 않습니까?).

편집 해결 방법 : 이벤트에 요소를 무시하고 이벤트가 마우스 아래에있는 요소를 찾기 위해 좌표를 사용 http://jsfiddle.net/rudiedirkx/Lwd3md71/ :
나는 이런 일에 끝났다. 애니메이션 프레임 당 최대 한 번 트리거하려면 requestAnimationframe을 사용하고 결과는 31-59fps입니다.

+0

질문을 건너 뛰었지만 이벤트의 srcElement 속성을 찾고 있습니까? – aaaidan

+0

아니요. 올바른 toElement를 찾고 있습니다. 필드 세트를 벗어나는 드래그를 감지하려면 toElement가 필드 세트 외부에 있어야합니다 (예 :

또는 ). 하지만 항상 비어 있습니다 ... JS libs에 의해 생성 된 비 네이티브 mouseenter 및 mouseleave 이벤트는 mouseover와 mouseout에서 mouseenter와 mouseleave를 생성하기 위해 이것을 사용합니다. 나는 dragenter와 dragleave에도 똑같이하려고 노력했다. 비록 toElement 및/또는 fromElement가 필요합니다. 기묘한. 가능한 해결책 (?)은 부모 요소에 리스너를 부착하는 것입니다 (심지어는 ) ... – Rudie

+0

아, 알았습니다. 그런 갈매기가 된 것을 유감스럽게 생각합니다! – aaaidan

답변

3

Firefox는 relatedTarget 이벤트 속성을 제공하지만 Chrome과 Safari는 제공하지 않습니다. 슬프게도,이 문제는이 Chrome bug과이 Webkit bug으로 몇 년 동안 공개되었습니다.

+0

존재하지만 항상 비어 있습니다. 파이어 폭스는 동일했다. 그들은 12 월 11 일 이후로 변경했을 수도 있습니다. – Rudie

+0

네 말이 맞아. Firefox에는'toElement' 또는'fromElement'이 없지만 작동하는'relatedTarget'을 가지고 있습니다. Chrome은 모두 작동하며 작동하지 않습니다. http://jsfiddle.net/rudiedirkx/epp74/21/ – Rudie

+0

당신이 아직도 관심이있는 경우, 이것은 내가 결국에 끝난 것입니다 : http://jsfiddle.net/rudiedirkx/Lwd3md71/ – Rudie

1

"dragleave"이벤트에 대해 relatedTarget을 위조하는 방법이 있습니다.이 이벤트는 dragenter가 항상 dragenter 앞에 있기 때문에 후자에서 설정된 변수는 dragenter 이벤트에서 변수를 설정하는 것입니다. - 혼자 dragleave 당신을 말할 충분하다 즉

var relatedTarget = null; 

document.addEventListener('dragenter', function(e) 
{ 
    relatedTarget = e.target; 

}, false); 
document.addEventListener('dragleave', function(e) 
{ 
    console.log('target = ' + e.target + ' relatedTarget = ' + relatedTarget); 

}, false); 

그것은 둥근 다른 방법을 작동하지 않습니다,하지만 당신이 정말로 당신이이 방법을 사용하면 다른 용도로의 dragEnter 필요가 없습니다 이전에 가능 마우스가 특정 요소로 이동하거나 완전히 이동하면

+0

나는, JS lib 안에'relatedTarget'을 가짜로 만들었습니다. 그것은 틀린 것처럼 들리지만 작동 할 수도 있습니다. Chrome은 일방적으로 작동하기 때문에 다른 방식으로 만 작동해야합니다. (가능한 방법이되기를 바랍니다.) 알려 드리겠습니다. 감사. – Rudie

+0

JS lib가 이것을 일반화하는 방법을 잘 모르겠지만 사용자 정의 코드에서 완벽하게 작동합니다. http://webblocks.nl/tests/dragenterleave.html Firefox의 작업 방법을 사용하는 것보다 훨씬 빠릅니다 =) 감사합니다! – Rudie

+0

그것은 약간의 해킹 예이지만 트릭을 않습니다. 내 자신의 구현에서 나는 현재 끌고있는 요소의 세부 사항을 가진 "selection"객체를 유지한다. (아무 것도 끌지 않을 때 null이다.) 이 객체는 또한 이와 같은 방식으로 구현 된 .related 속성과 그로부터 추론되는 .droptarget 속성을 가진다. droptarget이 변경 될 때마다 dragleave를 사용하여 드래그 고스트를 업데이트합니다 (예 : dropEffect 및 effectAllowed가 커서에 영향을 미치지 않으므로 유효하거나 유효하지 않은 아이콘을 표시). – brothercake

관련 문제