亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

微信小程序Echarts動(dòng)態(tài)使用及圖表層級踩坑解決方案

 更新時(shí)間:2023年03月16日 14:53:18   作者:蠟筆小心_  
這篇文章主要為大家介紹了微信小程序Echarts動(dòng)態(tài)使用及圖表層級踩坑解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

最近收到一個(gè)需求,要在小程序上去做數(shù)據(jù)看板,能讓公司運(yùn)營和老板看到那些銷售的數(shù)據(jù)情況。

這就導(dǎo)致需要我去重新?lián)炱餎charts了,距離上一次用它還是五年前了吧。

不過好在現(xiàn)在的Echarts已經(jīng)能很好的適配微信小程序了,不需要處理一些額外的bug,只需要看著官方的案例和文檔去做就行。

但是,官方給的Echarts示例都是簡易的、靜態(tài)的,數(shù)據(jù)也都是固定的,還得需要自己去做動(dòng)態(tài)適配,在做的過程中,還發(fā)現(xiàn)了當(dāng)使用Vant組件彈出層置頂?shù)臅r(shí)候,底部的Echarts圖的層級會(huì)蓋住彈出層的層級。

查了Echarts文檔和微信小程序文檔之后,發(fā)現(xiàn)Echarts是用canvas去繪制的,而小程序中原生的canvas組件層級是最高的。

介紹一下Echarts for weixin

  • Echarts-for-weixin是一種數(shù)據(jù)可視化庫,可以幫助開發(fā)者為微信小程序創(chuàng)建交互式圖表和圖形。
  • 它是Echarts庫的一個(gè)子集,專門為Web應(yīng)用程序設(shè)計(jì)而來。
  • Echarts-for-weixin為開發(fā)者提供了一個(gè)簡單易用的界面,以創(chuàng)建可自定義的圖表和圖形,可以嵌入微信小程序中。
  • 它支持許多不同類型的圖表,包括折線圖、柱狀圖、餅圖、散點(diǎn)圖等等。

點(diǎn)擊進(jìn)入官方源碼倉庫(github鏡像倉庫)

導(dǎo)入源碼

通過倉庫里面的介紹,我們可以直接下載代碼,并導(dǎo)入到微信開發(fā)者工具中。(以下是導(dǎo)入后并運(yùn)行起來的效果)

可以看到圖表示例中包含了所有常用的Echarts實(shí)例,并且根據(jù)小程序的特性,給出了延遲加載、單頁面多圖表、頁面阻塞、保存文件等實(shí)例。

文件夾

  • ec-canvas:我們需要復(fù)制到自己項(xiàng)目中,作為一個(gè)子組件去使用的文件。
  • pages:可以根據(jù)當(dāng)前圖表示例查看對應(yīng)的源碼文件

需要注意的是,官方示例中的ec-canvas文件中包含了所有圖表代碼,我們可以根據(jù)自己的需求去自定義構(gòu)建圖表,從而降低代碼的大小。點(diǎn)擊進(jìn)入自定義圖表鏈接

了解源碼

我們可以隨意打開一個(gè)示例圖表,點(diǎn)擊開發(fā)工具下方的頁面路徑,可以進(jìn)入到對應(yīng)圖表的js文件中。

  • 我打開了一個(gè)餅狀圖示例

  • 根據(jù)官方提供的源碼,我們可以看到定義的內(nèi)容如下:
<view class="container">
  <ec-canvas id="mychart-dom-pie" canvas-id="mychart-pie" ec="{{ ec }}"></ec-canvas>
</view>
  • 在頁面上使用 ec-canvas 組件,需要定義 canvas 的id 和 ec(會(huì)在js中定義 ec)
import * as echarts from '../../ec-canvas/echarts';
const app = getApp();
function initChart(canvas, width, height, dpr) {
  const chart = echarts.init(canvas, null, {
    width: width,
    height: height,
    devicePixelRatio: dpr // new
  });
  canvas.setChart(chart);
  var option = {
    backgroundColor: "#ffffff",
    series: [{
      label: {
        normal: {
          fontSize: 14
        }
      },
      type: 'pie',
      center: ['50%', '50%'],
      radius: ['20%', '40%'],
      data: [{
        value: 55,
        name: '北京'
      }, {
        value: 20,
        name: '武漢'
      }, {
        value: 10,
        name: '杭州'
      }, {
        value: 20,
        name: '廣州'
      }, {
        value: 38,
        name: '上海'
      }]
    }]
  };
  chart.setOption(option);
  return chart;
}
Page({
  data: {
    ec: {
      onInit: initChart
    }
  }
});
  • 首行import表示引入當(dāng)前 ec-canvas 組件
  • initChart方法用于定義canvas、echarts中的option的內(nèi)容,并渲染到canvas上
  • 在data中定義了一個(gè)ec的對象,里面的 onInit 引入上面的 initChart 方法

動(dòng)態(tài)Echarts for weixin

通過閱讀不同的Echarts示例源碼,我們只是了解了Echarts在小程序中的使用過程,但是我們在實(shí)際運(yùn)用中,是需要和后端進(jìn)行接口對接等動(dòng)態(tài)操作數(shù)據(jù)的。

動(dòng)態(tài)的過程,對于頁面上組件其實(shí)是不需要改動(dòng)的,可以直接按照官方示例去寫。我們只需要修改小程序中 js 的邏輯即可。

  • 下面是以折線圖為例去實(shí)現(xiàn)動(dòng)態(tài)效果
<view class="echarts_wrapper">
  <ec-canvas id="data-trend-chart" canvas-id="data-trend-chart" ec="{{ ecTrend }}"></ec-canvas>
</view>

這里需要注意的是,需要在 ec-canvas 外面包一層元素,并指定寬高,否則 canvas 會(huì)無法渲染出來。

data: {
    ecTrend: { // echarts初始化
      lazyLoad: true
    },
}
  • 需要在data 中定義一個(gè)值 ecTrend 和頁面中的 ec 對應(yīng)
  • 將 lazyLoad 設(shè)為 true 后,需要手動(dòng)初始化圖表(即懶加載)
/**
* 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
*/
onReady() {
    // 初始化數(shù)據(jù)趨勢 echarts
    this.ecDataTrendComponent = this.selectComponent('#data-trend-chart');
    this.getTrend()
}
  • 既然需要手動(dòng)初始化,那么我們就需要在進(jìn)入頁面時(shí)的生命周期中進(jìn)行初始化
  • selectComponent 中對應(yīng)頁面中的canvas id(id是頁面中唯一值,如果有多個(gè)圖表時(shí),不可重復(fù))
  • getTrend 是用來讀取接口數(shù)據(jù)的方法(下面會(huì)使用 setTimeout 去代替接口請求)
getTrend() {
    setTimeout(() => {
        // 初始化完成之后,直接獲取后臺數(shù)據(jù)進(jìn)行繪制canvas
        this.ecDataTrendComponent.init((canvas, width, height, dpr) => {
            // 獲取組件的 canvas、width、height 后的回調(diào)函數(shù)
            // 在這里初始化圖表
            const chart = echarts.init(canvas, null, {
              width: width,
              height: height,
              devicePixelRatio: dpr // new
            });
            let xAxis = ["3.1","3.2","3.3","3.4","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.15","3.16","3.17","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.29","3.30","3.31"]
            let series = [{"data":[0,0,0,0,0,0,0,0,1,0,0,0,0,17],"name":"單量","type":"line"}]
            // 將后臺的值傳遞給 setTrendOption 方法
            setTrendOption(chart, xAxis, series);
            // 將圖表實(shí)例綁定到 this 上,可以在其他成員函數(shù)(如 dispose)中訪問
            this.ecDataTrendChart = chart;
            // 注意這里一定要返回 chart 實(shí)例,否則會(huì)影響事件處理等
            return chart;
        });
    }, 0)
},
  • init方法和官方源碼中的示例差不多,就是用來定義canvas中的值,并將接口中獲取到的數(shù)據(jù)傳遞給外部定義的方法中。
  • setTrendOption 中傳入了當(dāng)前實(shí)例,和兩個(gè)參數(shù)(參數(shù)均由后端接口返回,此處定義成靜態(tài)數(shù)據(jù))
  • 最后將初始化圖表的實(shí)例綁定并返回。

這里需要注意一下,必須要返回實(shí)例,否則頁面上無法渲染出圖表數(shù)據(jù)

function setTrendOption(chart, xAxis, series) {
  const option = {
    tooltip: {
      show: true,
      trigger: 'axis'
    },
    grid: {
      top: '10',
      left: '5',
      right: '5',
      bottom: '10',
      containLabel: true
    },
    toolbox: {
      show: false
    },
    xAxis: {
      type: 'category',
      boundaryGap: false,
      data: xAxis
    },
    yAxis: {
      type: 'value'
    },
    series: series
  };
  chart.setOption(option);
}
  • setTrendOption 方法需要定義在 Page 方法外部
  • xAxis 接收到的參數(shù)用于定義 X 坐標(biāo)軸的 data
  • series 接收到的參數(shù)直接用于它本身即可

后端接口返回的數(shù)據(jù)可能有差異,可以根據(jù)不同的參數(shù)進(jìn)行適配(具體參數(shù)可參見Echarts官方文檔說明)

數(shù)據(jù)展示

根據(jù)上方代碼,我們可以生成對應(yīng)的數(shù)據(jù)圖表

踩坑系列(持續(xù)更新)

圖表層級

當(dāng)我們點(diǎn)擊日期彈出層時(shí),會(huì)發(fā)現(xiàn)數(shù)據(jù)趨勢的圖表層級置于最頂端了,那么我們就需要對圖表的層級進(jìn)行修改。

由于小程序的限制,原生組件的層級是頂級的且無法修改的,那么我們就只能對圖表進(jìn)行顯示和隱藏操作。

wx:if vs hidden (此部分是在微信官方文檔中摘錄)

  • 因?yàn)?nbsp;wx:if 之中的模板也可能包含數(shù)據(jù)綁定,所以當(dāng) wx:if 的條件值切換時(shí),框架有一個(gè)局部渲染的過程,因?yàn)樗鼤?huì)確保條件塊在切換時(shí)銷毀或重新渲染。

  • 同時(shí) wx:if 也是惰性的,如果在初始渲染條件為 false,框架什么也不做,在條件第一次變成真的時(shí)候才開始局部渲染。

  • 相比之下,hidden 就簡單的多,組件始終會(huì)被渲染,只是簡單的控制顯示與隱藏。

  • 一般來說,wx:if 有更高的切換消耗而 hidden 有更高的初始渲染消耗。因此,如果需要頻繁切換的情景下,用 hidden 更好,如果在運(yùn)行時(shí)條件不大可能改變則 wx:if 較好。

根據(jù)微信文檔中的說明,我們不需要使用 wx:if,可以使用 hidden 來代替。

<view class="echarts_wrapper" hidden="{{calendarShow}}">
  <ec-canvas id="data-trend-chart" canvas-id="data-trend-chart" ec="{{ ecTrend }}"></ec-canvas>
</view>
  • 我們可以在 ec-canvas 外部包裹的層級元素中使用 hidden來定義canvas顯示和隱藏
  • 當(dāng) calendarShow 為 true 時(shí),則是日歷彈出層顯示的時(shí)候,此時(shí)就需要隱藏 canvas 元素

總結(jié)

此文主要是記錄 Echarts-for-weixin 的使用過程,通過官方的靜態(tài)源碼衍生出動(dòng)態(tài)使用方式。

在開發(fā)過程中有很多避免不了的坑需要去踩,仔細(xì)研究一下官方文檔,可以解決大部分的坑。

以上就是微信小程序Echarts動(dòng)態(tài)使用及圖表層級踩坑解決方案的詳細(xì)內(nèi)容,更多關(guān)于微信小程序Echarts動(dòng)態(tài)圖表層級的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue中使用fetch讀取本地txt文件的技術(shù)實(shí)現(xiàn)

    Vue中使用fetch讀取本地txt文件的技術(shù)實(shí)現(xiàn)

    在Vue.js應(yīng)用開發(fā)中,有時(shí)我們需要從本地讀取文本文件(如 .txt 文件)并將其內(nèi)容展示在頁面上,這種需求在處理配置文件、日志文件或靜態(tài)數(shù)據(jù)時(shí)非常常見,本文將詳細(xì)介紹如何在Vue中使用 fetch API 讀取本地 .txt 文件,并提供多個(gè)示例和使用技巧
    2024-10-10
  • 使用vue控制元素顯示隱藏方式

    使用vue控制元素顯示隱藏方式

    這篇文章主要介紹了使用vue控制元素顯示隱藏方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue中定時(shí)器setInterval的使用及說明

    vue中定時(shí)器setInterval的使用及說明

    這篇文章主要介紹了vue中定時(shí)器setInterval的使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue3響應(yīng)式對象的api超全實(shí)例詳解

    vue3響應(yīng)式對象的api超全實(shí)例詳解

    可以把數(shù)據(jù)變成響應(yīng)式api的方法叫做響應(yīng)式api,下面這篇文章主要給大家介紹了關(guān)于vue3響應(yīng)式對象api的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Vue.js最佳實(shí)踐(五招助你成為vuejs大師)

    Vue.js最佳實(shí)踐(五招助你成為vuejs大師)

    這篇文章主要介紹了Vue.js最佳實(shí)踐,本文主要面向?qū)ο笫怯幸欢╲ue.js 編輯經(jīng)驗(yàn)的開發(fā)者,需要的朋友可以參考下
    2018-05-05
  • vuex的幾個(gè)屬性及其使用傳參方式

    vuex的幾個(gè)屬性及其使用傳參方式

    這篇文章主要介紹了vuex的幾個(gè)屬性及其使用傳參,本文結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • vue生命周期與鉤子函數(shù)簡單示例

    vue生命周期與鉤子函數(shù)簡單示例

    這篇文章主要介紹了vue生命周期與鉤子函數(shù),結(jié)合簡單實(shí)例形式分析了vue.js生命周期及鉤子函數(shù)相關(guān)流程與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • vue3表單參數(shù)校驗(yàn)及正則表達(dá)式舉例詳解

    vue3表單參數(shù)校驗(yàn)及正則表達(dá)式舉例詳解

    最近項(xiàng)目中有一個(gè)校驗(yàn)身份證號手機(jī)號的業(yè)務(wù),索性給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于vue3表單參數(shù)校驗(yàn)及正則表達(dá)式的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • vue3.0-props、computed、自定義事件方式

    vue3.0-props、computed、自定義事件方式

    這篇文章主要介紹了vue3.0-props、computed、自定義事件方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue3.0如何修改瀏覽器標(biāo)題(靜態(tài))

    vue3.0如何修改瀏覽器標(biāo)題(靜態(tài))

    這篇文章主要介紹了vue3.0如何修改瀏覽器標(biāo)題(靜態(tài)),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論