2013-07-04 3 views
0

javascript에 사용자 정의 입력 필드를 구축하고 있습니다. (예 : 이 아닌 콘텐츠 편집 가능, 입력, 텍스트 영역 또는 iframe 사용).javascript의 사용자 정의 텍스트 편집기 레이아웃 엔진

    커서 위치에 대한
  • 마우스 클릭
  • 선택
  • 복사/붙여 넣기
    ...

:

나는 그것이 텍스트 영역 필드 등의 기본 옵션을 지원해야 이 시점에서 기본 입력 필드에 keypress 수신 대기합니다. 키를 누를 때 :
1. String.fromCharCode(event.keyCode) 키의 값이 tmp 범위로 전달됩니다.
2. 범위의 너비가 측정되고 배열에 저장됩니다.
3 캐럿 위치는 크기

이 크롬에 더 많거나 적은 작업의 배열을 사용하여 계산하지만, 인터넷 익스플로러 9를 사용하는 경우, 캐럿 위치 나갈 것으로 보인다.

단일 컨테이너가있는 컨테이너의 너비가 문자열에 삽입 될 때 해당 문자의 너비와 일치하지 않는 것 같습니다.

2 단계에서 문자의 크기가 계산되는 방식과 관련이 있습니다. 그러나이 문제에 대해 어떻게 생각하는지 알 수 없습니다.

누구든지이 문제에 경험이 있거나 일부 의사, 블로그 api와 같은 올바른 방향으로 나를 가리 키지 않습니까? - 좋을거야!

편집 : Here is a link to what i've got so far;

주의 : 크롬에서 작동하고, 즉,에서 언급 한 결함이 : 9와 10은 파이어 폭스 :)에 생겼습니다 을

+0

위치를 계산하는 것 외의 다른 방법으로 캐럿을 배치 할 수 있습니까? 왜 코드를 작성하지 그래? DOM은 어떻게 생겼습니까? – MaxArt

+0

더러운 코드에 대한 링크가 원래 게시물에 첨부되었습니다. ' 다른 어떤 방법으로 캐럿을 배치 할 수 있습니까? –

답변

0

당신은 당신이 얻을 것을 시도 할 수있는 필드의 각 문자의 위치를 ​​알고 싶다면 앞의 문자열의 폭 :

.ghost { 
    visibility: hidden; 
    position: absolute; 
    bottom: 0; 
    right: 0; 
} 

때마다 당신은 요소의 크기를 얻을 유의 사항 :

var text = $content.text(), 
    positions = [0], 
    $ghost = $("<span class='ghost'>").appendTo($content); 
for (var i = 1; i < text.length; i++) { 
    $ghost.text(text.substring(0, i)); 
    positions.push($ghost.width()); 
} 
$ghost.remove(); 

이 당신이 필요로하는 CSS입니다 문서 리플 로우가 발생합니다. 그것은 절대적으로 배치 된 요소에 대해서는 문제가되어서는 안됩니다.

+0

이 질문에 답할 수 없습니다. 내가 찾고있는 것은 ie의 문자 크기를 결정하는 방법입니다. 당신의 솔루션을 찾으러 갈 경우 마우스 클릭에 대한 위치를 알 수 없으므로 마우스 조작을 할 수 없습니다. –

+0

@TauSand 원하는 내용을 자세하게 게시하지 않으면 완벽한 답변을 기대하지 마십시오. 부동 소수점 정밀도 크기의 반올림으로 인해 단일 문자를 정확하게 측정 할 수는 없습니다.사용자 상호 작용은 복제하기가 쉽지 않습니다. 그래서 웹 개발자는 ''필드 또는 대부분 contenteditable 요소를 사용합니다. – MaxArt

+0

그래요, 당신이 부동 소수점으로 갈 곳을 봅니다. 나는 여러개의 스크린을 추가하려고 시도했는데 4 개의 줄이 연속적으로 하나의 픽셀보다 하나의 픽셀을 덜 필요로한다는 것을 발견했다. 크롬에서는 크기가 정확합니다. 아마도 각 char에 대해 int px를 가졌기 때문일 것입니다. 또는 아마도 내가 사용하는 크기가 운이 좋았 기 때문일 수도 있습니다. 글꼴의 너비를 강제로 정수로 설정할 수 있습니까? 아마도 CSS를 사용하여? –

관련 문제