摘要:說到這里可能會有點繞,里的也是一個對,高亮為,取消為,和里的表現效果恰恰相反。
需求部分
在開發項目的時候遇到一個需求,就是如何保證echarts圖表里至少顯示一個圖例的數據(也就是最后一個圖例不能變成unselected的狀態)
下圖是最初加載時的畫面
不想出現圖例都被點擊取消導致圖表只有一個坐標軸,太丑了
參考依據在發帖前查閱了一些思路:
有用單選模式曲線救國的,但是就沒有辦法看到多條圖例的數據在同一個圖表里顯示
有圖例為最后一個的時候,禁用所有圖例的點擊事件
都不是能夠很好的解決,找到一個可以參考的代碼
var option = { title: { text: "折線圖堆疊" }, tooltip: { trigger: "axis" }, legend: { data:["郵件營銷","聯盟廣告","視頻廣告","直接訪問","搜索引擎"] }, grid: { left: "3%", right: "4%", bottom: "3%", containLabel: true }, toolbox: { feature: { saveAsImage: {} } }, xAxis: { type: "category", boundaryGap: false, data: ["周一","周二","周三","周四","周五","周六","周日"] }, yAxis: { type: "value" }, series: [ { name:"郵件營銷", type:"line", stack: "總量", data:[120, 132, 101, 134, 90, 230, 210] }, { name:"聯盟廣告", type:"line", stack: "總量", data:[220, 182, 191, 234, 290, 330, 310] }, { name:"視頻廣告", type:"line", stack: "總量", data:[150, 232, 201, 154, 190, 330, 410] }, { name:"直接訪問", type:"line", stack: "總量", data:[320, 332, 301, 334, 390, 330, 320] }, { name:"搜索引擎", type:"line", stack: "總量", data:[820, 932, 901, 934, 1290, 1330, 1320] } ] }; myChart.setOption(option); myChart.on("legendselectchanged", function (params) { let option = this.getOption(); let select_key = Object.keys(params.selected); if (!params.selected[params.name]) { select_key.map(res => { option.legend[0].selected[res] = !params.selected[res];//只點擊了一個圖例,所以select_key里只有被選中的為false, //對應的option.legend[0].selected[res]值就為true, //即為高亮狀態,其他的都取消顯示,通俗的講就成了單選模式 }); } else { select_key.map(res => { option.legend[0].selected[res] = false;//先讓所有圖例下的數據顯示狀態為false }); option.legend[0].selected[params.name] = true;//再讓你選中的那個圖例的顯示狀態變為true } this.setOption(option) });分析依據
關鍵代碼就是myChart.on("legendselectchanged", function (params){...}部分,這里涉及到了echarts里如何獲取legend的點擊事件,但是查看文檔后沒有示例不會寫怎么辦?沒關系,用上面的示例代碼,我們把代碼里不明白的變量都打印出來分析一下例如console.log("params",params)和console.log("option",option),打印出來后,對照著官方文檔一看就清晰明了很多,這段截圖后面我會補上。
下面說一下上面的這段代碼的意思,select_key是legend圖例選中狀態的對應key-value對json,高亮的為false,取消的是true(這里和咱們理解的高亮為true是相反的),進入if語句后用map將select_key中的每一個元素遍歷使得option.legend[0].selected[res]值為select_key里boolean值的相反值。
說到這里可能會有點繞,option.legend[0]里的selected也是一個key-value對json,高亮為true,取消為false,和select_key里的表現效果恰恰相反。
所以,這段代碼的實現效果就是,當圖例均為高亮時select_key = {"a":false,"b":false,"c":false,"d":false},點擊b圖例,此時select_key["b"]=true,于是進入了else代碼塊,如上面代碼注釋所寫,圖例由多變一,此時select_key = {"a":true,"b":false,"c":true,"d":true},這時候有兩種操作:
再次點擊b圖例后select_key = {"a":true,"b":true,"c":true,"d":true},圖例狀態均為不顯示的狀態,此時代碼進入if代碼塊,所有的圖例狀態變成相反值,于是四個圖例全部被選中,圖表顯示四條折線
點擊其他圖例,比如c,同理進入else代碼塊后,所有狀態為不顯示,再給選中的c圖例重新賦值使其顯示
解決方案OK,到這里我們就明白了上面那段代碼到底是什么意思了,所以究竟該如何實現我們需要的功能呢,有意思的是Object.values(params.selected)會返回一個圖例選中態的布爾值數組,相當于重組了我們之前聲明的select_key里各項的value值,我們只需在這個布爾值數組里只有一個false的時候,手動將其顯示狀態重新賦值為true即可(option.legend[0].selected[params.name] = true;)
話不多說上代碼
myChart.on("legendselectchanged", function (params) { let option = this.getOption(); let select_key = Object.keys(params.selected); let select_value = Object.values(params.selected); console.log("select_value",select_value,"length",select_value.length) var n = 0; select_value.map(res => { if(!res){ n++; } }); console.log("n",n) if( n ==select_value.length){ //如果最后一個圖例點擊后select_key里的選中態會變為false, //既有四個false,當有4個false的時候將最后選中的圖例的實際顯示值改為true option.legend[0].selected[params.name] = true; } this.setOption(option) });
第一次寫博文總結,可能有點表述不清,還請見諒,歡迎討論
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/52778.html
摘要:說到這里可能會有點繞,里的也是一個對,高亮為,取消為,和里的表現效果恰恰相反。 需求部分 在開發項目的時候遇到一個需求,就是如何保證echarts圖表里至少顯示一個圖例的數據(也就是最后一個圖例不能變成unselected的狀態)下圖是最初加載時的畫面showImg(https://segmentfault.com/img/bVbeDxo?w=1543&h=513); 不想出現圖例都被...
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:同行這么做使用實現圓形進度條前端掘金在開發微信小程序的時候,遇到圓形進度條的需求。實現也談數組去重前端掘金的數組去重是一個老生常談的話題了。百度前端技術學院自定義前端掘金一標簽概念元素表示用戶界面中項目的標題。 閑話圖片上傳 - 掘金作者:孫輝,美團金融前端團隊成員。15年畢業加入美團,相信技術,更相信技術只是大千世界里知識的一種,個人博客: https://sunyuhui.com ...
閱讀 2289·2021-11-24 09:38
閱讀 1986·2021-11-22 14:44
閱讀 1150·2021-07-29 13:48
閱讀 2615·2019-08-29 13:20
閱讀 1115·2019-08-29 11:08
閱讀 2046·2019-08-26 10:58
閱讀 1264·2019-08-26 10:55
閱讀 3149·2019-08-26 10:39