react+echart選中+雙擊恢復

在項目開發(fā)中經(jīng)常會用到各種圖表谆级,會對圖表進行一些操作曲聂,此dome以Echarts為例

// charts.tsx
import React, { FC, useRef, useMemo, useState, useEffect } from 'react'
import * as echarts from 'echarts'
import { useMount, useUpdateEffect } from 'ahooks'

export const Charts:FC<any> = (props) => {
  const chartContainer = useRef<HTMLDivElement>(null)
  const [myChart, setMyChart] = useState<echarts.ECharts | null>(null)
  
  const defaultOptions = useMemo(
    () => ({
      tooltip: {
        trigger: 'axis',
      },
      color:['red','blue'],
      legend: {
        data: [],
      },
      grid: {
        top: '30px',
        left: '40px',
        right: '15px',
        bottom: '30px',
        containLabel: true,  // 邊距自適應
      },
      xAxis: {
        type: 'time',
        boundaryGap: false,
      },
      yAxis: {
        type: 'value',
      },
      series: [{
          type: 'line',
          data: [1,2,3,4,5,6],
          sampling: 'lttb', // 數(shù)據(jù)采集颜武,大數(shù)據(jù)量需要配置
          connectNulls: true, //斷線連接
          emphasis: {
              focus: 'series',
            }
          }]
    }), [])

  useMount(() => {
    const echart = echarts.init(chartContainer.current!)
    setMyChart(echart)
  })

// 獲取xy軸最大最小值
useEffect(() => {
        if (!myChart) return
        const chartInstance = echarts.getInstanceByDom(ChartRef.current!) as any
        setTimeout(() => {
            const yAxisExtent = chartInstance.getModel().getComponent('yAxis').axis.scale._extent;
            const xAxisExtent = chartInstance.getModel().getComponent('xAxis').axis.scale._extent;
            console.log('====================================');
            console.log(xAxisExtent, yAxisExtent);
            console.log('====================================');
        }, 0);
    }, [myChart])

  // 設(shè)置 選中chart區(qū)域 展示詳情 + 雙擊恢復
  useEffect(() => {
    if (myChart) {
      myChart.setOption({
        toolbox: {
          feature: {
            dataZoom: {
              show: true,
              iconStyle: {
                opacity: 0,
              },
              title: {
                zoom: '',
                back: ''
              },
              yAxisIndex: 'none',
              brushStyle: {
                color: '#1890ff',
                opacity: 0.2
              },
            },
          },
        },
      });

      // 獲取x軸位置
      myChart.getZr().on('mousemove', (params) => {
            const pointInPixel = [params.offsetX, params.offsetY]
            if (myChart.containPixel('grid', pointInPixel)) {
                const pointInGrid = myChart.convertFromPixel({
                    seriesIndex: 0
                }, pointInPixel)
                const xIndex = pointInGrid[0]
                const data = myChart.getOption() as any
                console.log(data.xAxis[0].data[Number(xIndex)])
            }
       })
      // echarts畫布縮放
      myChart.dispatchAction({
        type: 'takeGlobalCursor',
        key: 'dataZoomSelect',
        dataZoomSelectActive: true,
      });
      // 雙擊恢復
      myChart.getZr().on('dblclick', () => {
        myChart.dispatchAction({
          type: 'dataZoom',
          // startValue: 0,
          // endValue: 100,
          start: 0,
          end: 100
        });
      });
    }
  },[])

  return <div ref="chartContainer"></div>
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末继低,一起剝皮案震驚了整個濱河市狂丝,隨后出現(xiàn)的幾起案子仍源,更是在濱河造成了極大的恐慌泵琳,老刑警劉巖摄职,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異获列,居然都是意外死亡谷市,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門击孩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迫悠,“玉大人,你說我怎么就攤上這事巩梢〈葱梗” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵括蝠,是天一觀的道長鞠抑。 經(jīng)常有香客問我,道長忌警,這世上最難降的妖魔是什么碍拆? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮慨蓝,結(jié)果婚禮上感混,老公的妹妹穿的比我還像新娘。我一直安慰自己礼烈,他們只是感情好弧满,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著此熬,像睡著了一般者填。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上经窖,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音扶关,去河邊找鬼。 笑死数冬,一個胖子當著我的面吹牛节槐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拐纱,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼铜异,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了秸架?” 一聲冷哼從身側(cè)響起揍庄,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎东抹,沒想到半個月后蚂子,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡缭黔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年食茎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片试浙。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡董瞻,死狀恐怖寞蚌,靈堂內(nèi)的尸體忽然破棺而出田巴,到底是詐尸還是另有隱情,我是刑警寧澤挟秤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布壹哺,位于F島的核電站,受9級特大地震影響艘刚,放射性物質(zhì)發(fā)生泄漏管宵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一攀甚、第九天 我趴在偏房一處隱蔽的房頂上張望箩朴。 院中可真熱鬧秋度,春花似錦、人聲如沸荚斯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滥壕。三九已至纸颜,卻和暖如春绎橘,著一層夾襖步出監(jiān)牢的瞬間胁孙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工金踪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浊洞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓胡岔,卻偏偏與公主長得像法希,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子靶瘸,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你苫亦,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,732評論 2 59
  • 寫在前面的話第一次接觸到大屏可視化的時候怨咪,毫無頭緒屋剑,習慣性打開簡書和掘金,在上面搜索優(yōu)秀的大佬們的解決方案诗眨,看過多...
    原始l閱讀 6,216評論 0 2
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,938評論 2 89
  • 這是之前接觸過的圖標庫唉匾,最近項目又重新用到關(guān)于圖表方面。由于之前沒有整理出匠楚,單獨的相關(guān)內(nèi)容巍膘,每次需要重新查閱,所以...
    EasyZ閱讀 229評論 0 0
  • 在我們的日常開發(fā)中芋簿,我們經(jīng)常需要引入各種各樣的第三方模塊來幫助我們提升開發(fā)速度峡懈。但是有時候這些模塊里面又包含了許多...
    西麥smile閱讀 1,434評論 0 1