勇敢往前飞 2022-05-23 17:26 采纳率: 0%
浏览 938
已结题

uniapp 引入echarts自定义图例在手机端测试不能显示 但是本地浏览器可以

通过封装echarts组件和下载自定义的echart.min.js文件来显示图表的


    methods: {
            /**
             * 初始化echarts
             */
            init() {
                if(this.imgTheme){
                    this.chart = echarts.init(document.getElementById(this.option.id),this.imgTheme);
                }else{
                    this.chart = echarts.init(document.getElementById(this.option.id));
                }
                // 根据id初始化图表
                
                this.update(this.option)
                console.log(this.option.legend,'================');
                // echarts的点击事件
                this.chart.on('click', params => {
                    // 把点击事件的数据缓存下来
                    this.clickData = params
                    console.log(this.clickData);
                })
            },
            /**
             * 点击事件,可传递到外部
             * @param {Object} event
             * @param {Object} instance
             */
            onClick(event, instance) {
                if (this.clickData) {
                    // 把echarts点击事件相关的值传递到renderjs外
                    instance.callMethod('onViewClick', {
                        value: this.clickData.data,
                        name: this.clickData.name,
                        seriesName: this.clickData.seriesName
                    })
                    // 上次点击数据置空
                    this.clickData = null
                }
            },
            /**
             * 监测数据更新
             * @param {Object} option
             */
            update(option) {
                console.log(option,'===================option==================');
                if (this.chart) {
                    // 因App端,回调函数无法从renderjs外传递,故在此自定义设置相关回调函数
                    if (option) {
                        // tooltip
                        if (option.tooltip) {
                            // 判断是否设置tooltip的位置
                            if (option.tooltip.positionStatus) {
                                option.tooltip.position = this.tooltipPosition()
                            }
                            // 判断是否格式化tooltip
                            if (option.tooltip.formatterStatus) {
                                option.tooltip.formatter = this.tooltipFormatter(option.tooltip.formatterUnit, option.tooltip.formatFloat2, option.tooltip.formatThousands)
                            }
                        }
                        // if(option.legend){
                        //     option.legend.formatter = 
                        // }
                    }
                    // 设置新的option
                    this.chart.setOption(option, option.notMerge)
                }
            },
            /**
             * 设置tooltip的位置,防止超出画布
             */

    tooltipPosition() {
                return (point, params, dom, rect, size) => {
                    // 其中point为当前鼠标的位置,size中有两个属性:viewSize和contentSize,分别为外层div和tooltip提示框的大小
                    let x = point[0]
                    let y = point[1]
                    let viewWidth = size.viewSize[0]
                    let viewHeight = size.viewSize[1]
                    let boxWidth = size.contentSize[0]
                    let boxHeight = size.contentSize[1]
                    let posX = 0 // x坐标位置
                    let posY = 0 // y坐标位置
                    if (x >= boxWidth) { // 左边放的下
                        posX = x - boxWidth - 1
                    }
                    if (y >= boxHeight) { // 上边放的下
                        posY = y - boxHeight - 1
                    }
                    return [posX, posY]
                }
            },
            /**
             * tooltip格式化
             * @param {Object} unit 数值后的单位
             * @param {Object} formatFloat2 是否保留两位小数
             * @param {Object} formatThousands 是否添加千分位
             */
            tooltipFormatter(unit, formatFloat2, formatThousands) {
                return params => {
                    let result = ''
                    unit = unit ? unit : ''
                    for (let i in params) {
                        if (i == 0) {
                            result += params[i].axisValueLabel
                        }
                        let value = '--'
                        if (params[i].data !== null) {
                            value = params[i].data
                            // 保留两位小数
                            if (formatFloat2) {
                                value = this.formatFloat2(value)
                            }
                            // 添加千分位
                            if (formatThousands) {
                                value = this.formatThousands(value)
                            }
                        }
                        // #ifdef H5
                        result += '\n' + params[i].seriesName + ':' + value + ' ' + unit
                        // #endif
                        
                        // #ifdef APP-PLUS
                        result += '<br/>' + params[i].marker + params[i].seriesName + ':' + value + ' ' + unit
                        // #endif
                    }
                    return result
                }
            },
            /**
             * 保留两位小数
             * @param {Object} value
             */
            formatFloat2(value) {
                let temp = Math.round(parseFloat(value) * 100) / 100
                let xsd = temp.toString().split('.')
                if (xsd.length === 1) {
                    temp = (isNaN(temp) ? '0' : temp.toString()) + '.00'
                    return temp
                }
                if (xsd.length > 1) {
                    if (xsd[1].length < 2) {
                        temp = temp.toString() + '0'
                    }
                    return temp
                }
            },
            /**
             * 添加千分位
             * @param {Object} value
             */
            formatThousands(value) {
        

if (value === undefined || value === null) {
                    value = ''
                }
                if (!isNaN(value)) {
                    value = value + ''
                }
                let re = /\d{1,3}(?=(\d{3})+$)/g
                let n1 = value.replace(/^(\d+)((\.\d+)?)$/, function(s, s1, s2) {
                    return s1.replace(re, '$&,') + s2
                })
                return n1
            }
        }
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月31日
    • 创建了问题 5月23日

    悬赏问题

    • ¥20 双硬盘安装Ubuntu后windows 无法挂载硬盘
    • ¥15 帮我利用jupyter 运行一个正确的代码
    • ¥15 如何使用Gephi软件和Python包中的GephiStreamer交互
    • ¥15 sqlite加密问题咨询
    • ¥15 appdesigner接收不到udp组播的数据
    • ¥15 verilog 非阻塞赋值下的移位拼接错误
    • ¥100 两个按钮控制一个LED
    • ¥15 用C语言写离散数学相关问题
    • ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理
    • ¥15 ansys机翼建模肋参数