echarts中存在的_echarts_instance_属性--echarts刷新作用

echarts-for-react 源码分析 1、目录结构: docs —— 文档,dumi src helper —— 工具文件夹 core.tsx —— 核心代码,EChartsReactCore 类 index.ts —— 继承 EChartsReactCore 类,初始化 echarts 为引入的 echarts 包 types.ts —— 主要是 EChartsReactP... 阅读详情
$("#theme_btn").click(function () {
        var theme = $("#theme").val();
 
        //echarts的渲染逻辑是这样的:
        //如果未实例化则进行实例化过程,在此期间会在div容器生成一个_echarts_instance_属性,该属性就是当前echarts的ID,然后进行后边的渲染操作,当我们刷新已经实例化的echarts图表时,echarts会先匹配该div容器上的_echarts_instance_属性值是否与实例对象一样,如果一样则会在原生的结构上进行渲染,但是因为我破坏原生的结构,所以无法重新渲染出表格内容
        // 所以我们可以执行如下代码
        document.getElementById('main1').setAttribute('_echarts_instance_', '');
        document.getElementById('main2').setAttribute('_echarts_instance_', '');
        document.getElementById('main3').setAttribute('_echarts_instance_', '');
        document.getElementById('main4').setAttribute('_echarts_instance_', '');
        document.getElementById('main5').setAttribute('_echarts_instance_', '');
 
        var mycharts1 = echarts.init(document.getElementById('main1'), theme);
        var mycharts2 = echarts.init(document.getElementById('main2'), theme);
        var mycharts3 = echarts.init(document.getElementById('main3'), theme);
        var mycharts4 = echarts.init(document.getElementById('main4'), theme);
        var mycharts5 = echarts.init(document.getElementById('main5'), theme);
 
        mycharts1.setOption(option1, true);
        mycharts2.setOption(option2, true);
        mycharts3.setOption(option3, true);
        mycharts4.setOption(option4, true);
        mycharts5.setOption(option5, true);
    });

我在实例中的使用:

            <div class="panel-title shot">各楼栋宿舍分布 
                <div class="btn">
                    <button class="actived">海甸校区</button>
                    <button>儋州校区</button>
                    <button>城西校区</button>
                </div>
            </div>
            <div class="panel-body" id="building">

            </div>

下面的js主要分为两种效果。点击切换改变echarts图,echarts图五条数据滚动。

点击切换改变echarts图

 	var $btns = $('#' + id).prev().children('.btn'),
            type = $btns.find('.actived').text();


		$btns.find('button').on('click', function () {
                if ($(this).hasClass('actived')) return false;
                $(this).addClass('actived').siblings().removeClass('actived');
                clearInterval(timeTicket1);
                building(id);//重新调用函数,实行图标的转变
            })

echarts图五条数据滚动

			//刚开始渲染上去,滚动渲染上去
			var categorys = res.axisData,
                barDatas = res.data;
            var category = categorys.slice(0, 5);
            var barData = barDatas.slice(0, 5);
            option.yAxis.data = category.reverse();
            option.series[1].data = barData.reverse();
            var bgData = [];
            $.map(barData, function () {
                bgData.push(res.max * 1.1);
            });
            option.series[0].data = bgData;
            option.series[0].label.formatter = function (p) {
                var idx = p.dataIndex;
                return barData[idx] + '个';
            };
            myChart.setOption(option);
            timeTicket1 = setInterval(function () {
                var key1 = categorys.shift(),
                    key2 = barDatas.shift();
                categorys.push(key1);
                barDatas.push(key2);
                var category = categorys.slice(0, 5);
                var barData = barDatas.slice(0, 5);
                option.yAxis.data = category.reverse();
                option.series[1].data = barData.reverse();
                option.series[0].data = bgData;
                option.series[0].label.formatter = function (p) {
                    var idx = p.dataIndex;
                    return barData[idx] + '个';
                };
                myChart.setOption(option);
            }, 3000);

整体代码

    building('building');

    function building(id) {
       var $btns = $('#' + id).prev().children('.btn'),
            type = $btns.find('.actived').text();
        var bar_colors = ['#4effd7', '#e84b2e', '#f9b90b', '#1192e2', '#19dc59'];
        var max = 6
        $('#' + id).attr('_echarts_instance_','');
        var myChart = echarts.init(document.getElementById(id));

        var option = {
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'none'
                },
                formatter: '{b}:{c1}' + '个'
            },
            grid: {
                top: h <= 768 ? 40 : 60,
                bottom: 0,
                left: 30,
                right: 60,
                containLabel: true
            },
            xAxis: {
                splitLine: {
                    show: false
                },
                axisLine: {
                    show: false
                },
                axisLabel: {
                    show: false
                },
                axisTick: {
                    show: false
                }
            },
            yAxis: {
                type: "category",
                data: [],
                axisLine: {
                    show: false
                },
                axisTick: {
                    show: false
                },
                axisLabel: {
                    fontSize: h <= 768 ? 12 : 14,
                    color: '#fff',
                    fontFamily: 'Microsoft YaHei'
                }
            },
            series: [{ // 蓝柱下面方块
                    name: '',
                    type: 'pictorialBar',
                    symbol: 'rect',
                    cursor: 'default',
                    itemStyle: {
                        color: function (c) {
                            return bar_colors[c.dataIndex % bar_colors.length];
                        },
                        opacity: .2
                    },
                    z: -11,
                    symbolMargin: 1,
                    symbolRepeat: true,
                    symbolSize: [4, 12],
                    data: [],
                    label: {
                        show: true,
                        color: '#fff',
                        position: 'right',
                        formatter: '{c}' + '个',
                        offset: [0, -2],
                        fontSize: h <= 768 ? 12 : 14,
                        fontWeight: 'bold'
                    }
                },
                { // 蓝柱
                    name: '', // blue bar
                    type: 'pictorialBar',
                    symbol: 'rect',
                    cursor: 'default',
                    itemStyle: {
                        color: function (c) {
                            return bar_colors[c.dataIndex % bar_colors.length];
                        }
                    },
                    symbolMargin: 1,
                    symbolRepeat: true,
                    symbolSize: [4, 12],
                    label: {
                        show: false,
                        color: '#fff',
                        position: 'right',
                        formatter: '{c}' + '个',
                        offset: [0, -2],
                        fontSize: h <= 768 ? 12 : 14,
                    },
                    data: [],
                }
            ],
        }

        options($('#'+id), {
            options: option,
            url: urls.dormitoryDis,
            params: {
                cid: cid,
                xqmc: type
            }
        },function(myChart, res){
            var categorys = res.axisData,
                barDatas = res.data;
            var category = categorys.slice(0, 5);
            var barData = barDatas.slice(0, 5);
            option.yAxis.data = category.reverse();
            option.series[1].data = barData.reverse();
            var bgData = [];
            $.map(barData, function () {
                bgData.push(res.max * 1.1);
            });
            option.series[0].data = bgData;
            option.series[0].label.formatter = function (p) {
                var idx = p.dataIndex;
                return barData[idx] + '个';
            };
            myChart.setOption(option);
            timeTicket1 = setInterval(function () {
                var key1 = categorys.shift(),
                    key2 = barDatas.shift();
                categorys.push(key1);
                barDatas.push(key2);
                var category = categorys.slice(0, 5);
                var barData = barDatas.slice(0, 5);
                option.yAxis.data = category.reverse();
                option.series[1].data = barData.reverse();
                option.series[0].data = bgData;
                option.series[0].label.formatter = function (p) {
                    var idx = p.dataIndex;
                    return barData[idx] + '个';
                };
                myChart.setOption(option);
            }, 3000);
            $btns.find('button').on('click', function () {
                if ($(this).hasClass('actived')) return false;
                $(this).addClass('actived').siblings().removeClass('actived');
                clearInterval(timeTicket1);
                building(id);
            })
        })

    }

在这里插入图片描述

Echarts清空图表:There is a chart instance already initialized on the dom. 能销毁肯定需要先存在,所以定义一个全局变量来存储创建后的ECharts实例,在改变数据需要重新绘制图表的时候加上条件判断图例是否存在来决定是否销毁。也就是说,指定的区域作为canvas容器,根据触发条件改动数据之后,依旧沿用之前的的图表配置,把图表重新生成。(有时间我试一下,再来更新)原因就是销毁二字,我想当然,图表我还需要用,你销毁再用的时候怎么获取呢?不过我在想,上面clear()方法没用,或许是实例没保存,触发时机不对。不过,可能是使用方法的位置不正确,导致方法没有合适的被使用也说不一定。...... 阅读详情

相关推荐

【文本分析学习】Anaconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码) NLTK

文本分析学习之 Anadconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码)

littlexmj的博客 2310

错题笔记: echart-渲染过程

echart

qq_43455862的博客 1158

告别轮询!用STM32CubeMX给STM32F030配置ADC多通道+DMA,实测代码分享

本文详细介绍了如何使用STM32CubeMX为STM32F030配置ADC多通道采集与DMA传输,显著提升采集效率。通过实测对比轮询与DMA模式的性能差异,提供完整的代码实现和优化技巧,帮助开发者快速掌握这一高效采集方案。

weixin_42570296的博客 386

ECharts」交互 API (echartsechartsInstance

ECharts」交互 API (echartsechartsInstance

imByte的博客 2500

echarts第一次正常渲染,第二次不能渲染(二次不渲染)

在使用vue模板中需要echarts图表就重新写了一个,发现第一次能渲染,但点击其他页面在点击回来就不渲染了。图表的dom属性中发现了一个特殊的属性:_echarts_instance_,对应的值是一个id,可能是由于再次渲染时这个id未发生改变导致ehcarts认为不需要重新渲染。echarts的渲染是从setOption中开始的,不是从echarts.init()开始。echarts每次绘制都需要创建一个Echarts的实例,返回echartsInstance。解决办法就是我们在重新创建的时候,移除之前

xybhua的博客 3133

Echarts常用API(echartsechartsInstance

一、echarts上的方法 一般在项目中引入echarts之后,可以获得一个全局的echarts对象。 1.下面是几个比较常用的echarts方法 echarts.init() 创建一个echarts实例,返回echarts实例。不能在单个容器中创建多个echarts实例。 (dom: HTMLDivElement|HTMLCanvasElement, theme?: Object|string,...

weixin_30800807的博客 4542

echarts图表与其他内容切换后无法重新刷新问题

在特殊情况下,我们可能是用echarts实例并且setOption()但无法刷新表格内容,例如:我们修改了div容器的内部标签等等... 原因可能是我们破坏了第一次渲染的div容器的结构, echarts的渲染逻辑是这样的:  如果未实例化则进行实例化过程,在此期间会在div容器生成一个 _echarts_instance_ 属性, 该属性值其实就是当前echarts的ID,然后进行后边的渲染...

shuoSmallWhite的博客 3998

解决echarts 无法重新刷新的问题

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33742618的博客 5001

解决echarts报There is a chart instance already initialized on the dom.错误

使用echarts绘制图表时,使用setInterval定时请求数据,重绘echarts,遇到控制台报错提示: There is a chart instance already initialized on the dom 解决方法: 1、方法外部全局声明echarts dom对象 var domEle; 2、方法内判断dom对象是否存在 if(domEle != null &&...

m0_37780367的博客 1万+

解决echarts刷新不重绘

echart图表的一些问题

zuo_zuo_blog的博客 3923

关于 echarts 渲染不成功, 但是刷新后渲染成功的问题

写了四个echarts , 发现第一次打开没问题,但是从其他页面跳转过来就有问题了,只显示一个,后三个都显示不了,但是刷新后又没问题了。

Undaunted‘s Blog 1411

Echarts重新加载数据但不重新渲染的原因和解决方法

Echarts重新加载数据但不重新渲染的原因和解决方法

weixin_42365757的博客 1万+

解决echarts第二次不渲染问题

echarts第一次能渲染,但点击其他页面在点击回来就不渲染了。查看dom属性发现了一个特殊的属性:_echarts_instance_,对应的值是一个id,可能是由于再次渲染时这个id未发生改变导致ehcarts认为不需要重新渲染。

甜心的专栏 2475

echarts图形销毁重新绘制

echars在绘制图形的时候会给div添加属性_echarts_instance_,因此只需要将此属性移除并清空div内容即可重新绘制新的echarts图形。 $("#myChart").removeAttr("_echarts_instance_").empty(); ...

buside的博客 2万+

解决echarts图表页面切换不显示,刷新后显示的问题

最近在做大屏开发时,图表只有第一次正常显示,每次修改代码,或者切换页面再切回来,图表都不显示,需要重新刷新才可以显示。通过查阅资料,好像使用动态的id也可以实现,在每次重新渲染时id都不同(例如id拼接时间戳)在图表初始化之前,清除掉_echarts_instance_属性。,这种方式我并没有动手尝试,应该也可以解决这个问题。这样,切换页面的时候,也可以正常渲染了~

weixin_45713650的博客 3339

echarts 出现的各种问题

目录 图表需要刷新才显示???? 双y轴显示???? 提示框样式更改???? 1.图表需要刷新才显示???? 问题表述:第一次进入页面,图表正常显示 。但回到首页之后再次进入此页面,图表不显示且无报错,返回数据也正常,画布也是正常的有绘制??可是图表没了。需要刷新才会有???? 找了一大圈问题,最后发现: echars在绘制图形的时候会给div添加属性_echarts_instance_,因此只需要将此属性移除并清空div内容即可重新绘制新的echarts图形。 这个解释算懵懂吧(echarts

丫丫不秃头噢--- 1153

echarts绘制图表,切换页面后返回,无刷新数据图表不显示问题

使用echarts图表时,会出现首次加载不出来,或者切换页面后,需要强刷新才能出来的问题;这个bug我在本地没有,发布线上才有,所以找到了以下解决方案: 在初始化init之前,使用下方代码即可 document.getElementById("myChart1").removeAttribute('_echarts_instance_'); ...

pacholy的博客 3744

解决 Vue 中使用 Echarts 出现 There is a chart instance already initialized on the dom 的警告问题

解决 Vue 中使用 Echarts 出现 There is a chart instance already initialized on the dom 的警告问题。

唐先森的博客 2771

echarts 路由切换后不显示

//如果未实例化则进行实例化过程, 在此期间会在div容器生成一个_echarts_instance_属性, 该属性值其实就是当前echarts的ID, 然后进行后边的渲染操作. //当我们刷新已经实例化的echarts图表时, echarts会先匹配改div容器上的_echarts_instance_属性值是否与实例对象的ID一样 //如果一样则会在原有的结构上进行渲染, 但是因为我破坏了原有的结构, 所以无法重新渲染出表格内容, // 所以我们可以执行如下代码 d...

m0_56223743的博客 1408
上一篇: vue better-scroll
下一篇: 表情符号(Emoji)在Web中的使用
yuanliy
博客等级 码龄7年 5粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值