wx-charts icon indicating copy to clipboard operation
wx-charts copied to clipboard

微信小程序wx-charts自适应屏幕宽度的问题

Open xiaolin3303 opened this issue 8 years ago • 51 comments

由于无法获取到canvas的大小尺寸,故图表工具需要调用者传入widthheight来主动告知。

各类终端的屏幕大小有差异,如何来让wx-charts自适应屏幕的尺寸呢,下面给出一种方法。

比如我们的需求是图表横向铺满屏幕的宽度

wxss

.canvas {
    width: 100%;
    height: 200px;
}

wxml

<view>
    <canvas canvas-id="wxChartCanvas" class="canvas"></canvas>
</view>

js

// 调用API getSystemInfoSync 获取设备信息
// 这里使用同步获取,也可以使用异步方式 getSystemInfo

......

let windowWidth = 320;
try {
    let res = wx.getSystemInfoSync();
    windowWidth = res.windowWidth;
} catch (e) {
    // do something when get system info failed
}
new Charts({
    ...
    width: windowWidth,
    height: 200
});

同样的,如果需求中canvas与屏幕有一定的间距,还是先获取屏幕的宽度然后减去间距等计算出画布的实际宽度、高度传递给wx-charts即可。

xiaolin3303 avatar Dec 13 '16 07:12 xiaolin3303

8990a373-d31b-4923-a5f7-5c11ff2fbfe2 按您的方法做适配了,整个画布区域全屏了,但是折线图只画出来部分,请帮忙看看

zqchong avatar Dec 20 '16 02:12 zqchong

目测来看应该是canvas没有全屏展开,你审查下元素看下是否canvas铺满屏幕了

xiaolin3303 avatar Dec 20 '16 04:12 xiaolin3303

仪表盘这样的效果能改出来么

vueadmin avatar Jan 11 '17 02:01 vueadmin

按照你给的方法,用你给的折线图代码,底部依然展示不全

Bleoo avatar Jan 14 '17 09:01 Bleoo

@Bleoo 把你的信息详细描述一下,是否可以提供一下你的js, wxss相关的代码包括截图

xiaolin3303 avatar Jan 14 '17 10:01 xiaolin3303

能不能给个完整的引用wx-charts的js 文件啊,新手不知道怎么用的,谢谢🙏

ghost avatar Jan 15 '17 10:01 ghost

@linxijiuri 比如这样:

myAppPage.js

// 路径是wxCharts文件相对于本文件的相对路径
var wxCharts = require('./utils/wxcharts.js');
Page({
    ...
    onLoad: function() {
        new wxCharts({
            ....
        });
    }
});

就这么简单!

xiaolin3303 avatar Jan 15 '17 12:01 xiaolin3303

i6cs db7 fjvf71 d8obv

canvas {
    width: 100%;
    height: 200rdp;
}
let windowWidth = 320;
    try {
      let res = wx.getSystemInfoSync();
      windowWidth = res.windowWidth;
    } catch (e) {
      // do something when get system info failed
    }
    new wxCharts({
      canvasId: 'HRCanvas',
      ...
      width: windowWidth,
      height: windowWidth/2
    });

Bleoo avatar Jan 16 '17 01:01 Bleoo

@Bleoo 我知道什么问题了

canvas里面的单位只支持pxopts.width, opts.height传入的单位都是px,你的css里面需要设置以px为单位的高度值,这样才能统一起来, 用rdp进行转化会有误差。

xiaolin3303 avatar Jan 16 '17 01:01 xiaolin3303

@Bleoo 而且你的横向也是截断的,应该是你的canvas并没有横向铺满屏幕,是不是外层有元素设置了padding或者margin,如果要设置间距的话opts.width记得需要把这个间距减掉,当然单位还是px

xiaolin3303 avatar Jan 16 '17 01:01 xiaolin3303

@xiaolin3303 明白了,可是高度能做到等比缩放吗

Bleoo avatar Jan 16 '17 01:01 Bleoo

@Bleoo 如果css样式统一用rpx单位的话,可以用 750 / wx.getSystemInfoSync().width获得比例, 反算出对应的px为单位的高度,只是一个建议,good luck

xiaolin3303 avatar Jan 16 '17 01:01 xiaolin3303

连一个完整的例子都没有

fansfree avatar Jan 17 '17 07:01 fansfree

@fansfree 上面对话我有给一个如何使用的例子,请查看一下,如果还没有解决你的问题请详细描述下

xiaolin3303 avatar Jan 17 '17 07:01 xiaolin3303

@fansfree 请参看 #28 如果有问题在这个issue中讨论

xiaolin3303 avatar Jan 17 '17 07:01 xiaolin3303

image image image

fansfree avatar Jan 17 '17 07:01 fansfree

上面这样子写,然后完成没有显示的,不知道为什么

fansfree avatar Jan 17 '17 07:01 fansfree

@fansfree 请查看 #28 里面有直接能运行的例子

xiaolin3303 avatar Jan 17 '17 08:01 xiaolin3303

饼状图 如何让属性名称不显示

qq711363 avatar Jan 19 '17 13:01 qq711363

@qq711363 底部的categories标识?

xiaolin3303 avatar Jan 20 '17 02:01 xiaolin3303

请问形成的图表能不能做到,鼠标或者手指放到曲线上看到每一个点的值的动态效果啊?

czh628 avatar Feb 20 '17 01:02 czh628

@qq711363 case 'pie': this.animationInstance = new Animation({ timing: 'easeInOut', duration: duration, onProcess: function onProcess(process) { _this.chartData.pieData = drawPieDataPoints(series, opts, config, context, process); // drawLegend(opts.series, opts, config, context); drawCanvas(opts, context); }, onAnimationFinish: function onAnimationFinish() { _this.event.trigger('renderComplete'); } }); break; 注释掉这一行 // drawLegend(opts.series, opts, config, context);

EGsnn avatar Jul 06 '17 01:07 EGsnn

这个和swiper组件一起使用的时候, 绘画出的canvas图像 不随屏幕滑动一起移动,就感觉像是被固定定位了, 请问你们有遇到这个问题吗? (在微信开发者工具里 是正常的 但是手机上就会出现这个问题, 安卓,IOS 都有这个问题.),,我也遇到这个问题

boreyic avatar Aug 05 '17 03:08 boreyic

如果使用标签横向滚动,图的宽度可以调整成整个scroll-view的宽度吗?100%没有包括横向滚动的宽度

LongYue9608 avatar Aug 25 '17 08:08 LongYue9608

如何实现图表横向滚动呢?

ziclee avatar Sep 09 '17 10:09 ziclee

请问下载的demo里面右边那块灰色区域是因为什么?样式明明是100%; image

EverChisato avatar Sep 14 '17 08:09 EverChisato

@EverChisato demo中忘记去掉了background参数,已修复

xiaolin3303 avatar Sep 14 '17 10:09 xiaolin3303

为什么在视图顶部固定一个tabbar,然后滑动页面时折线图不是隐藏,而是从tabbar上面穿过?

TigerMan2 avatar Sep 15 '17 06:09 TigerMan2

怎么能让那些字跟线条不在最顶层显示呢

Joyce0827 avatar Jan 19 '18 02:01 Joyce0827

.chart{ width: 100%; text-align: center; } .canvas{ /* position: absolute; top: 10%; */ width: 100%; height: 600rpx; transform: scale(0.7) } js文件里设置了 width: windowWidth, height: 300, dataLabel: true 开发工具里也显示好了布局,为啥到真机就是乱的?? 已解决:去掉transform scale缩放

saruagithub avatar Apr 15 '18 02:04 saruagithub