SVG 콘텐츠는 SVG 언어의 다음 기능을 활용하여 상호작용적(즉, 사용자 주도 이벤트에 반응하는)으로 만들 수 있습니다:
이 장에서는 다음 내용을 설명합니다:
관련 정보는 다른 장에서도 찾을 수 있습니다:
SVG 2 요구사항: | 앵커 변경 이벤트 지원. |
---|---|
결정: | SVG 2는 HTML 문서 전체 이벤트(hashchange 포함)를 SVG 문서에 적합한 경우 적용하는 것을 고려할 것임. |
목적: | 작성자가 HTML 본문 또는 루트 요소에서 사용하는 동일한 이벤트 리스너 속성을 루트 SVG 요소에서도 사용할 수 있도록 함. |
담당자: | Cameron (ACTION-3278) |
SVG 2 요구사항: | 적절한 인터페이스에 이벤트 리스너 속성 보유. |
---|---|
결정: | SVG 2는 모든 이벤트 리스너 속성을 HTML과 유사하게 Element로 이동할 것임. |
목적: | HTML과 일치시키기 위함. |
담당자: | Cameron (ACTION-3283) |
SVG 2 요구사항: | 이벤트 핸들러에서 event의 별칭으로 evt 도입. |
---|---|
결정: | ISSUE-2176을 evt를 event의 별칭으로 이벤트 핸들러에 도입하는 방식으로 해결하기로 결정함. |
목적: | HTML과 일치시키기 위함. |
담당자: | Cameron (ACTION-3093) |
SVG 2 요구사항: | 드래그 앤 드롭 기능 지원. |
---|---|
결정: | SVG 2는 드래그 앤 드롭 기능을 요구할 수 있으며, HTML5의 기능을 조사할 것임. |
목적: | SVG에서 더 쉬운 드래그 앤 드롭을 가능하게 하고, HTML과 일치시키기 위함. |
담당자: | Erik (ACTION-3328) |
다음 SVG의 측면은 이벤트의 영향을 받습니다:
SVG 1.1에서 정의된 SVGLoad, SVGError 등 여러 이벤트는 UI EVENTS와 HTML에서 정의된 동일한 이름의 이벤트로 대체되었습니다.
SVG에서 이벤트를 사용하는 더 현대적인 예시(예: 터치 이벤트, 터치 이벤트 명세 참조)가 필요합니다. 디바이스 방향 이벤트도 참고할 만합니다.
다음 표는 이 명세에서 정의하거나, 기존 명세보다 추가 요구사항 또는 명확한 설명이 있는 이벤트를 나열합니다.
첫 번째 열의 이벤트 이름은 SVG의 애니메이션 요소에서 애니메이션 시작/종료 이벤트 정의에 사용합니다. 두 번째 열의 UI 이벤트 이름은 DOM 이벤트 리스너 ([DOM], 3.6절) 정의에 사용합니다.
표에 없는 HTML 또는 UI 이벤트 등은 해당 이벤트 타입 이름을 SVG의 애니메이션 요소에서 사용합니다.
표에서 특정 이벤트 타입의 이벤트가 버블링되거나 취소 가능한지에 대한 요구사항은 사용자 에이전트가 생성/디스패치 하는 이벤트에만 적용됩니다.
Document 인터페이스의
createEvent
메서드를 사용해 스크립트에서 생성된 해당 타입의 이벤트는
initEvent 메서드로 버블링 및 취소 가능 여부를 지정할 수 있습니다.
이벤트 이름 및 설명 | UI 이벤트 이름 | 이벤트 범주 | 이벤트 속성 이름 |
---|---|---|---|
load load 이벤트는 구조적으로 외부 요소와 Window에만 디스패치되며, 해당 외부 리소스가 모두 로드 완료될 때 발생합니다. 관련성과 Window와의 관계로 인해, ‘svg’ 요소의 load 이벤트는 문서 내 모든 리소스가 완전히 로드된 경우에만 디스패치됩니다. 구조적으로 외부 요소의 load 이벤트와 error 이벤트는 상호 배타적이며, 해당 요소를 처리할 때 둘 중 하나만 디스패치되어야 합니다. load 이벤트는 버블링되지 않으며 취소할 수 없습니다. 이전 SVG 명세에서는 load 이벤트가 SVGLoad라고 불렸으며, 요소를 파싱한 직후 관련 리소스가 완전히 로드되기 전에 바로 디스패치될 수 있었습니다. |
(동일) | 없음 | onload |
unload 최상위 svg 요소에만 해당됩니다. unload 이벤트는 DOM 구현이 문서(window 또는 frame)를 제거할 때 발생합니다. unload 이벤트는 버블링되지 않으며 취소할 수 없습니다. |
(동일) | 없음 | onunload |
error error 이벤트는 구조적으로 외부 요소가 정상적으로 로드되지 않거나, 스크립트 실행 중 오류가 발생할 때 발생합니다. error 이벤트는 버블링되지만 취소할 수 없습니다. |
(동일) | 없음 | onerror |
beginEvent 애니메이션 요소가 시작될 때 발생합니다. 자세한 내용은 SMIL Animation 명세의 TimeEvent 인터페이스 설명을 참조하세요. |
없음 | 없음 | onbegin |
endEvent 애니메이션 요소가 종료될 때 발생합니다. 자세한 내용은 SMIL Animation 명세의 TimeEvent 인터페이스 설명을 참조하세요. |
없음 | 없음 | onend |
repeatEvent 애니메이션 요소가 반복될 때 발생합니다. 첫 번째 반복 이후 매번 발생합니다. 자세한 내용은 SMIL Animation 명세의 TimeEvent 인터페이스 설명을 참조하세요. |
없음 | 없음 | onrepeat |
UI 이벤트용 이벤트 리스너에 전달되는 파라미터의 자세한 내용은 ([uievents]) 및 ([DOM]) 명세에서 확인할 수 있습니다. 다른 이벤트 타입의 경우, 이벤트 리스너에 전달되는 파라미터는 본 명세의 다른 곳에서 설명합니다.
마찬가지로 event-value 타이밍 지정자는 애니메이션 요소의 ‘begin’ 및 ‘end’ 속성에서 사용되며, 해당 요소에 디스패치된 "버블링" 및 "타겟에서" 단계의 이벤트에만 구체적인 시간으로 해석됩니다.
SVG DOM은 UI Events에서 정의된 모든 인터페이스와 이벤트 타입, 그리고 클립보드 API 및 이벤트에서 정의된 이벤트 타입을 모두 지원합니다 ([uievents], [clipboard-apis]).
SVG 네임스페이스 내 모든 요소는 이러한 이벤트에 대한 이벤트 속성을 지원합니다. 매칭되는 IDL 프로퍼티는 기본 SVGElement 인터페이스에 GlobalEventHandlers와 DocumentAndElementEventHandlers 믹스인으로 각각 포함됩니다.
SVG DOM 지원의 일부로, 적합한 SVG 소프트웨어는 관련 이벤트가 소프트웨어에서 발생할 수 있는 경우
해당 명세에서 정의된 모든(사용 중단되지 않고, 폐기되지 않은) 이벤트 타입을 지원해야 합니다.
사용자 상호작용을 지원하지 않는 SVG 소프트웨어도
상호작용 없이 발생 가능한 load
및 error
이벤트와 같은 이벤트는 반드시 지원해야 합니다.
SVG 애니메이션 요소 (SVG Animations Level 2 명세에서 정의됨)는 추가적인 이벤트와 이벤트 속성을 지원합니다. 다음 이벤트 타입들은 애니메이션의 상태 변화에 따라 트리거됩니다.
이러한 애니메이션 이벤트에 대한 이벤트 속성은 다른 요소에는 영향을 주지 않습니다.
상호작용을 지원하는 사용자 에이전트에서는 작성자가 SVG 문서를 사용자 인터페이스 이벤트에 반응하도록 정의하는 것이 일반적입니다. 가능한 사용자 이벤트 집합에는 포인터 이벤트, 키보드 이벤트, 문서 이벤트 등이 있습니다.
사용자 인터페이스(UI) 이벤트에 반응하여, 작성자는 애니메이션을 시작하거나, 다른 웹 페이지로 하이퍼링크를 수행하거나, 문서의 일부(예: 포인터 아래에 있는 그래픽 요소의 색상 변경)를 강조하거나, "롤오버"(예: 이전에 숨겨져 있던 그래픽 요소를 포인터 근처에 나타나게 함)를 시작하거나, 원격 데이터베이스와 통신하는 스크립트를 실행할 수 있습니다.
사용자 동작에 의해 포인터 장치에서 발생하는 사용자 인터페이스 이벤트를 포인터 이벤트라고 합니다.
많은 시스템이 마우스나 트랙볼과 같은 포인터 장치를 지원합니다. 마우스를 사용하는 시스템에서는 포인터 이벤트가 마우스 이동, 클릭 등의 동작으로 구성됩니다. 다른 포인터 장치가 있는 시스템에서는 포인팅 장치가 일반적으로 마우스 클릭과 같은 동작을 제공하는 방식으로 마우스의 동작을 에뮬레이트합니다.
각 포인터 이벤트마다 SVG 사용자 에이전트는 해당 포인터 이벤트의 타겟 요소를 결정합니다. 타겟 요소는 이벤트 시점에 포인터 아래에 있는 최상위 그래픽 요소입니다. (요소의 관련 그래픽 콘텐츠가 포인터 아래에 있는지, 그리고 어떤 상황에서 해당 그래픽 요소가 포인터 이벤트의 타겟이 되는지에 대한 설명은 pointer-events 속성을 참조하세요.) 요소가 표시되지 않는 경우(즉, 해당 요소 또는 상위 요소의 display 속성이 none인 경우), 해당 요소는 포인터 이벤트의 타겟이 될 수 없습니다.
포인터 이벤트의 타겟 요소가 존재하면, 해당 이벤트는 일반적인 이벤트 흐름에 따라 그 요소로 디스패치됩니다 ([uievents], 3.1절). ‘use’ 요소나 스크립트로 생성된 쉐도우 트리에서는 이벤트 디스패치 [dom] 규칙을 따라야 합니다.
포인터 이벤트의 타겟 요소가 없다면, 이벤트는 무시됩니다.
포인터 장치와 요소 또는 영역간의 상호작용에는 두 가지 측면이 있습니다:
포인터 이벤트가 히트 테스트에서 긍정 결과를 얻는지 여부는 포인터 위치, 그래픽 요소의 크기와 모양, 그리고 요소의 pointer-events 속성의 계산된 값에 따라 결정됩니다. 아래의 pointer-events 속성 정의에서 해당 그래픽 요소 타입별로 포인터 이벤트에 민감한 정확한 영역을 설명합니다.
‘svg’ 요소는 그래픽 요소가 아니며, 적합한 SVG 독립 파일에서 최상위 svg 요소는 포인터 이벤트의 타겟이 될 수 없습니다. 하지만 이벤트가 이 요소까지 버블링될 수는 있습니다. 포인터 이벤트가 히트 테스트에서 긍정 결과를 얻지 못하면, 사용자 에이전트 특화 윈도우 동작(예: 컨텍스트 메뉴 표시, SVG 문서 조각 확대/이동 컨트롤 등)이 실행될 수 있습니다.
이 명세는 다른 문서에 참조 또는 포함된 SVG 이미지의 최상위 svg 요소에 대한 포인터 이벤트 동작을 정의하지 않습니다. 예를 들어, HTML 문서에 포함된 최상위 svg 요소가 마우스 클릭 이벤트를 가로채는지 등은 향후 명세에서 정의될 수 있지만, 현행 표준에서는 구현에 따라 달라집니다.
사용자 인터페이스 이벤트의 타겟이 된 요소는, 요소의 타입이나 명시적으로 연관된 상호작용(스크립트 이벤트 리스너, CSS 의사 클래스 매칭, 이벤트 기반 타이밍의 선언적 애니메이션 등)에 따라 특정 상호작용 동작을 가질 수 있습니다. 타겟 요소에 대한 사용자 인터페이스 이벤트 처리 알고리즘 및 순서는, DOM 이벤트 디스패치 이후 다음과 같습니다:
preventDefault()
DOM 메서드를 호출하면,
해당 요소에 대한 추가 처리 없이 이벤트는 이벤트 디스패치 및 DOM 이벤트 흐름 처리를
따릅니다 ([uievents]);:hover
, :active
, :focus
등 [CSS2] 5.11절 참조),
해당 클래스의 속성이 적용됩니다;
다양한 상황에서 작성자는 특정 그래픽 요소가 포인터 이벤트의 타겟이 되는 조건을 제어하고 싶을 수 있습니다. 예를 들어, 작성자는 특정 요소가 도형의 외곽선(스트로크) 위에 포인터가 있을 때만 포인터 이벤트를 받도록 하거나, 어떤 요소는 모든 상황에서 포인터 이벤트를 무시하여 그 아래의 그래픽 요소가 포인터 이벤트의 타겟이 되도록 할 수 있습니다.
마스킹과 클리핑은 pointer-events와 관련하여 효과가 다릅니다. 클리핑 경로는 기하학적 경계로, 특정 지점이 경계 안에 있거나 밖에 있는 것이 명확하게 구분됩니다. 따라서 클리핑된 요소의 렌더링된 영역에서는 포인터 이벤트를 정상적으로 감지해야 하며, 클리핑 영역에서는 감지하지 않아야 합니다. (클리핑 경로 정의 참고) 반면 마스크는 이진 전환이 아니라 픽셀 단위 연산이며, 완전 투명과 거의 투명 사이의 동작이 임의적일 수 있습니다. 그래서 마스크가 적용된 요소에서는 마스크의 불투명도가 0인 영역에서도 포인터 이벤트를 반드시 감지해야 합니다. 마스크의 투명 부분에서 아래 요소로 포인터 이벤트를 넘기고 싶다면 마스킹과 클리핑을 조합해서 사용해야 합니다.
filter 속성은 포인터 이벤트 처리에 아무런 영향을 미치지 않으며, 이 맥락에서는 filter가 지정되지 않은 것처럼 취급해야 합니다.
예를 들어, stroke가 red인(즉, 외곽선이 빨간색) 원과 fill이 none인(즉, 내부가 채워지지 않음) 원이 fill이 blue인 사각형 위에 바로 렌더링되어 있다고 가정합니다. 작성자는 원의 외곽선 위에 포인터가 있을 때만 원이 포인터 이벤트의 타겟이 되기를 원할 수 있습니다. 원의 내부에 포인터가 있을 때는 아래 사각형이 포인터 이벤트의 타겟이 되길 원할 수 있습니다.
pointer-events 속성은 특정 요소가 어떤 상황에서 포인터 이벤트의 타겟이 될 수 있는지 지정합니다. 이는 다음 처리에 영향을 줍니다:
이름: | pointer-events |
---|---|
값: | bounding-box | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | none |
초기값: | visiblePainted |
적용 대상: | 컨테이너 요소, 그래픽 요소, ‘use’ |
상속: | 예 |
백분율: | N/A |
미디어: | 시각적 |
계산된 값: | 지정한 그대로 |
애니메이션 가능: | 예 |
텍스트 요소의 경우, 히트 테스트는 문자 셀 기준으로 수행됩니다:
래스터 이미지(raster images)의 경우, 히트 테스트는 전체 이미지 기준(즉, 이미지의 사각형 영역이 이벤트를 받을지 결정) 또는 픽셀별 기준(즉, 포인터 아래 픽셀의 알파 값이 이벤트 수신 여부 결정)으로 수행됩니다:
래스터 이미지의 경우, opacity, fill-opacity, stroke-opacity, fill, stroke 값은 이벤트 처리에 영향을 주지 않습니다.
SVG 2 요구사항: | 상세 레벨 제어 지원. |
---|---|
결정: | SVG 2에서 상세 레벨 제어(Level of Detail control)를 지원함. |
목적: | 확대 수준에 따라 요소의 표시를 제어(예: 지도 등에서 유용). |
담당자: | Doug (작업 없음) |
비고: | SVG 1.2 Tiny의 타일 및 레이어링 모듈 참고. |
확대(확대/축소)는 SVG 문서 조각에 대해 전체적으로 균일하게 적용되는 변환을 나타내며, 확대 작업은 모든 그래픽 요소를 동일한 비율로 스케일링합니다. 확대 작업은 SVG 문서 조각의 최상위 수준(즉, 최상위 svg 요소 외부)에 보조적인 스케일 및 변환이 추가된 것과 같은 효과를 가집니다.
이동(pan)은 사용자 인터페이스 동작에 따라 SVG 문서 조각에 적용되는 변환(즉, 평행 이동)을 나타냅니다.
상호작용이 가능한 사용자 환경에서 동작하는 SVG 사용자 에이전트는 확대 및 이동 기능을 반드시 지원해야 합니다.
SVG 문서 조각의 최상위 svg 요소에는 ‘zoomAndPan’ 속성이 있으며, 이 속성은 disable과 magnify 값을 가질 수 있고, 기본값은 magnify입니다.
zoomAndPan 속성은 위험에 처해 있으며, 알려진 구현이 없고 구현될 가능성이 낮습니다. Github issue #56 참고.
이름 | 값 | 초기값 | 애니메이션 가능 |
---|---|---|---|
zoomAndPan | [ disable | magnify ] | disable | 아니오 |
disable이면, 사용자 에이전트는 모든 확대 및 이동 컨트롤을 비활성화하고, 해당 문서 조각에서 사용자가 확대 또는 이동을 할 수 없도록 해야 합니다.
magnify이면, 상호작용을 지원하는 환경에서 사용자 에이전트는 사용자가 문서 조각에 대해 "확대" 작업을 수행할 수 있도록 컨트롤을 제공해야 합니다.
‘zoomAndPan’ 속성이 내부 ‘svg’ 요소에 지정된 경우, 내부 ‘svg’ 요소의 ‘zoomAndPan’ 설정은 SVG 사용자 에이전트에 아무런 영향을 주지 않습니다.
SVG는 HTML과 동일한 포커스 모델을 사용하며, 본 섹션에 따라 SVG에 맞게 수정됩니다. 하나의 문서에서 한 번에 오직 한 요소만 포커스됨 상태가 됩니다; 문서 전체가 시스템 포커스를 가지면, 이 요소가 모든 키보드 이벤트의 타겟이 됩니다.
요소가 포커스되면,
해당 요소는 CSS
:focus
의사 클래스에 매칭됩니다.
상호작용 가능한 사용자 에이전트는 포커스가 키보드 또는 기타 비포인팅 장치의 사용자 입력 이벤트로 인해 변경될 때(일반적으로 테두리 등으로) 시각적으로 포커스를 표시해야 하며, 항상 포커스를
표시할 수도 있습니다.
작성자는 :focus
의사 클래스를 이용하여 시각적 표시를 그래픽에 더 적합하게 대체할 수 있지만(예: 도형에 stroke 추가), 시각적 포커스 표시를 완전히 제거하는
데는 사용하지 말아야 합니다.
다음 SVG 요소들은 상호작용 문서에서 포커스 가능합니다. use-element shadow tree 내 이러한 요소의 인스턴스도 포커스 가능합니다. HTML 포커스 모델의 목적상, 상호작용 사용자 에이전트는 이들을 포커스 가능한 영역으로 취급해야 하며, tabindex 포커스 플래그를 설정해야 합니다:
사용자 에이전트에서 제공하는 컨트롤의 경우, 요소마다 서브컨트롤별로 포커스 가능한 영역이 여러 개 있을 수 있습니다.
추가로, 모든 ‘a’ 요소(유효한 링크)는 포커스 가능하며, tabindex 포커스 플래그를 반드시 설정해야 합니다. 단, 사용자 에이전트가 링크를 키보드로 탐색할 수 있는 대체 방법을 제공하는 경우는 제외합니다.
SVG Tiny 1.2 focusable 속성을 사용한 콘텐츠와의 호환성을 위해, 사용자 에이전트는 해당 속성 값이 true인 요소를 포커스 가능으로 취급해야 합니다. 새로운 콘텐츠에서는 focusable 속성을 생략하거나, 해당 속성과 tabindex 값 0을 조합하여 사용해야 합니다.
사용자 에이전트는 기타 요소도 포커스 가능으로 취급할 수 있습니다. 특히 키보드 상호작용이 유일하거나 주요 사용자 입력 수단인 경우입니다. 예를 들어, 사용자 에이전트는 키보드 포커스를 이용해 ‘title’ 요소의 텍스트를 툴팁으로 표시하거나, 마우스, 포인터, 포커스 이벤트 리스너가 지정된 요소에 포커스가 도달하도록 허용할 수 있습니다. 작성자는 이 동작에 의존하지 말아야 하며, 모든 상호작용 요소는 직접 키보드 상호작용을 지원해야 합니다.
순서적 포커스 순서는 모든 포커스 가능 요소 집합에서 생성되며, SVG 요소의 ‘tabindex’ 속성은 HTML 요소의 tabindex 속성과 동일한 방식으로 처리합니다. use-element shadow tree 내부의 콘텐츠는 마치 ‘use’ 요소의 자식 콘텐츠인 것처럼 포커스 순서에 삽입됩니다.
사용자 에이전트가 SVG 문서의 스크롤 또는 이동(pan)을 지원하고, 포커스가 현재 SVG 뷰포트 바깥에 있는 요소로 이동하면, 사용자 에이전트는 포커스된 요소가 SVG 뷰포트 내에 들어올 때까지 문서를 스크롤 또는 이동해야 합니다.
HTML과 마찬가지로, 포커스 가능하지만 활성화 동작이 정의되지 않은 SVG 요소는 아무 동작도 하지 않는 활성화 동작을 가집니다(단, 스크립트에서 명시적으로 응답하는 경우 제외).
즉, ‘tabindex’ 속성 때문에만 포커스 가능한 요소는
마우스가 아닌 활성화(예: 포커스 상태에서 "enter" 키를 누름)에 대해 click
이벤트를 발생시킵니다.
HTML과 SVG가 혼합된 문서에서는, 포커스는 문서 전체에 대해 처리되며(순서적 포커스 순서가 결합됨), 각각의 인라인 SVG 또는 HTML 조각을 독립적인 하위 문서로 취급하지 않습니다.
예를 들어, 다음 문서에서는 Tab 키를 누르면 요소 A, B, C 사이에 순서대로 포커스가 이동합니다.
<!DOCTYPE html> <button id="A" tabindex="1">First thing</button> <button id="C" tabindex="2">Third thing</button> <svg width="200" height="200"> <text id="B" tabindex="1" x="100" y="100">Second thing</text> </svg>
SVG 요소에는 HTML의 accesskey 속성과 동일한 기능이 없습니다.
사용자 에이전트가 지원하는 모든 이벤트 타입에 대해, SVG는 HTML의 이벤트 핸들러 콘텐츠 속성과 동일한 요구사항을 따라 이벤트 속성을 지원합니다 [HTML]。 이벤트 속성은 모든 SVG 요소에서 사용할 수 있습니다.
이벤트 속성의 내용은 항상 ECMAScript로 해석되며, 'application/ecmascript' 미디어 타입으로 처리된 것과 동일하게 해석됩니다。 [rfc2046][rfc4329]
이벤트 속성은 애니메이션 가능하지 않습니다。
구현자는 이벤트 속성 설정을 EventListener를 EventTarget에 생성·등록하는 것으로 간주할 수 있습니다. 이러한 이벤트
리스너는 "버블링" 및 "타겟에서" 단계에서만 호출되며, addEventListener
의 useCapture
인자에 false를 지정한 것과 같습니다。
이 EventListener는 EventTarget에 등록될 수 있는 다른
리스너와 동일하게 동작합니다.
이벤트 리스너를 나타내는 속성이 변경되면, 이는 이전에 등록된 EventListener를 제거하고 새로운 리스너를 등록하는 것으로 볼 수 있습니다。또한, 이벤트 속성이 다른 EventListener와 비교해 어떤 순서로 이벤트를 받을지는 명세되지 않습니다。
ECMAScript에서 이벤트 리스너를 등록하는 한 가지 방법은 함수를 정의하고 addEventListener
메서드에 전달하는 것입니다:
function myAction1(evt) { // 이벤트 처리 } // ... 이후 ... myElement.addEventListener("click", myAction1, false)
ECMAScript에서 이벤트 속성의 문자 데이터 내용은 해당 이벤트에 응답하여 호출되는 ECMAScript 함수 정의가 됩니다。모든 ECMAScript 이벤트 리스너 함수와 마찬가지로, 이 함수는 Event 객체를 매개변수로 전달받으며, Event 객체의 이름은 evt입니다。예를 들어 다음과 같이 작성할 수 있습니다:
<rect onclick="MyClickHandler(evt)" .../>
이렇게 하면 Event 객체
evt가 MyClickHandler
함수에 전달됩니다。
아래는 애니메이션 이벤트 속성의 정의입니다。 이 속성들은 애니메이션 요소에 지정할 수 있습니다。
속성 정의:
이름 | 값 | 초기값 | 애니메이션 가능 |
---|---|---|---|
onbegin, onend, onrepeat | (아래 참조) | (없음) | 아니오 |
SVG 2 요구사항: | ‘script’에 async/defer 허용 고려. |
---|---|
결정: | SVG 2는 ‘script’에 async/defer를 허용함。 |
목적: | HTML과 일치시키기 위함。 |
담당자: | Cameron (ACTION-3280) |
SVG 2 요구사항: | SVG Tiny 1.2 스크립트 처리 모델 통합。 |
---|---|
결정: | SVG 2는 HTML5와 호환되는 방식으로 인라인 스크립트 콘텐츠 처리 방법을 정의함 |
목적: | HTML과 SVG의 스크립트 실행 동작을 일관되게 하기 위함。 |
담당자: | Cameron (ACTION-3282) |
‘script’ 요소는 HTML의 ‘script’ 요소와 동일하며, 따라서 스크립트(예: ECMAScript)를 위한 공간입니다。모든 ‘script’ 요소 내에서 정의된 함수는 현재 문서 전체에서 "전역" 스코프를 갖습니다。
스크립트의 텍스트 콘텐츠는 직접적으로 렌더링되지 않습니다; ‘script’ 요소의 display 값은 반드시 none으로 사용자 에이전트 스타일 시트에서 지정되어야 하며, 이 선언은 다른 CSS 규칙이나 표시 속성보다 우선해야 합니다。
‘script’ 요소를 실행하기 전에 ‘type’의 해석된 미디어 타입 값을 검사해야 합니다。 SVG 사용자 에이전트가 해당 스크립트 언어를 지원하지 않으면, ‘script’ 요소는 실행되지 않아야 합니다。
이 예제는 ‘onclick’ 이벤트 속성이 ‘circle’ 요소에서 호출하는
circle_click
함수를 정의합니다。아래 왼쪽 그림은 초기 이미지이고, 오른쪽 그림은 원을 클릭한 후의 결과입니다。
<?xml version="1.0" standalone="no"?> <svg width="6cm" height="5cm" viewBox="0 0 600 500" xmlns="http://www.w3.org/2000/svg"> <desc>예제 script01 - onclick 이벤트에서 ECMAScript 함수 호출 </desc> <!-- 클릭할 때마다 반지름을 변경하는 ECMAScript --> <script type="application/ecmascript"> <![CDATA[ function circle_click(evt) { var circle = evt.target; var currentRadius = circle.getAttribute("r"); if (currentRadius == 100) circle.setAttribute("r", currentRadius*2); else circle.setAttribute("r", currentRadius*0.5); } ]]> </script> <!-- 파란색 선으로 그리기 영역을 표시 --> <rect x="1" y="1" width="598" height="498" fill="none" stroke="blue"/> <!-- 클릭 이벤트 처리 --> <circle onclick="circle_click(evt)" cx="300" cy="225" r="100" fill="red"/> <text x="300" y="480" font-family="Verdana" font-size="35" text-anchor="middle"> 원을 클릭하여 크기를 변경 </text> </svg>
![]() ![]() |
속성 정의:
이름 | 값 | 초기값 | 애니메이션 가능 |
---|---|---|---|
crossorigin | [ anonymous | use-credentials ]? | (HTML 속성 정의 참조) | 예 |
crossorigin 속성은 CORS 설정 속성이며, 별도의 명시가 없는 한 html과 동일한 처리 규칙을 따릅니다 [HTML]。
이름 | 값 | 초기값 | 애니메이션 가능 |
---|---|---|---|
type | (아래 참조) | application/ecmascript | 아니오 |
이름 | 값 | 초기값 | 애니메이션 가능 |
---|---|---|---|
href | URL [URL] | (없음) | 아니오 |
URL은 링크 장에서 설명한 대로 처리 및 리소스가 가져와집니다。
SVGScriptElement 객체는 DOM에서 ‘script’ 요소를 나타냅니다。
[Exposed=Window] interface SVGScriptElement : SVGElement { attribute DOMString type; attribute DOMString? crossOrigin; }; SVGScriptElement includes SVGURIReference;
type IDL 속성은 ‘type’ 콘텐츠 속성을 반영합니다.
crossOrigin IDL 속성은 ‘crossorigin’ 콘텐츠 속성을 반영합니다.