2012-05-18 1 views
4

Firefox에서 이미지를 바탕 화면의 contenteditable 필드로 드래그하면 이미지가 base64로 강조 표시 커서 위치로 삽입됩니다.이미지를 Chrome의 contenteditable에 커서로 놓습니다.

JSFiddle : 이제 크롬에서 이미지가 브라우저에서 열립니다

http://jsfiddle.net/zupa/YrwsS/ (pageload, 같은 바이올린으로 시도).

HTML5 덕분에 드롭 이벤트를 잡아서 이미지를 잡을 수 있습니다. 그러나 브라우저의 기본 동작을 중지하면 사용자가 어디에 놓을 지 알지 못하는 것입니다.

해결 방법을 제안 할 수 있습니까?

답변

12

드롭 위치의 좌표를 얻을 수 있다면 (가능한 경우에 한함) 다음과 같이 수행 할 수 있습니다 (테스트 안됨).

데모 : http://jsfiddle.net/KZqNj/

코드 :

난 당신이 변수로 뷰포트 xy 및 변수 img로 떨어 이미지에 드롭 위치의 상대 좌표를 가지고 있으리라 믿고있어
var range; 

// Try the standards-based way first 
if (document.caretPositionFromPoint) { 
    var pos = document.caretPositionFromPoint(x, y); 
    range = document.createRange(); 
    range.setStart(pos.offsetNode, pos.offset); 
    range.collapse(); 
    range.insertNode(img); 
} 
// Next, the WebKit way 
else if (document.caretRangeFromPoint) { 
    range = document.caretRangeFromPoint(x, y); 
    range.insertNode(img); 
} 
// Finally, the IE way 
else if (document.body.createTextRange) { 
    range = document.body.createTextRange(); 
    range.moveToPoint(x, y); 
    var spanId = "temp_" + ("" + Math.random()).slice(2); 
    range.pasteHTML('<span id="' + spanId + '">&nbsp;</span>'); 
    var span = document.getElementById(spanId); 
    span.parentNode.replaceChild(img, span); 
} 

파이어 폭스 만 document.caretPositionFromPoint() 임에도 불구하고 최근의 WebKit, Opera 및 Mozilla 브라우저에서 작동합니다.

참고 :

+0

오 감사합니다 너무 많은 난 정말 그와 함께 붙어 있었다! 다른 사람들은 Chrome에서 오히려 입니다. document.caretRangeFromPoint (x, y) 과 'range.setStart (pos.startContainer, pos.startOffset) ' – zupa

+0

@zupa : 아, 맞아. 이것이 WebKit의 독점적 인 방법입니다. 나는 그들이 표준 기반의 것을 이미 구현했다고 생각했지만 잘못 될 수있다. 어쨌든 도와 줘서 기뻐. –

+0

걱정 마세요, 올바른 방향으로 저를 지적 했으니 정말 필요한 전부였습니다! – zupa