sy-data-zoom

Data Zoom

대상 차트의 표시 범위를 슬라이더로 바꿉니다.

sy-data-zoom

넓은 데이터 범위에서 관심 구간을 선택하게 하세요.

독립 데이터 차트가 아닙니다. 대상 차트와 같은 문서에 두고 for에 고유 id를 지정하세요.

기본 차트 등급: Community. 추가 렌더러·커스텀 브랜딩 등 기능의 권한은 별도입니다.

입력데이터 설명
for연결할 대상 차트의 id입니다.
showLabels양끝의 범위 레이블 표시 여부입니다.
axis대상의 어떤 축을 제어할지 지정합니다.

전체 적용 예제

html
<div id="chart-container" style="width: 100%; min-width: 0;"></div>

<script type="module">
  import { defineCustomElement as define0 } from '@syidax/advanced/components/sy-line-chart.js';
  import { defineCustomElement as define1 } from '@syidax/advanced/components/sy-data-zoom.js';
  define0();
  define1();

  const specs = [
    {
      "tag": "sy-line-chart",
      "id": "chart-target",
      "props": {
        "engine": "standard",
        "series": [
          {
            "name": "Organic",
            "color": "#8263d9",
            "values": [24, 29, 27, 38, 43, 40, 52, 58, 53, 68, 76, 84]
          },
          {
            "name": "Direct",
            "color": "#239c91",
            "values": [15, 19, 17, 24, 22, 29, 32, 30, 39, 42, 40, 51]
          },
          {
            "name": "Referral",
            "color": "#e99954",
            "values": [8, 11, 9, 15, 13, 19, 17, 23, 22, 28, 25, 33]
          }
        ],
        "xAxis": {
          "kind": "category",
          "categories": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]
        },
        "yAxis": {
          "kind": "linear",
          "min": 0
        },
        "zoom": {
          "enabled": true
        },
        "height": 280,
        "width": 640
      }
    },
    {
      "id": "example-chart",
      "tag": "sy-data-zoom",
      "props": {
        "for": "chart-target",
        "showLabels": true,
        "width": 640,
        "height": 36
      }
    }
  ];
  const container = document.querySelector('#chart-container');
  const elements = specs.map(({ tag, id, props }) => {
    const element = document.createElement(tag);
    element.id = id;
    Object.assign(element, props);
    element.setAttribute('aria-label', 'data-zoom 예제 차트');
    return element;
  });
  container.replaceChildren(...elements);
  const chart = elements.at(-1);
  const onEvent = event => {
    console.log('rangeChange', event.detail);
  };
  chart.addEventListener('rangeChange', onEvent);
  const observer = new ResizeObserver(([entry]) => {
    const width = Math.max(160, Math.floor(entry.contentRect.width));
    elements.forEach(element => { element.width = width; });
  });
  observer.observe(container);

  // SPA에서는 화면이 해제될 때 이 함수를 호출하세요.
  function disposeChart() {
    observer.disconnect();
    chart.removeEventListener('rangeChange', onEvent);
    container.replaceChildren();
  }
</script>

Properties

for

연결할 대상 차트의 id입니다.

항목값
JavaScript 프로퍼티for
HTML attributefor
타입string
기본값undefined

undefined는 이 속성을 명시하지 않은 상태입니다. 실제 표시 값은 차트 종류와 다른 설정에 따라 결정될 수 있습니다.

target

The chart element to drive (the script-set alternative to for).

항목값
JavaScript 프로퍼티target
HTML attribute객체·배열·콜백은 JavaScript 프로퍼티로 전달
타입DataZoomTargetElement | null
기본값undefined

undefined는 이 속성을 명시하지 않은 상태입니다. 실제 표시 값은 차트 종류와 다른 설정에 따라 결정될 수 있습니다.

orientation

'horizontal' drives the x window, 'vertical' the y window.

항목값
JavaScript 프로퍼티orientation
HTML attributeorientation
타입DataZoomOrientation
기본값'horizontal'
허용값vertical, horizontal

axis

대상의 어떤 축을 제어할지 지정합니다.

항목값
JavaScript 프로퍼티axis
HTML attribute객체·배열·콜백은 JavaScript 프로퍼티로 전달
타입CartesianAxisId
기본값undefined

undefined는 이 속성을 명시하지 않은 상태입니다. 실제 표시 값은 차트 종류와 다른 설정에 따라 결정될 수 있습니다.

width

차트의 너비를 px 단위로 지정합니다. 컨테이너 너비가 변하는 앱에서는 ResizeObserver에서 width를 갱신하세요.

항목값
JavaScript 프로퍼티width
HTML attributewidth
타입number
기본값640

height

차트의 높이를 px 단위로 지정합니다. 축, 제목과 범례가 차지하는 공간을 함께 고려하세요.

항목값
JavaScript 프로퍼티height
HTML attributeheight
타입number
기본값28

minRangePx

The narrowest window, in track pixels (default 8).

항목값
JavaScript 프로퍼티minRangePx
HTML attributemin-range-px
타입number
기본값8

stepFraction

Fraction of the window one arrow key moves (default 0.1).

항목값
JavaScript 프로퍼티stepFraction
HTML attributestep-fraction
타입number
기본값0.1

showLabels

양끝의 범위 레이블 표시 여부입니다.

항목값
JavaScript 프로퍼티showLabels
HTML attributeshow-labels
타입boolean
기본값true

format

Label formatter (default: up to two decimals).

항목값
JavaScript 프로퍼티format
HTML attribute객체·배열·콜백은 JavaScript 프로퍼티로 전달
타입(value: number) => string
기본값undefined

undefined는 이 속성을 명시하지 않은 상태입니다. 실제 표시 값은 차트 종류와 다른 설정에 따라 결정될 수 있습니다.

disabled

HTML attribute 또는 JavaScript 프로퍼티로 설정합니다. 타입: boolean.

항목값
JavaScript 프로퍼티disabled
HTML attributedisabled
타입boolean
기본값false

Events

rangeChange

Every window the slider shows: gestures / keys ('slider'), the chart moving on its own ('chart'), setWindow ('api').

이벤트 이름: rangeChange. 대소문자를 구분합니다. payload는 CustomEvent<DataZoomRangeChangeEventDetail>의 detail에서 읽습니다.

javascript
chart.addEventListener('rangeChange', event => {
  console.log(event.detail); // DataZoomRangeChangeEventDetail
});

Methods

refresh

Re-read the target's extent and window (the slider also does this on the target's rendered and zoomChange).

typescript
refresh(): Promise<void>

반환 타입: Promise<void>. 요소 등록이 끝난 뒤 메서드를 호출하고 Promise 결과를 await로 기다리세요.

setWindow

Set the window from script (null = the full extent); the chart follows with zoomChange.source = 'api'.

typescript
setWindow(window: CartesianZoomWindow | readonly [number, number] | null): Promise<CartesianZoomWindow | null>
인수타입필수 여부
windowCartesianZoomWindow | readonly [number, number] | null필수

반환 타입: Promise<CartesianZoomWindow | null>. 요소 등록이 끝난 뒤 메서드를 호출하고 Promise 결과를 await로 기다리세요.

getWindow

비동기 메서드입니다. 아래 인수 타입과 반환 타입을 확인하세요.

typescript
getWindow(): Promise<CartesianZoomWindow | null>

반환 타입: Promise<CartesianZoomWindow | null>. 요소 등록이 끝난 뒤 메서드를 호출하고 Promise 결과를 await로 기다리세요.

getExtent

비동기 메서드입니다. 아래 인수 타입과 반환 타입을 확인하세요.

typescript
getExtent(): Promise<ZoomExtent | null>

반환 타입: Promise<ZoomExtent | null>. 요소 등록이 끝난 뒤 메서드를 호출하고 Promise 결과를 await로 기다리세요.