uni-app:uCharts的使用步骤
<h3>为何不用Echarts</h3><ul>
<li>相比Echarts及F2的复杂的设置,本插件几乎等于傻瓜式的配置。</li>
<li>Echarts在跨端使用更复杂,本插件<span style="color: rgba(255, 0, 0, 1)">只需要简单的两个<code><canvas></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> 以下代码参考官方示例:/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> 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><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> >
<!--#ifdef MP-ALIPAY -->
<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>></canvas>
<!--<span style="color: rgba(0, 0, 255, 1)">#endif</span>-->
<!--#ifndef MP-ALIPAY -->
<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>></canvas>
<!--<span style="color: rgba(0, 0, 255, 1)">#endif</span>-->
</view></pre>
</div>
<p>如果是支付宝小程序用上面那种,即</p>
<div class="cnblogs_code">
<pre><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> >
<!--#ifdef MP-ALIPAY -->
<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>></canvas>
<!--<span style="color: rgba(0, 0, 255, 1)">#endif</span>-->
</view></pre>
</div>
<p>支付宝以外用下面那种,即</p>
<div class="cnblogs_code">
<pre><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> >
<!--#ifndef MP-ALIPAY -->
<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>></canvas>
<!--<span style="color: rgba(0, 0, 255, 1)">#endif</span>-->
</view></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>=>{<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>=><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> 完整代码如下:</p>
<div class="cnblogs_code">
<pre><template>
<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>>
<span style="color: rgba(255, 0, 0, 1)"><view class="qiun-charts" >
<!--#ifndef MP-ALIPAY -->
<canvas canvas-id="canvasLineA" id="canvasLineA" class="charts" @touchstart="touchLineA"></canvas>
<!--#endif-->
</view></span>
</view>
</template>
<script><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)=>{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(()=>{
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></script>
<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><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></style></pre>
</div>
<p><code>touchLegend(e)</code> 图例点击交互事件</p>
<p><code>showToolTip(e)</code> 图表中展示数据详细内容</p>
<p> 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> </p>
<p> 当值为justify时是这样的:</p>
<p><img src="https://img2020.cnblogs.com/blog/2138872/202103/2138872-20210326160956057-635959769.png" alt="" loading="lazy"></p>
<p> </p>
<p> toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。toFixed(0)表示小数位数为0.</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/zwh0910/p/14580867.html
頁:
[1]