关于vue 结合原生js 解决echarts resize问题

关于vue结合原生js解决echarts resize问题,可以使用下面的攻略:

攻略说明

  1. 采用vue-echarts插件加载echarts,并且绑定图表的 DOM 元素到 vue 实例中
  2. 使用 js 的 resize() 方法,监听 window 大小变化,当窗口大小发生改变时,使用 triggerResize() 方法通知echarts自适应大小

示例说明

  1. 模板代码
<template>
  <div class="chart-container">
    <div ref="chart" class="chart"></div>
  </div>
</template>

<script>
  import echarts from 'echarts';
  import { use } from "echarts/core";
  import { CanvasRenderer } from "echarts/renderers";
  use([ CanvasRenderer ]);

  export default {
    name: 'EchartsContainer',
    props: ['option'],
    mounted() {
      this.init();
      window.addEventListener('resize', this.handleWindowResize);
    },
    beforeDestroy() {
      window.removeEventListener('resize', this.handleWindowResize);
    },
    methods: {
      init() {
        this.chart = echarts.init(this.$refs.chart);
        this.chart.setOption(this.option);
      },
      handleWindowResize() {
        this.chart.resize();
      }
    }
  }
</script>

<style scoped>
  .chart-container {
    width: 100%;
  }
  .chart {
    width: 100%;
    height: 400px;
  }
</style>

在这个例子中,我们创建了一个EchartsContainer组件,使用 echarts.init() 方法初始化 echarts,将其绑定到 DOM 元素中。在window的resize事件中,触发 resize() 方法,让echarts自适应大小。

  1. 使用原生js的示例代码
<template>
  <div class="chart-container">
    <div ref="chart" class="chart"></div>
  </div>
</template>

<script>
  import echarts from 'echarts';

  export default {
    name: 'EchartsContainer',
    props: ['option'],
    mounted() {
      this.init();
      window.addEventListener('resize', this.handleWindowResize);
    },
    beforeDestroy() {
      window.removeEventListener('resize', this.handleWindowResize);
    },
    methods: {
      init() {
        this.chart = echarts.init(this.$refs.chart);
        this.chart.setOption(this.option);
      },
      handleWindowResize() {
        this.chart.resize();
      },
      // 使用原生js方法监听resize事件
      bindWinResizeHandler() {
        let _this = this; // 注意this指向问题
        let timer = null;
        window.onresize = () => {
          if(timer){
            clearTimeout(timer);
          }
          timer = setTimeout(() => {
            _this.resize();
          }, 100);
        }
      },
      // 调用chats组件resize方法
      resize() {
        this.chart.resize();
      }
    }
  }
</script>

<style scoped>
  .chart-container {
    width: 100%;
  }
  .chart {
    width: 100%;
    height: 400px;
  }
</style>

在这个例子中,我们使用了原生的js方法监听 window 的 resize 事件,并且利用setTimeout()方法进行延迟处理, 当延迟时间达到 100ms 时调用 resize() 函数,其中 this 指向到 的是组件的 vue 实例,不是原生 js 当前环境下的 this。 在resize()方法中,我们调用了 echarts 组件的 resize() 方法,让图表自适应大小。

综上所述,我们探讨了在 vue 中结合 echarts 包含两个不同示例的 resize 思路。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于vue 结合原生js 解决echarts resize问题 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • javascript内置对象arguments详解

    当我们在JavaScript函数中调用时,它会内置一个名为arguments的对象,包含了函数所需要的所有参数。这个对象被称为函数的“参数数组”,它实际上只是一个数组样式的对象。 arguments对象的基本用法 因为arguments是一个对象,你可以使用点操作符来访问它的属性。下面是一些常用的arguments属性: arguments.length 此…

    JavaScript 2023年6月10日
    00
  • Vue Element前端应用开发之表格列表展示

    下面是“Vue Element前端应用开发之表格列表展示”的完整攻略。 1. 前提条件 在开始使用Vue Element框架进行表格列表展示的开发前,需要确保你已经安装了以下环境和工具: Node.js Vue.js Vue Element UI 2. 搭建Vue Element应用 使用Vue CLI创建一个新的Vue Element应用,如下所示: vu…

    JavaScript 2023年6月10日
    00
  • javascript 文件的同步加载与异步加载实现原理

    JavaScript文件的同步加载与异步加载实现原理是前端开发中非常重要的知识点之一。本文将详细讲解该知识点的攻略,包括同步加载和异步加载的定义、原理、优缺点以及示例说明。 同步加载和异步加载的定义 同步加载指的是在浏览器加载JavaScript文件时,必须先下载并执行前面的JavaScript文件,后面才能执行后面的JavaScript文件。因此,同步加载…

    JavaScript 2023年5月27日
    00
  • javascript基础——String

    JavaScript基础 – String 什么是String String是JavaScript中的一种基本数据类型,表示文本字符串。可以使用单引号(‘)、双引号(“)或反引号(“`)来表示一个字符串。 字符串的基本操作 字符串的长度 可以使用字符串的length属性来获取该字符串的长度。 const str = ‘hello, world!’; con…

    JavaScript 2023年5月18日
    00
  • javascript生成大小写字母

    要生成大小写字母,可以借助JavaScript提供的字符集和Math对象中的随机数函数来实现。下面是详细的攻略步骤: 1. 定义大小写字母的字符集 JavaScript中的字符集可以用字符串表示,可以定义大小写字母的字符集如下: const lowercase = "abcdefghijklmnopqrstuvwxyz"; const u…

    JavaScript 2023年5月19日
    00
  • 如何在JavaScript中谨慎使用代码注释

    如何在JavaScript中谨慎使用代码注释 为什么需要谨慎使用代码注释 代码注释是一种注释性的文本,用于解释代码的含义、目的、用途、算法、实现方式等,通常用于提高代码的可读性和可维护性。但是在实际编程过程中,过量和不恰当的代码注释可能会导致以下影响: 代码冗余: 如果代码本身已经清晰易懂,但还增加了很多无用的注释,则会浪费磁盘空间和带宽。 注释过时: 如果…

    JavaScript 2023年5月27日
    00
  • JS 创建对象(常见的几种方法)

    下面是关于JS创建对象的几种常见方法的详细攻略。 概述 在之前,我们可以通过使用对象字面量的方式来创建 JavaScript 中的对象,但是如果我们需要创建多个类似的对象,这将非常麻烦。因此,在 JavaScript 中我们可以使用不同的方法来创建对象,这些方法包括:构造函数模式、工厂模式、原型模式、组合模式和 ES6 中的 class 语法。 构造函数模式…

    JavaScript 2023年5月27日
    00
  • JS计算输出100元钱买100只鸡问题的解决方法

    关于“JS计算输出100元钱买100只鸡问题的解决方法”的完整攻略,下面是我的详细讲解: 问题描述 问题描述如下:假设农场里只有鸡和兔子,用 100 元钱买了 100 只鸡,鸡的价格是5元一只,兔子的价格是3元一只,请问鸡和兔子各有多少只? 解决方法 这是一道数学问题,我们可以用代数方程来解决。设鸡的数量为 x,兔子的数量为 y,则有以下两个式子: x + …

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部