崖上小松 發表於 2021-3-26 10:29:00

uni-app:uCharts的使用步骤

<h3>为何不用Echarts</h3>
<ul>
<li>相比Echarts及F2的复杂的设置,本插件几乎等于傻瓜式的配置。</li>
<li>Echarts在跨端使用更复杂,本插件<span style="color: rgba(255, 0, 0, 1)">只需要简单的两个<code>&lt;canvas&gt;</code>标签</span>轻松区别搞定,代码整洁易维护。</li>
<li>Echarts在IOS端图表显示错位,只能引用网页解决。</li>
<li>本插件打包后的体积相比Echarts小很多很多,所以<span style="color: rgba(255, 0, 0, 1)">性能更好</span>。</li>
<li>如果您是uni-app初学者,那么强烈建议您使用uCharts,并且目前可以跨全端通用,减少工作量,增强一致性体验。</li>
<li>图表样式均可自定义,懂js的都可以读懂插件源码,直接修改u-charts.js源码即可。</li>
<li>本插件经过大量测试,反复论证并加以改造而成,请各位放心使用。</li>
</ul>
<p>扫码体验:</p>
<p><img src="https://img2020.cnblogs.com/blog/2138872/202103/2138872-20210326090120023-2098720130.png" alt="" loading="lazy"></p>
<p>&nbsp;以下代码参考官方示例:/pages/basic/line/curve.vue,下载地址:https://ext.dcloud.net.cn/plugin?id=271</p>
<p>以曲线图为例介绍使用步骤:</p>
<p>1、将u-charts.js拷贝到components目录下</p>
<p><img src="https://img2020.cnblogs.com/blog/2138872/202103/2138872-20210326090953005-1217092385.png" alt="" loading="lazy"></p>
<p>&nbsp;2、引入组件</p>
<div class="cnblogs_code">
<pre>import uCharts <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@/components/u-charts/u-charts.js</span><span style="color: rgba(128, 0, 0, 1)">'</span>;</pre>
</div>
<p>3、模板写法:</p>
<div class="cnblogs_code">
<pre>&lt;view <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">qiun-charts</span><span style="color: rgba(128, 0, 0, 1)">"</span> &gt;
            &lt;!--#ifdef MP-ALIPAY --&gt;
            &lt;canvas canvas-id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvasLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span> id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvasLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">charts</span><span style="color: rgba(128, 0, 0, 1)">"</span> :width=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cWidth*pixelRatio</span><span style="color: rgba(128, 0, 0, 1)">"</span> :height=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cHeight*pixelRatio</span><span style="color: rgba(128, 0, 0, 1)">"</span> <br>          :style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{'width':cWidth+'px','height':cHeight+'px'}</span><span style="color: rgba(128, 0, 0, 1)">"</span> @touchstart=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">touchLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/canvas&gt;
            &lt;!--<span style="color: rgba(0, 0, 255, 1)">#endif</span>--&gt;
            &lt;!--#ifndef MP-ALIPAY --&gt;
            &lt;canvas canvas-id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvasLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span> id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvasLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">charts</span><span style="color: rgba(128, 0, 0, 1)">"</span> @touchstart=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">touchLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/canvas&gt;
            &lt;!--<span style="color: rgba(0, 0, 255, 1)">#endif</span>--&gt;
      &lt;/view&gt;</pre>
</div>
<p>如果是支付宝小程序用上面那种,即</p>
<div class="cnblogs_code">
<pre>&lt;view <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">qiun-charts</span><span style="color: rgba(128, 0, 0, 1)">"</span> &gt;
            &lt;!--#ifdef MP-ALIPAY --&gt;
            &lt;canvas canvas-id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvasLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span> id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvasLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">charts</span><span style="color: rgba(128, 0, 0, 1)">"</span> :width=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cWidth*pixelRatio</span><span style="color: rgba(128, 0, 0, 1)">"</span> :height=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cHeight*pixelRatio</span><span style="color: rgba(128, 0, 0, 1)">"</span> <br>          :style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{'width':cWidth+'px','height':cHeight+'px'}</span><span style="color: rgba(128, 0, 0, 1)">"</span> @touchstart=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">touchLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/canvas&gt;
            &lt;!--<span style="color: rgba(0, 0, 255, 1)">#endif</span>--&gt;
      &lt;/view&gt;</pre>
</div>
<p>支付宝以外用下面那种,即</p>
<div class="cnblogs_code">
<pre>&lt;view <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">qiun-charts</span><span style="color: rgba(128, 0, 0, 1)">"</span> &gt;
            &lt;!--#ifndef MP-ALIPAY --&gt;
            &lt;canvas canvas-id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvasLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span> id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvasLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">charts</span><span style="color: rgba(128, 0, 0, 1)">"</span> @touchstart=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">touchLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/canvas&gt;
            &lt;!--<span style="color: rgba(0, 0, 255, 1)">#endif</span>--&gt;
      &lt;/view&gt;</pre>
</div>
<p>4、样式写法</p>
<div class="cnblogs_code">
<pre>.qiun-<span style="color: rgba(0, 0, 0, 1)">charts{
      width: 750upx;
      height:500upx;
      background</span>-<span style="color: rgba(0, 0, 0, 1)">color: #FFFFFF;
      }
    .charts{
      width: 750upx;
      height:500upx;
      background</span>-<span style="color: rgba(0, 0, 0, 1)">color: #FFFFFF;
      }</span></pre>
</div>
<p>5、实例化方法</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">showLineA(canvasId,chartData){
                canvaLineA</span>=<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> uCharts({
                  $</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">:_self,
                  canvasId: canvasId,
                  type: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">line</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                  fontSize:</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">,
                  padding:[</span><span style="color: rgba(128, 0, 128, 1)">15</span>,<span style="color: rgba(128, 0, 128, 1)">20</span>,<span style="color: rgba(128, 0, 128, 1)">0</span>,<span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)">],
                  legend:{
                        show:</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
                        padding:</span><span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">,
                        lineHeight:</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">, // 控制标题的行高
                        margin:</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">, // 控制标题的margin
                  },
                  dataLabel:</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
                  dataPointShape:</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
                  background:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#FFFFFF</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                  pixelRatio:_self.pixelRatio,
                  categories: chartData.categories,
                  series: chartData.series,
                  animation: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
                  xAxis: {
                        type:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">grid</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                        gridColor:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#CCCCCC</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                        gridType:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dash</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                        dashLength:</span><span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">,
            boundaryGap:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">justify</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
                  },
                  yAxis: {
                        gridType:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dash</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                        gridColor:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#CCCCCC</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                        dashLength:</span><span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">,
                        splitNumber:</span><span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">,
                        format:(val)</span>=&gt;{<span style="color: rgba(0, 0, 255, 1)">return</span> val.toFixed(<span style="color: rgba(128, 0, 128, 1)">0</span>)+<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">元</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">}
                  },
                  width: _self.cWidth</span>*<span style="color: rgba(0, 0, 0, 1)">_self.pixelRatio,
                  height: _self.cHeight</span>*<span style="color: rgba(0, 0, 0, 1)">_self.pixelRatio,
                  extra: {
                        line:{
                            type: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">curve</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
                        }
                  }
                });
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">下面是默认选中索引</span>
                let cindex=<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">下面是自定义文案</span>
                let textList=[{text:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">我是一个标题</span><span style="color: rgba(128, 0, 0, 1)">'</span>,color:<span style="color: rgba(0, 0, 255, 1)">null</span>},{text:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">自定义1:值1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,color:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#2fc25b</span><span style="color: rgba(128, 0, 0, 1)">'</span>},{text:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">自定义2:值2</span><span style="color: rgba(128, 0, 0, 1)">'</span>,color:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#facc14</span><span style="color: rgba(128, 0, 0, 1)">'</span>},<br>                  {text:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">自定义3:值3</span><span style="color: rgba(128, 0, 0, 1)">'</span>,color:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#f04864</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">}];
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">下面是event的模拟,tooltip的Y坐标值通过这个mp.changedTouches.y控制</span>
                let tmpevent={mp:{changedTouches:[{x: <span style="color: rgba(128, 0, 128, 1)">0</span>, y: <span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">}]}};
                setTimeout(()</span>=&gt;<span style="color: rgba(0, 0, 0, 1)">{
                  canvaLineA.showToolTip( tmpevent , {
                        index:cindex,
                        textList:textList
                  });
                },</span><span style="color: rgba(128, 0, 128, 1)">200</span><span style="color: rgba(0, 0, 0, 1)">)
            },
            touchLineA(e) {
                canvaLineA.touchLegend(e);
                canvaLineA.showToolTip(e, {
                  format: function (item, category) {
                        </span><span style="color: rgba(0, 0, 255, 1)">return</span> category + <span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(128, 0, 0, 1)">'</span> + item.name + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">:</span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> item.data
                  }
                });
            },</span></pre>
</div>
<p>数据模型中拷贝以下参数</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">data() {
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
                cWidth:</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">,
                cHeight:</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">,
                pixelRatio:</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
                textarea:</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">
            }
      },</span></pre>
</div>
<p>6、在实际项目中,我们是从后台获取数据存入chartData中,并调用实例化方法。这里我们先在数据模型中给出chartData的默认值,并在onLoad中调用实例化方法</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">onLoad(options) {
            </span><span style="color: rgba(0, 0, 255, 1)">this</span>.showLineA(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">canvasLineA</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.chartData)
      },</span></pre>
</div>
<p>chartData数据示例:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">categories</span><span style="color: rgba(128, 0, 0, 1)">"</span>:[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2012</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2013</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2014</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2015</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2016</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2017</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">],
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">series</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:[
      {</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">成交量A</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">data</span><span style="color: rgba(128, 0, 0, 1)">"</span>:[<span style="color: rgba(128, 0, 128, 1)">35</span>,<span style="color: rgba(128, 0, 128, 1)">8</span>,<span style="color: rgba(128, 0, 128, 1)">25</span>,<span style="color: rgba(128, 0, 128, 1)">37</span>,<span style="color: rgba(128, 0, 128, 1)">4</span>,<span style="color: rgba(128, 0, 128, 1)">20</span><span style="color: rgba(0, 0, 0, 1)">]}</span><span style="color: rgba(0, 0, 0, 1)">
    ]
}</span></pre>
</div>
<p>7、在onLoad生命周期函数中初始化cWidth和cHeight,来控制图标的宽和高</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.cWidth=uni.upx2px(<span style="color: rgba(128, 0, 128, 1)">750</span><span style="color: rgba(0, 0, 0, 1)">);
            </span><span style="color: rgba(0, 0, 255, 1)">this</span>.cHeight=uni.upx2px(<span style="color: rgba(128, 0, 128, 1)">500</span>);</pre>
</div>
<p>8、定义canvaLineA</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> canvaLineA=<span style="color: rgba(0, 0, 255, 1)">null</span>;</pre>
</div>
<p>效果如下图所示</p>
<p><img src="https://img2020.cnblogs.com/blog/2138872/202103/2138872-20210326102255168-1847390591.png" alt="" loading="lazy"></p>
<p>&nbsp;完整代码如下:</p>
<div class="cnblogs_code">
<pre>&lt;template&gt;
    &lt;view <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">container</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
      <span style="color: rgba(255, 0, 0, 1)">&lt;view class="qiun-charts" &gt;
            &lt;!--#ifndef MP-ALIPAY --&gt;
            &lt;canvas canvas-id="canvasLineA" id="canvasLineA" class="charts" @touchstart="touchLineA"&gt;&lt;/canvas&gt;
            &lt;!--#endif--&gt;
      &lt;/view&gt;</span>
    &lt;/view&gt;
&lt;/template&gt;

&lt;script&gt;<span style="color: rgba(255, 0, 0, 1)">
    import uCharts from '@/components/u-charts/u-charts.js'</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">;<br>  var canvaLineA=null;</span>
    export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
      data(){
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {</span><span style="color: rgba(0, 0, 0, 1)">
                cWidth:</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">,
                cHeight:</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">,
                pixelRatio:</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
                textarea:</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">,
                chartData:{
                  </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">categories</span><span style="color: rgba(128, 0, 0, 1)">"</span>:[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2012</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2013</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2014</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2015</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2016</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2017</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">],
                  </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">series</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:[
                        {</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">成交量A</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">data</span><span style="color: rgba(128, 0, 0, 1)">"</span>:[<span style="color: rgba(128, 0, 128, 1)">35</span>,<span style="color: rgba(128, 0, 128, 1)">8</span>,<span style="color: rgba(128, 0, 128, 1)">25</span>,<span style="color: rgba(128, 0, 128, 1)">37</span>,<span style="color: rgba(128, 0, 128, 1)">4</span>,<span style="color: rgba(128, 0, 128, 1)">20</span><span style="color: rgba(0, 0, 0, 1)">]}
                  ]
                }
            }
      },
      onLoad(options) {
            console.log(options)</span><span style="color: rgba(255, 0, 0, 1)">this.cWidth = uni.upx2px(720);
            this.cHeight = uni.upx2px(420);
            this.showLineA("canvasLineA",this</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">.chartData)</span>
      },
      methods:{
            <span style="color: rgba(255, 0, 0, 1)">showLineA(canvasId,chartData){
                canvaLineA</span></span><span style="color: rgba(255, 0, 0, 1)">=new uCharts({
                  $this:this,
                  canvasId: canvasId,
                  type: 'line',
                  fontSize:11,
                  padding:,
                  legend:{
                        show:true,
                        padding:5,
                        lineHeight:11,
                        margin:0,
                  },
                  dataLabel:true,
                  dataPointShape:true,
                  background:'#FFFFFF',
                  pixelRatio:this.pixelRatio,
                  categories: chartData.categories,
                  series: chartData.series,
                  animation: true,
                  xAxis: {
                        type:'grid',
                        gridColor:'#CCCCCC',
                        gridType:'dash',
                        dashLength:8,
            boundaryGap:'justify'
                  },
                  yAxis: {
                        gridType:'dash',
                        gridColor:'#CCCCCC',
                        dashLength:8,
                        splitNumber:5,
                        format:(val)=&gt;{return val.toFixed(0)+'元'}
                  },
                  width: this.cWidth*this.pixelRatio,
                  height: this.cHeight*this.pixelRatio,
                  extra: {
                        line:{
                            type: 'curve'
                        }
                  }
                });
                //下面是默认选中索引
                let cindex=3;
                //下面是自定义文案
                let textList=[{text:'我是一个标题',color:null},{text:'自定义1:值1',color:'#2fc25b'},{text:'自定义2:值2',color:'#facc14'},</span><br><span style="color: rgba(255, 0, 0, 1)">                  {text:'自定义3:值3',color:'#f04864'}];
                //下面是event的模拟,tooltip的Y坐标值通过这个mp.changedTouches.y控制
                let tmpevent={mp:{changedTouches:[{x: 0, y: 80}]}};
                setTimeout(()=&gt;{
                  canvaLineA.showToolTip( tmpevent , {
                        index:cindex,
                        textList:textList
                  });
                },200</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">)
            },</span>
            touchLineA(e) {
                canvaLineA.touchLegend(e);
                canvaLineA.showToolTip(e, {
                  format: function (item, category) {
                        </span><span style="color: rgba(0, 0, 255, 1)">return</span> category + <span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(128, 0, 0, 1)">'</span> + item.name + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">:</span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> item.data
                  }
                });
            },
      }
    }
</span>&lt;/script&gt;

&lt;style lang=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">scss</span><span style="color: rgba(128, 0, 0, 1)">"</span> scoped&gt;<span style="color: rgba(255, 0, 0, 1)">
    .qiun-charts{
      width: 750upx;
      height:500upx;
      background-color: #FFFFFF;
      }
    .charts{
      width: 750upx;
      height:500upx;
      background-color: #FFFFFF;
      }
</span>&lt;/style&gt;</pre>
</div>
<p><code>touchLegend(e)</code>&nbsp;图例点击交互事件</p>
<p><code>showToolTip(e)</code>&nbsp;图表中展示数据详细内容</p>
<p>&nbsp;legend中的两个属性position和float来修改标题的位置:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">legend:{
                        show:</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
                        padding:</span><span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">,
                        lineHeight:</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">,
                        margin:</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
                        <span style="color: rgba(255, 0, 0, 1)">position: </span></span><span style="color: rgba(255, 0, 0, 1)">'top',
                        float: 'right'</span><span style="color: rgba(0, 0, 0, 1)">
                  },</span></pre>
</div>
<p>dataLabel属性用来修改曲线上是否显示数组,值为true表示显示数据,值为false表示隐藏数据</p>
<p>dataPointShape属性用来控制曲线上是否显示点。值为true表示显示点,值为false表示隐藏点</p>
<p>xAxis.labelCount:默认series.data.length,X轴可见区域<code>标签数量</code>(即X轴数刻度标签单屏幕限制显示的数量)</p>
<p>boundaryGap:折线图、区域图起画点结束点方法:center为单元格中间起画,justify为0点起画即两端对齐</p>
<p>当值为justify时是这样的:</p>
<p><img src="https://img2020.cnblogs.com/blog/2138872/202103/2138872-20210326160851192-172288973.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;当值为justify时是这样的:</p>
<p><img src="https://img2020.cnblogs.com/blog/2138872/202103/2138872-20210326160956057-635959769.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。toFixed(0)表示小数位数为0.</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/zwh0910/p/14580867.html
頁: [1]
查看完整版本: uni-app:uCharts的使用步骤