2010-04-30 6 views
2

은 내가 SVG에 포함 된 필드에 텍스트 입력을 애니메이션 SMIL를 사용하는 것을 시도하고있다. 나는 매일 밤 크롬과 SMIL 활성화 파이어 폭스에서 다음 코드를 시도했지만 아무 효과가 없습니다 :자바 스크립트에서 SMIL 타이머에 액세스 할 수 있습니까?

<svg xmlns="http://www.w3.org/2000/svg" 
    xmlns:html="http://www.w3.org/1999/xhtml"> 
    <foreignObject> 
    <html:input type="text" value=""> 
     <set attributeName="value" to="Hello World" 
      begin="0" dur="10s" fill="freeze" /> 
    </html:input> 
    </foreignObject> 
</svg> 

텍스트 필드가 나타납니다,하지만 비어 있습니다. 그래서 beginEvent를 등록하고 대체 작업을 수동으로 수행 할 것이라고 생각했습니다. 이벤트를 테스트하려면, 내가 추가 :

<rect id="rect" x="0" y="0" width="10" height="10"> 
    <animate id="dx" attributeName="x" attributeType="XML" 
      onbegin="console.log('onbegin')" 
      begin="0s" dur="1s" fill="freeze" from="0" to="-10" /> 
</rect> 

뿐만 아니라 event model에서 의미가 만든 자바 스크립트 :

window.addEventListener('load', function() { 
    function listen(id) { 
    var elem = document.getElementById(id) 
    elem.addEventListener('beginEvent', function() { 
     console.log('begin ' + id) 
    }, false) 
    elem.addEventListener('endEvent', function() { 
     console.log('end ' + id) 
    }, false) 
    } 
    listen('rect') 
    listen('dx') 
}) 

그러나 rect 또는 다른 브라우저에서 animate 중 하나에 발사 어떤 이벤트가 없습니다. 다음 논리적 단계는 애니메이션 (ALA. FakeSmile)을 시뮬레이션 할 것 같다,하지만 난 가능한 모든 경우 브라우저의 애니메이션 타이머를 사용하고 싶습니다.

+0

나는 사건이 사파리와 파이어 폭스에서 전혀 작동하지 않습니다 생각합니다. 그들은 Opera에서 저를 위해 일했습니다. – Kornel

답변

2

다시 당신의 <set attributeName="value"> - 당신은 그들이 SVG에 포함 된 HTML 요소를 경우에도, HTML 요소의 속성에 애니메이션을 SMIL을 사용할 수 없습니다. (멋진 미래의 확장 기능이지만, 그 동작은 정의되지 않았으므로이 시점에서 조금 실험적입니다.) Firefox는 아직 애니메이션 이벤트를 발생시키지 않습니다. - 아직 구현되지 않았습니다.

[1] SVG 사양은 명시 적으로 어떤 속성과 속성이 애니메이션 가능하고 어떤 속성이 아닌지를 정의합니다. (예 : "애니메이션"을 참조 w3.org/TR/SVG11/text.html의 모든 속성 아래의 필드)가 불분명하므로, 그것은 다른 언어 (예 : HTML) 하지 정의 않으며, (HTML은 애니메이션 구성 요소가 없기 때문에) HTML을 수행하는 HTML 속성은 처음부터 애니메이션화 될 수 있습니다.

0

텍스트 필드가 나타나지만 foreignObject 요소의 너비와 높이 특성이 기술적으로 부족하면 브라우저에서 SVG 사양을 따르지 않습니다. 왜냐하면 이러한 속성은 SVG 내부에서 외부 개체를 볼 수 있어야하기 때문입니다.

또한 SVG의 애니메이션 요소는 SVG 요소에 사용할 수 있지만이 마크 업의 다른 유형에 적용하는 방법/경우에 SVG 사양은 정의하지 않습니다.

애니메이션 타이머를 사용하려는 경우 짧은 반복 애니메이션을 만들 수 있습니다 (예 : 표시되지 않는 임의의 속성을 애니메이션으로 만드는 animate 요소). repeatEvent 이벤트를 트리거로 사용하여 html 요소를 수정하는 javascript 함수.