SVG 경로에 동적 텍스트 및 중앙 디스플레이를 포함시킵니다
1. SVG 경로에 텍스트를 포함시키는 도전
SVG (확장 가능한 벡터 그래픽)에서
원래의 HTML 구조에서
<div class="main"> <svg id="map" class="me -svg" viewbox="10-25 1000 870"> <path null> 은 툴팁으로 만 사용됩니다-> <title> {{item.title}}, {{item.size}} </title> </path> </svg> </div>
레지던트 디스플레이와 텍스트의 동적 바인딩을 실현하려면 SVG 기본 텍스트 렌더링 메커니즘을 채택해야합니다.
2. 핵심 솔루션 : svg 요소를 사용하십시오
SVG는 텍스트를 렌더링하기위한 특수
2.1 요소의 기본 사용 및 수평 센터링
다음은
<div class="main"> <svg id="map" class="me -svg" viewbox="10-25 1000 870"> <ng-container> <path null> 은 접근성 또는 추가 팁으로 유지합니다-> <title> {{item.title}}, {{item.size}} </title> </path> 요소를 사용하여 동적 텍스트를 표시합니다-> <text :> {{item.title}}, {{item.size}} </text> </ng-container> </svg> </div>
위의 코드에서는 다음과 같은 개선을했습니다.
- NG-Container를 사용하여 각 데이터 항목에 대해 해당 경로와 텍스트가 렌더링되도록 경로와 텍스트를 루프로 랩핑하십시오.
-
요소에 x 및 y 속성을 추가하면 이러한 값은 item.textx 및 item.texty에서 동적으로 얻습니다. - set style = "텍스트 랜치 : 중간;" 텍스트의 수평 중심을 달성합니다.
- 글꼴 크기와 채우기 스타일을 추가하여 텍스트 모양을 제어합니다.
2.2 동적 데이터 바인딩
텍스트 내용을 동적으로 만들려면 구성 요소의 TypeScript 파일에서 데이터 구조를 정의하고 텍스트에 필요한 X 및 Y 좌표를 포함해야합니다.
// 데이터 인터페이스를 정의하고 텍스트 포지셔닝 좌표 내보내기 인터페이스 datainterface { ID : 문자열; 텍스트 : 문자열; 제목 : 문자열; 크기 : 숫자; mycolor : 문자열; mycheck : 문자열; D : 문자열; // SVG 경로 데이터 textx? : 숫자; // 텍스트 x 좌표 texty? : 숫자; // 텍스트 y 좌표} // 샘플 데이터 myData : datainterface [] = [{ ID : "in", "text": "default", "title": "India", Size : 20, "MyColor": "Default", "MyCheck": 'True', "D": "M 736.102,436.797 ...", // 경로 데이터 완료 "TextX": 730, "Texty": 400 // 가정 텍스트 좌표}, { ID : "NP", "Text": "Default", "Title": "Nepal", Size : 70, "MyColor": "Default", "MyCheck": 'True', "D": "M 722.979,381.675 ...", // 경로 데이터 완료 "TextX": 715, "Texty": 385 // 가정 텍스트 좌표}, { ID : "LK", "Text": "Default", "Title": "Sri Lanka", Size : 20, "MyColor": "Default", "MyCheck": 'False', "D": "M 700.169,435.179 ...", // 경로 데이터 완료 "TextX": 705, "Texty": 440 // 가정 텍스트 좌표}];
참고 : 여기의 TextX 및 Texty 좌표는 샘플 값입니다. 실제 응용 분야에서 이러한 좌표는 텍스트가 진정으로 경로의 중심에 있는지 확인하기 위해 각 경로의 형상에 따라 정확하게 계산되어야합니다.
3. 텍스트 포지셔닝 전략
복잡한 SVG 경로의 중심에 텍스트를 정확하게 배치하는 것은 핵심 과제입니다. 간단한 x 및 y 속성은 텍스트의 기준 시작점 만 지정할 수 있습니다.
3.1 텍스트 포지셔닝 좌표를 얻습니다
간단한 사각형 또는 원의 경우 중심점 계산은 비교적 쉽습니다. 그러나 임의의 모양 SVG 경로의 경우 기하학적 중심 (Centroid) 또는 시각적 센터를 얻으려면 더 복잡한 논리가 필요합니다.
제안 된 포지셔닝 방법 :
사전 계산 및 저장 좌표 : 가장 직접적인 방법은 MyData 인터페이스의 각 경로에 대해 TextX 및 Texty 좌표를 미리 계산하고 저장하는 것입니다. 이는 데이터 생성 시점에 수행하거나 오프라인 도구를 지원할 수 있습니다.
-
런타임 컴퓨팅 (고급) :
-
GetBbox () 사용 : Angular Component의 NgafterViewInit 또는 기타 적합한 수명주기 후크에서 JavaScript를 통해 SVG 경로 요소의 경계 상자를 얻은 다음 중심점을 계산할 수 있습니다.
'@angular/core'에서 import {afterviewinit, 구성 요소, ElementRef, Viewchildren, QueryList}; @요소({ 선택기 : 'App-SVG-Map', TemplateUrl : './svg-map.component.html', styleurls : [ './svg-map.component.css'] }) 내보내기 클래스 SVGMAPCOMPONTON AMPERViewInit { @ViewChildren ( 'Pathref') Pathrefs! : QueryList <elementref>>; myData : datainterface [] = [ / * ... 귀하의 데이터 ... * /]; ngafterViewInit () { this.pathrefs.foreach ((pathelementref, index) => { const path = pathelementref.nativeElement; const bbox = path.getbbox (); // 경로의 경계 상자를 가져옵니다. const centerx = bbox.x bbox.width / 2; const centery = bbox.y bbox.height / 2; // myData의 텍스트 좌표 업데이트 // 참고 : 루프에서 항목을 직접 수정하면 성능 문제가 발생하거나 업데이트 문제를 볼 수 있습니다. this.mydata [index] .textx = centerx; this.mydata [index] .texty = Centery; }); // 트리거 뷰 업데이트 (필요한 경우) this.mydata = [... this.mydata]; } // ... 기타 방법 ... }</elementref>
HTML에서는 #PathRef와 같은 경로 요소에 템플릿 참조 변수를 추가해야합니다.
보다 정확한 기하학적 중심 : 비 정교성 다각형 또는 복잡한 경로의 경우 경계 박스 센터가 시각적으로 최적의 중심이 아닐 수 있습니다. 이를 위해서는 실제 중심 또는 경로의 "극"을 계산하기 위해보다 복잡한 기하학적 알고리즘이 필요할 수 있습니다.
-
3.2 수직 중심 조정
수평 센터링 용 텍스트 랜치 외에도 SVG는 텍스트의 수직 정렬을 조정하기 위해 지배적 인 기본 또는 DY 속성을 제공합니다.
- Dominant-Baseline = "Middle": 텍스트의 수직 중심을 Y 좌표와 정렬하십시오.
- DY 속성 : 텍스트의 수직 오프셋을 수동으로 조정하십시오. 예를 들어, dy = "-0.3em"은 텍스트를 위쪽으로 미세 조정할 수 있습니다.
<text :> {{item.title}}, {{item.size}} </text>
4. 작은 경로의 텍스트 표시를 처리합니다
경로가 매우 작고 완전한 텍스트를 수용 할 수없는 경우 경로 내부에 직접 텍스트를 표시하면 텍스트 오버 플로우 또는 읽기가 어려울 수 있습니다. 이 시점에서 다음과 같은 전략을 고려할 수 있습니다.
- 조건부 렌더링 : 경로의 크기에 따라 경로 내에서 직접 텍스트를 표시할지 여부를 결정하십시오 (예 : 항목 크기 속성 또는 계산 된 경계 박스 영역).
- 외부 표시기 : 소형 경로의 경우 텍스트를 외부로 표시 할 수 있으며 화살표 또는 선은 해당 경로를 가리 킵니다.
<ng-container> <path null> <title> {{item.title}}, {{item.size}} </title> </path> <text item.size> 50" [attr.x] = "item.textx" [attr.y] = "item.texty" 스타일 = "텍스트 랜치 : 중간; 지배적 인 배스 라인 : 중간; 글꼴 크기 : 10px; 채우기 : 검은 색;"> {{item.title}} </text> <ng-container item.size> 매 스타일 = "텍스트 캔더 : 시작; font-size : 8px; 채우기 : 그레이;"> {{item.title}} ({{item.size}}) </ng-container></ng-container>
참고 : item.pathcenterx, item.pathcentery, item.indicatorx, item. indicatory는 계산 또는 사전 설정을 통해 얻어야합니다. Marker-End = "URL (#Arrowhead)"은 라인 끝에 화살표를 추가하는 데 사용됩니다.
5. 예방 조치 및 모범 사례
- 성능 최적화 : SVG 드로잉에 많은 양의 경로와 텍스트가 포함 된 경우 렌더링 성능에 영향을 줄 수 있습니다. Trackby 기능을 사용하여 *ngfor 루프를 최적화하여 불필요한 DOM 작업을 줄입니다.
- 접근성 :
요소를 사용하더라도 요소를 유지하는 것은 여전히 좋은 습관이며, 이는 스크린 리더에게 추가 정보를 제공 할 수 있습니다. - 스타일 제어 : CSS를 사용하여 글꼴, 색상, 크기, 정렬 등을 제어하여보다 유연한 스타일 관리를 달성 할 수 있습니다. 예를 들어:
.me-svg text { Font-Family : Arial, Sans-Serif; 글꼴 크기 : 10px; 채우기 : #333; /* 기타 스타일*/ }
- 응답 디자인 : 그래픽 및 텍스트의 올바른 비율과 레이아웃이 다른 화면 크기로 유지되도록 SVG의 뷰 박스 및 사전 스펙트럼 속성이 올바르게 설정되어 있는지 확인하십시오.
- 사용자 상호 작용 : 텍스트 자체가 클릭 이벤트에 응답 해야하는 경우
요소로 텍스트를 감싸거나 요소에서 직접 청취하는 이벤트를 추가하십시오.
요약
SVG 경로에 동적 텍스트를 포함시키고 중앙 디스플레이를 구현하며, 주로
위 내용은 SVG 경로에 동적 텍스트 및 중앙 디스플레이를 포함시킵니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Stock Market GPT
더 현명한 결정을 위한 AI 기반 투자 연구

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

이 튜토리얼은 CSS를 사용하여 HTML 페이지의 특정 텍스트 내용을 정확하게 숨기는 방법에 대해 자세히 설명합니다. 대상 텍스트의 랩핑 요소에 독점 CSS 클래스를 추가하고 디스플레이를 사용하여 다음과 같습니다. 속성, 개발자는 페이지 요소의 세련된 제어를 달성하여 필요한 부품 만 숨겨 지도록 페이지 레이아웃 및 사용자 경험을 최적화 할 수 있습니다.

UseMailto : inhreftocreateemaillinks.startwithbasiclinks, add? subject = 및 & body = forpre-filledcontent, andincludemultipleaddressesorcc =, bcc = foradvancedoptions.

이 기사는 HTML에서 외부 JavaScript 함수를 호출 할 때 두 가지 일반적인 문제를 탐구합니다. 부적절한 스크립트로드 시간으로 인해 DOM 요소가 준비되지 않으며 기능 이름 지정은 브라우저 내장 이벤트 또는 키워드와 충돌 할 수 있습니다. 이 기사는 스크립트 참조 위치를 조정하고 JavaScript 코드가 올바르게 실행되도록하기 위해 우수한 기능 이름 지정 사양을 포함한 자세한 솔루션을 제공합니다.

USETHETITLEATTRIBITFORSIMPLETOOLTIPSORCSSFORCUSTOM-StyledOnes.1.AddTitle = "Text"TOANYELENMENTFORDEFAULTTOOLTIPS.2. FORSTYLEDTOOLTIPS, WRAPTHEELEMENTINICONTAINER, 사용 .TOOLTIPAND.TOOLTIPAND.TOOLTIPTEXTCLASSSSSSPOTIVICIONITINITINING, PSEUDOINUTE, 및 VSEUDOINGIONC

setthelangattributeinthehtmltagtospecypagelanguage, 예를 들어, forenglish; 2.useocodes "es"forspanishor "fr"forfrench; 3. includeregionalvariantswithcodeslite "en-us"또는 "zh-cn"; 4. ApplylangtespecificelementmelementmelementeMelemente

usecssfloatpropertytowraptaroundanimage : floatleftfortextontheright, floatrightfortextontheleft, addmarginforspacing 및 clearfloattopreventlayoutissues.

이 기사는 크로스 도메인 iframes를 포함하는 부모 div에서 마우스 딩 이벤트를 포착하는 과제를 탐구합니다. 핵심 문제는 브라우저 보안 정책 (동일한 오리핀 정책)이 크로스 도메인 iframe 컨텐츠에서 직접 DOM 이벤트를 듣지 않는다는 것입니다. iframe 소스 도메인 이름이 제어되고 CORS가 구성되지 않는 한 이러한 유형의 이벤트 캡처를 달성 할 수 없습니다. 이 기사는 이러한 보안 메커니즘을 자세히 설명하고 이벤트 상호 작용에 대한 한계를 설명하고 가능한 대안을 제공합니다.

웹 페이지 레이아웃에 부트 스트랩을 사용하는 경우 개발자는 종종 기본적으로 수직으로 쌓이는 대신 나란히 표시되는 요소 문제가 발생합니다. 이 기사는이 일반적인 레이아웃 챌린지를 깊이있는 깊이로 탐색하고 솔루션을 제공합니다. Flex 컨테이너의 Flex 방향 속성을 컬럼으로 조정하여 Bootstrap의 Flex-Column Tool 클래스를 사용하여 H1 태그의 올바른 수직 배열 및 양식과 같은 컨텐츠 블록을 달성하여 페이지 구조가 기대에 부응합니다.
