2013-09-26 1 views
0

SVG 요소를 생성하고 개별 png 대신 스프라이트 시트를 사용하는 기존 자바 스크립트를 사용하려고합니다.동적으로 생성 된 SVG에서 스프라이트 사용?

지금이 단일 이미지 파일에 이미지, "경로"점을 생성하는 일반적인 형식입니다 :

var hsOwnerDocument = $$(this).getDocument(); 
var element = hsOwnerDocument.createElementNS("http://www.w3.org/2000/svg", "image"); 
element.id = id; 
element.setAttributeNS(null, "x", left); 
element.setAttributeNS(null, "y", top); 
element.setAttributeNS(null, "width", width); 
element.setAttributeNS(null, "height", height); 
element.setAttributeNS("http://www.w3.org/1999/xlink", "href", path); 

내가 SVG 또는 스프라이트와 아무 경험이없는,하지만 내 제한된 연구에서 두 가지 접근법이있는 것 같습니다. 스프라이트 시트를 가리 키도록 배경 이미지를 표시하고 CSS로 필요한 부분을 가져 오거나 이미지의 클립 경로 속성을 사용하십시오. 나는 내 문제를 고려해 어느 것이 적절한 지 확신하지 못한다. 그러나 불행히도 나는 기대했던대로 작동하지 않는 것으로 보인다. 클립 경로가 이미지 요소에 적용되지 않는 것 같아요. 대신 배경 이미지를 사용하면 사실 전혀 표시되지 않습니다.

편집 : clip-path를 사용하여 방금 만든 이미지보다 작은 임의의 사각형을 만들고 위 이미지에 적용하여 필요한만큼 영역을 필터링할지 확인합니다.

var hsOwnerDocument = $$(this).getDocument(); 
    var element = hsOwnerDocument.createElementNS("http://www.w3.org/2000/svg", "clip-path"); 
    element.id = "testClip"; 
    element.setAttributeNS(null, "id", "testClip"); 
    var rect = hsOwnerDocument.createElementNS("http://www.w3.org/2000/svg", "rect"); 
    rect.setAttributeNS(null, "x", 4); 
    rect.setAttributeNS(null, "y", 4); 
    rect.setAttributeNS(null, "width", 20); 
    rect.setAttributeNS(null, "height", 20); 
    element.appendChild(rect); 

는 I은 이전 코드에 다른 광고를 추가하여 속성과 클립 경로를 적용 :

element.setAttributeNS(null,"style", "clip-path:url(#testClip)"); 

클립 경로 요소 및 하위 직사각형 모두 생성 태그 내에 존재하고 I 내 이미지 요소의 속성을 확인하십시오 ...하지만 전체 이미지가 계속 표시됩니다.

+0

@RobertLongson은 추가 세부 정보를 추가했습니다. 감사합니다. – user2821311

답변

0

이 줄은 잘못되었습니다.

var element = hsOwnerDocument.createElementNS("http://www.w3.org/2000/svg", 
               "clip-path"); 

clipPath 요소를 만들어야합니다.

var element = hsOwnerDocument.createElementNS("http://www.w3.org/2000/svg", 
               "clipPath"); 

속성은 clip-path이고, 요소는 clipPath입니다.

+0

Blargh, 정확합니다. 그것은 실수 한 실수였습니다. 불행히도이 속성이 어떻게 작동하는지 오해했습니다 ... 소스 이미지 좌표 대신 화면 좌표에 적용됩니다. 이것은 매우 복잡한 위치 계산을하는데, 스프라이트에는 유용하지 않습니다 (다른 것을 놓치지 않는 한). 대신에 background-image 방법을 사용하고 싶습니까? – user2821311

+0

대신에 [objectBoundingBox] (http://www.w3.org/TR/SVG/masking.html#ClipPathElementClipPathUnitsAttribute) 단위에서 작업해야 할 필요가있을 것입니다. –

+0

하하, 그 행동은 확실히 다릅니다! 슬프게도 내가 기대하는 것이 아닙니다. 이 속성 세트를 사용하면 자르기 직사각형의 위치 좌표가 제로 (또는 치수까지 음수)이면 전체 이미지가 렌더링됩니다. 그렇지 않으면 나는 아무것도 볼 수 없다. – user2821311