收藏
回答

微信版本升级到最新后(基础库3.7.9)wepy1 antv F2+canvas图表为什么不显示?

微信版本升级到最新后(基础库3.7.9)wepy1 antv F2+canvas图表不显示 也没有任何报错信息,基础库调整到3.7.8就没问题

回答关注问题邀请回答
收藏

7 个回答

  • 社区技术运营专员-Jahozheng
    社区技术运营专员-Jahozheng
    03-03
      const ctx = wx.createCanvasContext(this.canvasId, this)
    

    删掉this参数试试

    03-03
    有用 1
    回复 6
    • D.E
      D.E
      03-03
      还是不行   使用wx.createSelectorQuery() 获取 Canvas 节点 还是报错
      03-03
      回复
    • 社区技术运营专员-Jahozheng
      社区技术运营专员-Jahozheng
      03-03回复D.E
      那跟着报错去改呢,之前不是没报错吗
      03-03
      回复
    • D.E
      D.E
      03-05回复社区技术运营专员-Jahozheng
      node版本12.21.0    mini-program-utils/dist/f2/renderer版本0.1.8   代码替换成 使用 SelectorQuery 获取 Canvas 节点之后 代码报错如下错误  是因为没有兼容 mini-program-utils吗?
      const canvas = res[0].node;
                          const ctx = canvas.getContext('2d');


                          // 适配高清屏
                          const dpr = wx.getSystemInfoSync().pixelRatio;
                          canvas.width = res[0].width * dpr;
                          canvas.height = res[0].height * dpr;
                          ctx.scale(dpr, dpr);


                          // 初始化 F2 图表
                          this.canvas = new Renderer(ctx);
      03-05
      回复
    • 社区技术运营专员-Jahozheng
      社区技术运营专员-Jahozheng
      03-05回复D.E
      不清楚 mini-program-utils的代码,也有可能是createCanvasContext 传入了一个非法的 instance
      03-05
      回复
    • D.E
      D.E
      03-05回复社区技术运营专员-Jahozheng
      createCanvasContext 在基础库3.7.8  显示是正常的  微信基础库调整到3.7.9之后就不显示了
      03-05
      回复
    查看更多(1)
  • 社区技术运营专员--Demons
    社区技术运营专员--Demons
    02-27

    请具体描述问题出现的流程,并提供能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    02-27
    有用 1
    回复 8
    查看更多(3)
  • Silver
    Silver
    03-13

    改好之后发现,3.7.11的灰度版本中修复了这个问题, 那我发不发新版呢!

    就是 wepy-antv-f2 的包替换成 @antv/wx-f2 的包的写法(抄到自己的项目里), 然后安装一下@antv/f2的依赖改写一下!

    哎, 老项目看起来真费劲

    03-13
    有用
    回复
  • 明天没雨
    明天没雨
    03-07

    你好,请问解决了吗,我也遇到同样的问题

    03-07
    有用
    回复
  • 无我
    无我
    02-27

    小程序不支持在组件里面渲染canvas

    02-27
    有用
    回复
  • D.E
    D.E
    02-27
    子组件代码如下
    template>
        <canvas 
            wx:if="{{canvasId}}"
            canvas-id="{{canvasId}}"
            class="f2-canvas"
            style="width: {{width}}rpx; height: {{height}}rpx"
            @touchstart="touchStart" 
            @touchmove="touchMove"
            @touchend="touchEnd"
            @longtap="press">
        </canvas>
    </template>
    <script>
        import wepy from 'wepy'
        import Renderer from 'mini-program-utils/dist/f2/renderer'
    
    
        const sysInfo = wepy.getSystemInfoSync()
        const radio = sysInfo.windowWidth / 750
    
    
        export default class F2Canvas extends wepy.component {
            props = {
                canvasId: String,
                width: String,
                height: {
                    type: [Number, String],
                    default: 504
                },
                opts: Object,
                chartData: Array
            }
    
    
            canvas = null
    
    
            onLoad () {
                if (!this.opts) {
                    console.warn(
                        '组件需绑定 opts 变量,例:<ff-canvas id="mychart-dom-bar" ' +
                            'canvas-id="mychart-bar" opts="{{ opts }}"></ff-canvas>'
                    )
                    return
                }
    
    
                const version = wx.getSystemInfoSync().SDKVersion;
                console.log('微信基础库版本:', version);
    
    
                if (!this.opts.lazyLoad) {
                    this.init()
                }
            }
    
    
            init (callback) {
                const version = wx.version.version.split('.').map(n => parseInt(n, 10))
                const isValid =
                    version[0] > 1 ||
                    (version[0] === 1 && version[1] > 9) ||
                    (version[0] === 1 && version[1] === 9 && version[2] >= 91)
                if (!isValid) {
                    console.error('微信基础库版本过低,需大于等于 1.9.91。')
                    return
                }
                const ctx = wx.createCanvasContext(this.canvasId, this)
                this.canvas = new Renderer(ctx)
    
    
                this.chart = this.opts.onInit(
                    this.canvas,
                    this.width * radio,
                    this.height * radio,
                    this.chartData
                )
            }
    
    
            methods = {
                handleError (e) {
                    console.error(e)
                },
    
    
                touchStart (e) {
                    if (this.canvas) {
                        this.canvas.emitEvent('touchstart', [e])
                    }
                },
    
    
                touchMove (e) {
                    if (this.canvas) {
                        this.canvas.emitEvent('touchmove', [e])
                    }
                },
    
    
                touchEnd (e) {
                    if (this.canvas) {
                        this.canvas.emitEvent('touchend', [e])
                    }
                },
                press (e) {
                    if (this.canvas) {
                        this.canvas.emitEvent('press', [e])
                    }
                }
            }
        }
    </script>
    父组件主要代码如下
     <F2Canvas
                    :opts="chartOpts"
                    hidden="{{hideChart}}"
                    canvasId="netWorthChart"
                    width="740"
                    height="572" />
    
    chartOpts: {
                    onInit: (canvas, width, height, chartData) => {
                        chart = this.initChart(chart, canvas, width, height, chartData)
                    }
                },
    
    
    initChart (chart, canvas, width, height, chartData) {
                chart = new F2.Chart({
                    el: canvas,
                    width,
                    height,
                    animate: false
                })
    
    
                chart.source(chartData, {
                    value: {
                        tickCount: 5
                    }
                })
    
    
                chart.scale('key', {
                    type: 'timeCat',
                    sortable: false,
                    tickCount: 3,
                    // mask: 'M-DD'
                })
                chart.tooltip({
                    showCrosshairs: true,
                    showItemMarker: false,
                    onShow: ({ items }) => {
                        this.setValue(items[0].value)
    
    
                        items[0].name = items[0].origin.date // 显示日期
                        items[0].value = null // 显示日期
    
    
                        /* tooltip 默认会显示两次
                        * 因为 items 长度为2 (chart.area() 和 chart.line() 同时使用导致)
                        * */
                        items.splice(1, 1)
                    }
                })
    
    
                const textStyle = {
                    fontWeight: '400',
                    fontSize: 11,    
                    fill: '#999',
                }
                 chart.axis('key', {
                    label: textStyle
                })
                chart.axis('key', {
                    label: function label(text, index, total) {
                        const textCfg = {}
                        if (index === 0) {
                            textCfg.textAlign = 'left'
                        } else if (index === total - 1) {
                            textCfg.textAlign = 'right'
                        }
                        return textCfg
                    }
                })
                chart.axis('value', {
                    label: textStyle,
                    grid: {
                        stroke: '#eaebee'
                    }
                })
    
    
                chart.area().position('key*value')
                chart.line().position('key*value')
                    .color('#5B8FF9')
                    .style({
                        lineWidth: 1
                    })
    
    
                // chart.render()
    
    
                return chart
            }
    
    


    02-27
    有用
    回复 6
    • 无我
      无我
      02-27
      还有一个原因就是这个库有问题,或者是版本判断出错了,可以试试微信自带的版本判断
      02-27
      回复
    • 无我
      无我
      02-27
      不过小程序 本身对canvas的兼容本来也不太好,渲染不出来也是正常的,如果想要渲染稳定,最好就是原生小程序开发一个canvas渲染
      02-27
      回复
    • D.E
      D.E
      02-27回复无我
      现在可以断定是微信基础库升级之后不兼容导致的  也没有报错信息 不知道怎么去改
      02-27
      回复
    • 无我
      无我
      02-27
      可以先创建一个测试页面,然后试试看 能不能把canvas渲染出来,canvas是空的
      02-27
      回复
    • 认真的老去
      认真的老去
      03-02
      您好,请问解决了嘛,我和你遇到同样的问题
      03-02
      回复
    查看更多(1)
登录 后发表内容