Highcharts: ν•˜λ‚˜μ˜ Flex μ»¨ν…Œμ΄λ„ˆ μ•ˆμ— μ—¬λŸ¬ μ°¨νŠΈκ°€ μžˆλŠ” 경우 Flex μ»¨ν…Œμ΄λ„ˆλŠ” 차트 크기λ₯Ό μ μ ˆν•˜κ²Œ μ‘°μ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 03μ›” 02일  Β·  18μ½”λ©˜νŠΈ  Β·  좜처: highcharts/highcharts

μ˜ˆμƒλ˜λŠ” 행동

CSSκ°€ ν¬ν•¨λœ ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆκ°€ μžˆλŠ” 경우
λ””μŠ€ν”Œλ ˆμ΄: ν”Œλ ‰μŠ€;
ν”Œλ ‰μŠ€ λ°©ν–₯: ν–‰;

그리고 4λͺ…μ˜ 아이듀과
ν”Œλ ‰μŠ€ μ„±μž₯: 1;
ν”Œλ ‰μŠ€ κΈ°μ€€: 25%;
각 크기가 μƒμœ„μ˜ 25%인 4개의 μ°¨νŠΈκ°€ μžˆλŠ” ν•˜λ‚˜μ˜ 행이 μžˆμ„ κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆλ‹€.

μ‹€μ œ 행동

μ‹€μ œ 행동은 λΆ€λͺ¨μ˜ 크기에 따라 λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
25%둜 ν•œ 행에 4개 ν•­λͺ©(μ˜ˆμƒ λ™μž‘)
ν•œ 쀄에 μž‘μ€ 크기의 ν•­λͺ© 3κ°œμ™€ λ‹€μŒ 쀄에 100% ν•­λͺ©.
내뢀에 100% ν•­λͺ©μ΄ μžˆλŠ” 4개의 ν–‰.

μž¬ν˜„ 단계가 ν¬ν•¨λœ 라이브 데λͺ¨

http://jsfiddle.net/xLz8tcrc/1/

영ν–₯을 λ°›λŠ” λΈŒλΌμš°μ €

크둬
νŒŒμ΄μ–΄ν­μŠ€

Undecided

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@KacperMadej
음, svgλŠ” 벑터 κ·Έλž˜ν”½μž…λ‹ˆλ‹€. 즉, SVG λ„ˆλΉ„μ™€ 높이λ₯Ό 100%둜 섀정해도 λ Œλ”λ§μ— λ‚˜μœ 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€. λ‚΄κ°€ ν‹€λ Έλ‹€λ©΄ μˆ˜μ •ν•΄ μ£Όμ„Έμš”.

λ‚΄λΆ€ svg μš”μ†Œ λ„ˆλΉ„ CSSλ₯Ό μž¬μ •μ˜ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

highcharts-chart::ng-deep {
  .highcharts-container,
  .highcharts-container svg {
     width: 100% !important;
     height: 100% !important;
  }
}

그것은 μ§€κΈˆ ν•©λ¦¬μ μœΌλ‘œ 잘 μž‘λ™ν•©λ‹ˆλ‹€.

λͺ¨λ“  18 λŒ“κΈ€

데λͺ¨μ—μ„œ ν”Œλ ‰μŠ€ μƒμžμ˜ 크기λ₯Ό μ‘°μ •ν•œ ν›„ chart.reflow() λ₯Ό μ‹€ν–‰ν•˜λŠ” μŠ€λ‹ˆνŽ«μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 이것은 _window_ 크기가 쑰정될 λ•Œλ§Œ μ°¨νŠΈκ°€ μžλ™μœΌλ‘œ λ¦¬ν”Œλ‘œμš°λ˜κΈ° λ•Œλ¬Έμ— ν•„μš”ν•©λ‹ˆλ‹€.

λ˜ν•œ 차트 μ»¨ν…Œμ΄λ„ˆμ— overflow: hidden λ₯Ό μΆ”κ°€ν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆκ°€ μ°¨νŠΈλ³΄λ‹€ μž‘μ•„μ§ˆ 수 μžˆμœΌλ―€λ‘œ μΆ•μ†Œν•  λ•Œ μ»¨ν…Œμ΄λ„ˆκ°€ λ„ˆλ¬΄ λ„“μ–΄μ§€λŠ” 것을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λ ‡κ²Œ ν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ©λ‹ˆκΉŒ? http://jsfiddle.net/xLz8tcrc/2/

λ‹΅μž₯을 보내 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.
chart.reflow()λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 μ›λž˜ λ¬Έμ œμ— λŒ€ν•œ μˆ˜μ •λ³΄λ‹€ ν•΄κ²° λ°©λ²•μ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. HighChartsκ°€ μƒμœ„ μš”μ†Œμ˜ CSS κ·œμΉ™μ— 따라 μ μ ˆν•˜κ²Œ 크기가 μ‘°μ •λœλ‹€λ©΄ 훨씬 간단할 κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” 단지 예λ₯Ό κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€. μ‹€μ œ μ‚¬μš© μ‚¬λ‘€μ—μ„œ μš°λ¦¬λŠ” μ°½ 크기 μ‘°μ • λ˜λŠ” μƒμœ„ μš”μ†Œ 크기 μ‘°μ • μ‹œ 차트 크기λ₯Ό μ‘°μ •ν•˜κΈ°λ₯Ό μ›ν•˜λ―€λ‘œ chart.reflow()λ₯Ό ν˜ΈμΆœν•  수 μžˆλŠ” 논리λ₯Ό κ΅¬ν˜„ν•˜λŠ” 것이 그리 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€. μ°½ 크기 μ‘°μ •μ˜ 경우 μ°½ 크기 μ‘°μ • 이벀트λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 더 κ°„λ‹¨ν•©λ‹ˆλ‹€.
λ‹€λ₯Έ ꡬ성 μš”μ†Œμ˜ 경우 μƒμœ„ ꡬ성 μš”μ†Œμ— λŒ€ν•΄ μΌμ’…μ˜ 크기 μ‘°μ • κ°€λŠ₯ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•˜λ―€λ‘œ 크기 μ‘°μ • μ‹œ chart.reflowλ₯Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. 일뢀 κ²½μš°μ—λŠ” μž‘λ™ν•˜μ§€λ§Œ λͺ¨λ“  ꡬ성 μš”μ†Œμ— λŒ€ν•΄μ„œλŠ” ν™•μ‹ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ§€κΈˆμ€ 티켓을 닫지 μ•ŠμœΌμ…”λ„ λ©λ‹ˆλ‹€. κ·€ν•˜μ˜ μ ‘κ·Ό 방식을 κ΅¬ν˜„ν•˜λ €κ³  ν•˜κ±°λ‚˜ λ‹€λ₯Έ 아이디어가 μžˆλŠ” μ‚¬λžŒμ΄ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

당신이 μ„€λͺ…ν•˜λŠ” 것은 기본적으둜 μš°λ¦¬κ°€ Highchartsμ—μ„œ λ‚΄λΆ€μ μœΌλ‘œ 가지고 μžˆλŠ” 것과 같은 λ¬Έμ œμž…λ‹ˆλ‹€. ν˜„μž¬ μ°½ 크기 쑰정에 λŒ€ν•œ μžλ™ λ¦¬ν”Œλ‘œμš°λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€. μ΄μƒμ μœΌλ‘œλŠ” ν¬ν•¨ν•˜λŠ” μš”μ†Œ 크기 쑰정에 λŒ€ν•œ μžλ™ λ¦¬ν”Œλ‘œμš°λ„ μˆ˜ν–‰ν•˜κ³  μ‹Άμ§€λ§Œ ν˜„μž¬ DOM μš”μ†Œ 크기 변경을 μˆ˜μ‹ ν•˜λŠ” 효과적인 방법이 μ—†μŠ΅λ‹ˆλ‹€.

토둠은 http://stackoverflow.com/questions/6492683/how-to-detect-divs-dimension-changed λ₯Ό μ°Έμ‘° setTimeout λ˜λŠ” requestAnimationFrame , λ‘˜ λ‹€ CPUλ₯Ό λ‚­λΉ„ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

λ§ν¬ν•œ StackOverflow κ²Œμ‹œλ¬Ό(https://github.com/marcj/css-element-queries)에 μ–ΈκΈ‰λœ ResizeSensorλ₯Ό λ³΄μ…¨λ‚˜μš”? 두 개의 μΆ”κ°€ DOM μš”μ†Œμ™€ scroll 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μ‚¬μš©ν•˜μ—¬ 크기 쑰정을 κ°μ§€ν•©λ‹ˆλ‹€. requestAnimationFrame 만 μ‚¬μš©ν•˜μ—¬ μ „μ†‘λ˜λŠ” 크기 μ‘°μ • 이벀트 수λ₯Ό μ œν•œν•©λ‹ˆλ‹€(ν”„λ ˆμž„λ‹Ή μ΅œλŒ€ 1개).

object νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 이λ₯Ό μˆ˜ν–‰ν•˜λŠ” 방법을 μ„€λͺ…ν•˜λŠ” http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/ 도 μžˆμŠ΅λ‹ˆλ‹€ resize μ΄λ²€νŠΈκ°€ λ°œμƒν•©λ‹ˆλ‹€.

λ―Έλž˜μ—λŠ” λΈŒλΌμš°μ €μ— ResizeObserver κ΅¬ν˜„λ  κ²ƒμ΄μ§€λ§Œ μ§€κΈˆμ€ μ‹€ν˜„ κ°€λŠ₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. https://github.com/WICG/ResizeObserver/issues/3에 λ‚˜μ—΄λœ 폴리필이 λͺ‡ 가지 μžˆμ§€λ§Œ MutationObeserver 및 폴링 λ˜λŠ” 기타 낭비적인 μ ‘κ·Ό 방식에 μ˜μ‘΄ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‚΄ 생각에 HighchartsλŠ” ν•΅μ‹¬μ—μ„œ 이와 같은 νŠΈλ¦­μ„ κ΅¬ν˜„ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. μ°½ 크기 μ‘°μ • μˆ˜μ‹ κΈ°λŠ” λŒ€λΆ€λΆ„μ˜ 경우λ₯Ό μ²˜λ¦¬ν•˜λ©°, μ°½ 크기 μ‘°μ • 없이 μš”μ†Œ 크기가 μ‘°μ •λ˜λŠ” 경우 κ΅¬ν˜„μžκ°€ λ‹€λ₯Έ 경우λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ„λ‘ chart.reflow 후크가 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μœ„μ˜ μ ‘κ·Ό 방식 쀑 ν•˜λ‚˜λ₯Ό ν…ŒμŠ€νŠΈν–ˆκ³  κ·€ν•˜μ˜ κ²½μš°μ— νš¨κ³Όκ°€ μžˆλ‹€λ©΄ chart.reflow 와 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

+1 μš°λ¦¬λŠ” 이 문제λ₯Ό ν•΄κ²°ν–ˆκ³  λ¬Έμ œκ°€ flexboxλΌλŠ” 것을 κΉ¨λ‹«λŠ” 데 μ˜μ›νžˆ κ±Έλ ΈμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ ν”Œλ ‰μŠ€ μ‚¬μš©μ„ μ€‘λ‹¨ν•˜λŠ” 이유 쀑 ν•˜λ‚˜ ... 크기 쑰정이 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•Šκ³  λ””μŠ€ν”Œλ ˆμ΄ κ·Έλ¦¬λ“œμ— λŒ€ν•΄ λ™μΌν•œ λ˜₯

λ””μŠ€ν”Œλ ˆμ΄ 인라인 블둝이 훨씬 λ‚«μŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ ν”Œλ ‰μŠ€ μ‚¬μš©μ„ μ€‘λ‹¨ν•˜λŠ” 이유 쀑 ν•˜λ‚˜ ... 크기 쑰정이 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•Šκ³  λ””μŠ€ν”Œλ ˆμ΄ κ·Έλ¦¬λ“œμ— λŒ€ν•΄ λ™μΌν•œ λ˜₯

이것은 또 λ‹€λ₯Έ ν•΄κ²° 방법일 λΏμž…λ‹ˆλ‹€.

이에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ? 이 @TorsteinHonsi λ₯Ό μˆ˜μ •ν•  κ³„νšμ΄

μ €λŠ” Angular ν”„λ‘œμ νŠΈμ—μ„œ Highchartsλ₯Ό μ‚¬μš©ν•˜κΈ° μ‹œμž‘ν–ˆκ³  이것 μ—­μ‹œ κ²½ν—˜ν–ˆμŠ΅λ‹ˆλ‹€.
λ‚΄κ°€ 얻지 λͺ»ν•˜λŠ” 것은 μ°¨νŠΈκ°€ μ‹€μ œλ‘œ SVG μž…λ‹ˆλ‹€. λ”°λΌμ„œ 100% 크기둜 넣어도 λ¬Έμ œκ°€ 없을 κ²ƒμž…λ‹ˆλ‹€. λŒ€μ‹  λ„ˆλΉ„μ™€ 높이가 λͺ…μ‹œμ μœΌλ‘œ svg둜 직접 μ„€μ •λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

capture

μ•ˆλ…•ν•˜μ„Έμš” @GeorgeKnap

Highcharts 및 λΉ„ Highcharts SVGκ°€ ν¬ν•¨λœ 라이브 데λͺ¨λ₯Ό μ œκ³΅ν•˜μ—¬ 염두에 λ‘” λ‚΄μš©μ„ 보여쀄 수 μžˆμŠ΅λ‹ˆκΉŒ? 이것이 샀프 λ Œλ”λ§μ˜ μŠ€μΌ€μΌλ§ 및 ν”½μ…€ 정밀도에 μ–΄λ–€ 영ν–₯을 μ€λ‹ˆκΉŒ?

@KacperMadej
음, svgλŠ” 벑터 κ·Έλž˜ν”½μž…λ‹ˆλ‹€. 즉, SVG λ„ˆλΉ„μ™€ 높이λ₯Ό 100%둜 섀정해도 λ Œλ”λ§μ— λ‚˜μœ 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€. λ‚΄κ°€ ν‹€λ Έλ‹€λ©΄ μˆ˜μ •ν•΄ μ£Όμ„Έμš”.

λ‚΄λΆ€ svg μš”μ†Œ λ„ˆλΉ„ CSSλ₯Ό μž¬μ •μ˜ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

highcharts-chart::ng-deep {
  .highcharts-container,
  .highcharts-container svg {
     width: 100% !important;
     height: 100% !important;
  }
}

그것은 μ§€κΈˆ ν•©λ¦¬μ μœΌλ‘œ 잘 μž‘λ™ν•©λ‹ˆλ‹€.

μ†”λ£¨μ…˜μ„ κ³΅μœ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

SVG 크기 μ‘°μ •μ˜ λ¬Έμ œλŠ” ν”½μ…€ 정밀도가 손싀될 수 μžˆμœΌλ―€λ‘œ νλ¦Ών•œ λ Œλ”λ§μ΄ λ°œμƒν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 일반 Highcharts μ†”λ£¨μ…˜μ— λŒ€ν•œ 또 λ‹€λ₯Έ λ¬Έμ œλŠ” λ ˆκ±°μ‹œ λΈŒλΌμš°μ €μ— λŒ€ν•œ μ§€μ›μž…λ‹ˆλ‹€(차단기가 μ•„λ‹ˆλΌ μ μ ˆν•œ 폴리필이 μžˆλŠ”μ§€ ν™•μΈν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€).

이 λ¬Έμ œμ— λŒ€ν•΄ μžμ„Ένžˆ μ‘°μ‚¬ν•œ κ²°κ³Ό μ„Έ 가지 문제λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

  1. μ»¨ν…Œμ΄λ„ˆμ˜ 크기λ₯Ό κ²°μ •ν•  λ•Œ HighchartsλŠ” scrollWidth λ₯Ό μ‚¬μš©ν•˜λŠ”λ°, μ‹€μ œ λ„ˆλΉ„κ°€ ν•˜μœ„ 픽셀인 경우 λ°˜μ˜¬λ¦Όλ©λ‹ˆλ‹€. μ›λž˜ λ°”μ΄μ˜¬λ¦°μ—μ„œλŠ” 첫 번째 μ°¨νŠΈκ°€ λ„ˆλ¬΄ 넓은 ν”½μ…€λ‘œ 그렀지고 ν”Œλ ‰μŠ€ λ ˆμ΄μ•„μ›ƒμ΄ 4μ—΄μ—μ„œ 3μ—΄λ‘œ μ ν”„ν•˜κ²Œ λ©λ‹ˆλ‹€. 이것은 Math.floor 및 element.getBoundingClientRect λ₯Ό μ‚¬μš©ν•˜μ—¬ μœ„μ˜ μ»€λ°‹μ—μ„œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  2. νŽ˜μ΄μ§€ λ˜λŠ” μ»¨ν…Œμ΄λ„ˆμ˜ λ„ˆλΉ„λ₯Ό μΆ•μ†Œν•˜λ©΄ μ°¨νŠΈκ°€ ν• λ‹Ήλœ 25%보닀 λ„“μ–΄μ Έ λ ˆμ΄μ•„μ›ƒμ΄ κΉ¨μ§‘λ‹ˆλ‹€. 이것은 μ΅œμƒμœ„ 차트 μ»¨ν…Œμ΄λ„ˆμ— overflow:hidden λ₯Ό μΆ”κ°€ν•˜μ—¬ μœ„μ˜ μ»€λ°‹μ—μ„œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  3. 창의 크기λ₯Ό μ‘°μ •ν•˜μ§€ μ•Šκ³  ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό ν™•λŒ€ λ˜λŠ” μΆ•μ†Œν•  λ•Œ 차트의 크기가 μ‘°μ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 그듀은 μ—¬μ „νžˆ ​​그렇지 μ•Šμ§€λ§Œ 적어도 μ§€κΈˆμ€ λ ˆμ΄μ•„μ›ƒμ„ κΉ¨λœ¨λ¦¬μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. @GeorgeKnap 의 μ†”λ£¨μ…˜μ€ μΌλΆ€μ—μ„œλŠ” μž‘λ™ν•  수 μžˆμ§€λ§Œ Kacperκ°€ λ§ν–ˆλ“―μ΄ νλ¦Ών•œ μ°¨νŠΈκ°€ 생성될 수 있으며 λ†’μ΄μ˜ 크기도 μ‘°μ •λ˜κ³  κΈ€κΌ΄ 크기 등은 λ¬΄μ‹œλ©λ‹ˆλ‹€. http://jsfiddle.net/highcharts/xLz8tcrc/219 μ°Έμ‘° chart.reflow 호좜과 λ™μΌν•œ μ„€μ •: http://jsfiddle.net/highcharts/xLz8tcrc/221/. μ›ν•˜λŠ” μ†”λ£¨μ…˜μ€ μ»¨ν…Œμ΄λ„ˆ div의 크기가 쑰정될 λ•Œ 이벀트λ₯Ό μˆ˜μ‹ ν•˜λŠ” κ²ƒμ΄μ§€λ§Œ ν˜„μž¬λ‘œμ„œλŠ” μ΄λŸ¬ν•œ μ΄λ²€νŠΈκ°€ Chrome의 ResizeObserver λΏμž…λ‹ˆλ‹€.

μœ„μ˜ CSS μž¬μ •μ˜ μ†”λ£¨μ…˜μœΌλ‘œ 인해 마우슀 μ˜€λ²„(도ꡬ μ„€λͺ…) μœ„μΉ˜μ— 큰 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μˆ˜μ •ν•˜κΈ° μœ„ν•΄ CSS μž¬μ •μ˜λ₯Ό μ™„μ „νžˆ μ œκ±°ν•˜κ³  ResizeObserver κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. μƒμœ„ μš”μ†Œμ˜ 크기λ₯Ό κ΄€μ°°ν•˜κ³  차트 μ˜΅μ…˜μ—μ„œ 직접 width 및 height 속성을 λ³€κ²½ν•©λ‹ˆλ‹€.

이것은 Angular μ†”λ£¨μ…˜μ΄λ―€λ‘œ κΈ°λ³Έ DOM μš”μ†Œμ— μ•‘μ„ΈμŠ€ν•˜κΈ° μœ„ν•΄ ElementRef λ₯Ό μ‚¬μš©ν•˜κ³  λ³€κ²½ 확인을 νŠΈλ¦¬κ±°ν•˜κΈ° μœ„ν•΄ ChangeDetectorRef λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    const resizeObserver = new ResizeObserver(debounce((data: Array<ResizeObserverEntry>) => {
      if (this.chartOptions) {
        const options = { ...this.chartOptions } as Highcharts.Options;
        options.chart!.height = data[0].contentRect.height;
        options.chart!.width = data[0].contentRect.width;
        this.chartOptions = options;
        this.cd.markForCheck();
      }
    }, 200));
    resizeObserver.observe(this.elementRef.nativeElement.children[0]);

κ³΅μœ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! λ‹€μŒμ€ chart.reflow μ˜΅μ…˜μ— μ‘λ‹΅ν•˜κ³  ResizeObserver κ°€ μ§€μ›λ˜λŠ” 경우 λ‚΄μž₯된 window.onresize ν•Έλ“€λŸ¬μ˜ 바인딩을 ν•΄μ œν•˜λŠ” 일반 ν”ŒλŸ¬κ·ΈμΈμž…λ‹ˆλ‹€.

// Generic plugin that adds support for listening to container resize rather than
// window resize. As of 2018 only Chrome supports ResizeObserver.
Highcharts.wrap(Highcharts.Chart.prototype, 'setReflow', function(proceed, reflow) {

    var chart = this;

    proceed.call(this, reflow);

    if (reflow !== false && typeof ResizeObserver === 'function') {

        // Unbind window.onresize handler so we don't do double redraws
        if (this.unbindReflow) {
            this.unbindReflow();
        }

        var ro = new ResizeObserver(function () {
            chart.reflow();
        });

        ro.observe(this.renderTo);
    }
});

jsFiddleμ—μ„œ μ‹€μ‹œκ°„μœΌλ‘œ ν™•μΈν•˜μ„Έμš” .

Chart1
chart2
μ•ˆλ…•,

μ €λŠ” ν•˜μ΄ 차트λ₯Ό 처음 μ‚¬μš©ν•©λ‹ˆλ‹€. μ²¨λΆ€λœ μŠ€ν¬λ¦°μƒ·μ—μ„œ μ°¨νŠΈκ°€ μ»¨ν…Œμ΄λ„ˆμ˜ λ„ˆλΉ„λ₯Ό μ΄ˆκ³Όν•˜κ³  μžˆμŒμ„ λΆ„λͺ…νžˆ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. 아코디언을 ν΄λ¦­ν•˜λ©΄ μ—΄λ¦¬λŠ” λ™μΌν•œ νŽ˜μ΄μ§€μ— λ§Žμ€ μ°¨νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  초기 λ‘œλ“œμ—μ„œ 차트 λ„ˆλΉ„κ°€ μ»¨ν…Œμ΄λ„ˆ λ„ˆλΉ„λ₯Ό μ΄ˆκ³Όν•©λ‹ˆλ‹€.
이 λ¬Έμ œμ— λŒ€ν•œ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

μ•„λž˜λŠ” 아코디언에 λŒ€ν•œ μ½”λ“œμž…λ‹ˆλ‹€.

ν•¨μˆ˜ initsectionclicks(μ»¨ν…Œμ΄λ„ˆ) {
$('.fe-section-accordion-header', μ»¨ν…Œμ΄λ„ˆ).click(ν•¨μˆ˜() {
var λΆ€λͺ¨ μ»¨ν…Œμ΄λ„ˆ = $(this).parent();
var accordioncontainer = $(parentcontainer).find('.fe-section-accordion-container');

        if (accordioncontainer != null)
        {
            var accordioncontainerOpen = accordioncontainer.is(':visible');

            accordioncontainer[accordioncontainerOpen ? 'slideUp' : 'slideDown'](400, "swing", function() {
                ToolkitUI.Common.ResizeIFrame();
                var highChartsWrapper = $('.fe-section-chart-wrap', accordioncontainer);
                if (highChartsWrapper.length) {
                    $.each(highChartsWrapper,
                        function(index, obj) {
                            var hcObj = $(obj).highcharts();
                            if (hcObj)
                                hcObj.reflow();
                        });
                }
            });

            if (!accordioncontainerOpen)
            {
                $(accordioncontainer).ShowLoadingInsideContainer();
            }

            $(parentcontainer).find('.fe-expandcollapse').toggleClass("fe-icon-expand", accordioncontainerOpen).toggleClass("fe-icon-collapse", !accordioncontainerOpen);
            $('.fe-section-accordion-header', parentcontainer).toggleClass('highlight', !accordioncontainerOpen);
        }

        $(window).resize();
    });

    //we have to unbind any click event handlers before attaching a new one, as without unbind we will be attaching the same handler multiple times.
    //this is because we are binding the data from the start for each tab when it is clicked, which rebinds the same method again and again.
    $('.fe-accordion-expandcollapse-all', container).unbind('click').click(function () {
        var isallopen = $(this).hasClass('fe-accordion-collapse');
        var counter = 1;
        $(this).toggleClass('fe-accordion-expand', isallopen).toggleClass('fe-accordion-collapse', !isallopen);
        $('.fe-expandcollapse', container).toggleClass('fe-icon-expand', isallopen).toggleClass('fe-icon-collapse', !isallopen);
        $('.fe-section-accordion-header', container).toggleClass('highlight', !isallopen);
        $('.fe-section-accordion-container')[isallopen ? 'slideUp' : 'slideDown'](400, "swing", function () {
            if (counter == $('.fe-section-accordion-container').length) {
                ToolkitUI.Common.ResizeIFrame();
            }
            counter++;
        });

        if (!isallopen)
        {
            $('.fe-section-accordion-container').ShowLoadingInsideContainer();

        }
        $(window).resize();
    });
};

@Nagaraj2106

λ¬Έμ œμ— λŒ€ν•œ 라이브 데λͺ¨λ₯Ό μΆ”κ°€ν•˜μ—¬ 문제λ₯Ό μž¬ν˜„ν•˜κ³  λ””λ²„κ·Έν•˜κ³  κ°€λŠ₯ν•œ μ†”λ£¨μ…˜κ³Ό ν•΄κ²° 방법을 ν…ŒμŠ€νŠΈν•  수 μžˆλ„λ‘ ν•˜μ‹­μ‹œμ˜€. λ˜ν•œ 이 μ£Όμ„μ—μ„œ μ œμ•ˆλœ ν•΄κ²° 방법을 ν™•μΈν•˜μ‹­μ‹œμ˜€. https://github.com/highcharts/highcharts/issues/6427#issuecomment -438212322

μ°½ 크기 μ‘°μ • μ‹œ reflow()λ₯Ό ν˜ΈμΆœν•˜κ±°λ‚˜ ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ SO의이 닡변은 κ·Έλ ‡κ²Œν–ˆμŠ΅λ‹ˆλ‹€ .

λΆ€νŠΈμŠ€νŠΈλž© 4 ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ ν•˜μ΄ 차트λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 차트의 ν¬κΈ°λŠ” μœ„λ‘œ(λ„“κ²Œ) μ‘°μ •λ˜μ§€λ§Œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ ˆλŒ€μ μœΌλ‘œ λ§Œλ“€μ§€ μ•ŠλŠ” ν•œ μ•„λž˜λ‘œ μ‘°μ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

<div id="chart-container">
    <div id="chart"></div>
</div>

CSS둜:

#chart-container {
    position: relative;
    width: 100%;
    height: 280px;
}

#chart {
    position: absolute;
    width: 100%;
}

renderTo: 'chart' ν•˜μ—¬ 차트λ₯Ό #chart에 μ²¨λΆ€ν–ˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰