电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Echarts自定義圖形的方法參考

瀏覽:162日期:2022-06-01 13:43:36
目錄
  • 前言
  • 1.自定義圖形最后的效果是這樣的:
  • 2.注冊自定義的圖形
  • 3.extendShape
  • 4.使用echarts注冊這三個圖形
  • 5.使用自定義的形狀
  • 總結(jié)

前言

在一個前端大屏項(xiàng)目中,有一個模塊使用到了自定義的,由三個面組成的偽3D柱形圖。在此處記錄一下,方便后續(xù)自定義的時候參考一下。涉及到了zrender里面的一些方法,還特意去zrender看了些示例和文檔。

1.自定義圖形最后的效果是這樣的:

圖形由三個面組成,需要定義三個形狀。用cubeleft,cubetop,cuberight來分別定義左側(cè)面,頂部面以及右側(cè)面。

2.注冊自定義的圖形

echarts官方文檔處:Documentation - Apache ECharts

我們需要定義一個這樣的類,然后再通過echarts來注冊這個類,后續(xù)就可以通過類名來使用了。

3.extendShape

    // 繪制左側(cè)面    const CubeLeft = echarts.graphic.extendShape({    shape: {x: 0,y: 0    },    buildPath: function(ctx, shape) {const xAxisPoint = shape.xAxisPointconst c0 = [shape.x, shape.y]const c1 = [shape.x - 13, shape.y - 13]const c2 = [xAxisPoint[0] - 13, xAxisPoint[1] - 13]const c3 = [xAxisPoint[0], xAxisPoint[1]]ctx.moveTo(c0[0], c0[1]).lineTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).closePath()    }     })    // 繪制右側(cè)面    const CubeRight = echarts.graphic.extendShape({    shape: {x: 0,y: 0    },    buildPath: function(ctx, shape) {const xAxisPoint = shape.xAxisPointconst c1 = [shape.x, shape.y]const c2 = [xAxisPoint[0], xAxisPoint[1]]const c3 = [xAxisPoint[0] + 18, xAxisPoint[1] - 9]const c4 = [shape.x + 18, shape.y - 9]ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath()    }})    // 繪制頂面    const CubeTop = echarts.graphic.extendShape({    shape: {x: 0,y: 0    },    buildPath: function(ctx, shape) {const c1 = [shape.x, shape.y]const c2 = [shape.x + 18, shape.y - 9]const c3 = [shape.x + 5, shape.y - 22]const c4 = [shape.x - 13, shape.y - 13]ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath()    }     })

這段代碼主要是看buildpath如何使用,zrender的官方文檔中,并沒有直接告訴這個方法的兩個參數(shù)是干什么用的,只給了一個示例,從這個示例中,可以知道這兩個參數(shù)具體怎么用。

示例網(wǎng)址:https://github.com/ecomfe/zrender/blob/master/test/pin.html

第一個參數(shù)是path,第二參數(shù)是shape。path可以理解為一個canvas中的繪制畫筆,可以設(shè)置路徑并且閉合路徑。

第二個參數(shù)在echarts中,是自定義的custom傳遞過來的,因此可以通過這個對象獲取到我們一個很熟悉的屬性 xAxisPoint。

繪制的兩個面中,只有左側(cè)和右側(cè)面需要有填充高度,頂部不需要,所以頂部的形狀就沒有使用xAxisPoint這個屬性。

這也是很好理解的,因?yàn)槲覀冏远x的偽圓柱體里面的填充物肯定是有一個高度的。填充多少根據(jù)我們的數(shù)據(jù)來知道,讓它看起來確實(shí)是被某種東西從底部開始增多填充了。

拿比較簡單的頂部來舉例:

buildPath: function(ctx, shape) {    const c1 = [shape.x, shape.y]    const c2 = [shape.x + 18, shape.y - 9]    const c3 = [shape.x + 5, shape.y - 22]    const c4 = [shape.x - 13, shape.y - 13]    ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0],c4[1]).closePath()}

繪制的四邊形,其實(shí)就是四個頂點(diǎn),我們只需要用moveTo來控制路徑就行,在最后那個點(diǎn)進(jìn)行閉合就行。偏移量是固定的值,可以根據(jù)情況自己去設(shè)置不同的值來扭曲這個四邊形。

其中c1是底部的頂點(diǎn),c2是右側(cè)的頂點(diǎn),c3是頂部的頂點(diǎn),c4是右側(cè)的頂點(diǎn)。其他兩個面也是類似的。

4.使用echarts注冊這三個圖形

// 注冊三個面圖形    echarts.graphic.registerShape("CubeLeft", CubeLeft)    echarts.graphic.registerShape("CubeRight", CubeRight)    echarts.graphic.registerShape("CubeTop", CubeTop)

5.使用自定義的形狀

其他的數(shù)據(jù)都和正常使用echarts一樣,不同的地方在于series的配置。

series數(shù)組中,總共放置二個對象。第一個對象如下:

{type: "custom",renderItem: function(params, api) {    const location = api.coord([api.value(0), api.value(1)])    return {type: "group",children: [{    type: "CubeLeft",    shape: {api,x: location[0],y: location[1],xAxisPoint: api.coord([api.value(0), 0])    },    style: {fill: "rgba(47,102,192,.27)",stroke: "black"    },    z2: 999}, {    type: "CubeRight",    shape: {api,x: location[0],y: location[1],xAxisPoint: api.coord([api.value(0), 0])    },    style: {fill: "rgba(59,128,226,.27)",stroke: "black"    },    z2: 999}, {    type: "CubeTop",    shape: {api,x: location[0],y: location[1],xAxisPoint: api.coord([api.value(0), 0])    },    style: {fill: "rgba(72,156,221,.27)",stroke: "black"    },    z2: 999}]    }},data: MAX}

最主要的還是renderItem里面的邏輯,這個方法返回一個對象,對象就是我們自定義的一個group組。renderItem可以返回的對象在文檔中都有說明:Documentation - Apache ECharts

我們定義的那三個面,需要把它看成一個整體,所以renderItem返回的是一個類型為group的對象,另外三個形狀作為children保存在數(shù)組中。

其中的shape參數(shù),會在buildpath中使用到。

style中設(shè)置了它的填充顏色和邊框線顏色。然后使用z2定義這個echarts的顯示層級為最上級。如果不使用它,下面用于填充的會將其遮擋住。

這里也只是定義了第一個自定義的形狀,也就是最外層的那個偽3d柱體。第二個自定義形狀是要填充的形狀。

{type: "custom",renderItem: (params, api) => {    const location = api.coord([api.value(0), api.value(1)])    var color = new echarts.graphic.LinearGradient(0, 0, 0, 1, [{offset: 1,color: "#FEFD53"    },    {offset: 0,color: "#f7c824"    }]    );    return {type: "group",children: [{    type: "CubeLeft",    shape: {api,xValue: api.value(0),yValue: api.value(1),x: location[0],y: location[1],xAxisPoint: api.coord([api.value(0), 0])    },    style: {fill: color,stroke: "red"    }}, {    type: "CubeRight",    shape: {api,xValue: api.value(0),yValue: api.value(1),x: location[0],y: location[1],xAxisPoint: api.coord([api.value(0), 0])    },    style: {fill: color,stroke: "red"    }}, {    type: "CubeTop",    shape: {api,xValue: api.value(0),yValue: api.value(1),x: location[0],y: location[1],xAxisPoint: api.coord([api.value(0), 0])    },    style: {fill: color,stroke: "red"    }}]    }},data: VALUE}

內(nèi)部填充的圖形,使用了一個線性漸變的顏色用來填充。邊框線使用紅色。與第一個不同的是,style里面的風(fēng)格,以及data使用的數(shù)據(jù)。這里的data使用value具體的數(shù)值。而外殼的圖形使用的數(shù)據(jù)是max最大值。這樣就會有一個漸變顏色填充的紅色邊框圖形,填充到了一個黑色邊框的柱體中。

這樣就自定義好了一個視覺上的3d柱體形狀的圖表了。

總結(jié)

到此這篇關(guān)于Echarts自定義圖形的文章就介紹到這了,更多相關(guān)Echarts自定義圖形內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JavaScript
主站蜘蛛池模板: 不锈钢轴流风机,不锈钢电机-许昌光维防爆电机有限公司(原许昌光维特种电机技术有限公司) | 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网| 上海公司注册-代理记账-招投标审计-上海昆仑扇财税咨询有限公司 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 土壤养分检测仪|土壤水分|土壤紧实度测定仪|土壤墒情监测系统-土壤仪器网 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 棕刚玉_白刚玉_铝酸钙-锐石新材料 | atcc网站,sigma试剂价格,肿瘤细胞现货,人结肠癌细胞株购买-南京科佰生物 | 浙江皓格药业有限公司| 活性炭-蜂窝-椰壳-柱状-粉状活性炭-河南唐达净水材料有限公司 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 东莞工作服_东莞工作服定制_工衣订做_东莞厂服 | 东莞喷砂机-喷砂机-喷砂机配件-喷砂器材-喷砂加工-东莞市协帆喷砂机械设备有限公司 | 范秘书_懂你的范文小秘书| 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 工装定制/做厂家/公司_工装订做/制价格/费用-北京圣达信工装 | 悬浮拼装地板_幼儿园_篮球场_悬浮拼接地板-山东悬浮拼装地板厂家 | 中原网视台| 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 | 铝扣板-铝方通-铝格栅-铝条扣板-铝单板幕墙-佳得利吊顶天花厂家 elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 仿真植物|仿真树|仿真花|假树|植物墙 - 广州天昆仿真植物有限公司 | 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 云阳人才网_云阳招聘网_云阳人才市场_云阳人事人才网_云阳人家招聘网_云阳最新招聘信息 | 免联考国际MBA_在职MBA报考条件/科目/排名-MBA信息网 | 结晶点测定仪-润滑脂滴点测定仪-大连煜烁 | 无锡市珂妮日用化妆品有限公司|珂妮日化官网|洗手液厂家 | 大米加工设备|大米加工机械|碾米成套设备|大米加工成套设备-河南成立粮油机械有限公司 | 汽车润滑油厂家-机油/润滑油代理-高性能机油-领驰慧润滑科技(河北)有限公司 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 |