Vue使用Echarts折线图,实现点击播放、暂停、选择播放倍数;实现数据直播功能

简介: Vue使用Echarts折线图,实现点击播放、暂停、选择播放倍数;实现数据直播功能

🌟前言

哈喽小伙伴们,最近公司有个小需求,就是基于Echarts的折线图,做一个数据直播的功能;拿到所有图表数据之后,通过点击播放,暂停,选择播放倍数来实现相应的效果,更直观的为客户展现数据变化的过程;那接下来我们一起来看看吧

🌟先看效果

Echarts折线图逐点播放

🌟整体代码(详细注释)

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Echarts折线图逐点播放</title>
  <!-- 引入vue.js -->
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14"></script>
  <!-- 引入element的css -->
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <!-- 引入组件库 -->
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  <!-- 引入Echarts库 -->
  <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.2.2/echarts.min.js"></script>
</head>
<body>
  <div id="app">
    <!-- 用于展示Echarts折线图的div -->
    <div id="line-chart" style="width: 100%; height: 800px;"></div>
    <!-- 播放、暂停按钮 -->
    <el-button type="primary" @click="startPlay">播放</el-button>
    <el-button type="success" @click="stopPlay">暂停</el-button>
    <el-select v-model="speed" placeholder="请选择播放速度">
      <el-option label="1.0x" :value="1000 / 1"></el-option>
      <el-option label="2.0x" :value="1000 / 2"></el-option>
      <el-option label="3.0x" :value="1000 / 3"></el-option>
      <el-option label="4.0x" :value="1000 / 4"></el-option>
    </el-select>
  </div>
</body>
</html>
<script type="text/javascript">
  new Vue({
    el: '#app',
    data: function () {
      return {
        myChart: null, // Echarts实例
        timer: null, // 定时器
        speed: 1000, // 播放速度,单位ms
        // 折线图数据
        data: [10, 52, 200, 334, 390, 330, 220,10, 52, 200, 334, 390, 330, 220],
        // x轴数据
        xData: ['周一', '周二', '周三', '周四', '周五', '周六', '周日', '周一', '周二', '周三', '周四', '周五', '周六', '周日'],
        newData: [], // 新的y轴数据
        newXData: [], // 新的x轴数据
        currentIndex: 0 //  // 定义一个变量保存当前播放到的点
      }
    },
    mounted() {
      this.initChart()
    },
    methods: {
      // 初始化
      initChart() {
        // 初始化Echarts
        this.myChart = echarts.init(document.getElementById('line-chart'));
        // 绘制折线图
        this.myChart.setOption({
          xAxis: {
            type: 'category',
            data: this.xData
          },
          yAxis: {
            type: 'value'
          },
          series: [{
            type: 'line',
            data: this.data
          }]
        });
        let that = this
        // 监听浏览器变化,使图表大小也随之变化
        window.addEventListener('resize', function () {
          that.myChart.resize()
        })
      },
      // 播放
      startPlay() {
        let that = this
        // 开启定时器
        this.timer = setInterval(function () {
          // 将第一个数据作为初识播放的点
          that.newData.push(that.data[that.currentIndex]);
          that.newXData.push(that.xData[that.currentIndex])
          // 如果当前点已经是最后一个,就清除定时器和数据
          if (that.currentIndex > that.xData.length - 1) {
            clearInterval(that.timer);
            that.$message.success('完成')
            that.currentIndex = 0
            that.newXData = []
            that.newData = []
            return;
          }
          // // 更新每个点的数值
          that.myChart.setOption({
            xAxis: {
              type: 'category',
              data: that.newXData
            },
            yAxis: {
              type: 'value'
            },
            series: [{
              type: 'line',
              data: that.newData
            }]
          });
          that.currentIndex++;
        }, this.speed);
      },
      // 暂停
      stopPlay() {
        clearInterval(this.timer);
      }
    }
  })
</script>


目录
相关文章
|
1天前
|
JavaScript
Vue学习之--------深入理解Vuex之多组件共享数据(2022/9/4)
这篇文章通过一个实际的Vue项目案例,演示了如何在Vuex中实现多组件间共享数据。文章内容包括在Vuex的state中新增用户数组,创建Person.vue组件用于展示和添加用户信息,以及在Count组件中使用Person组件操作的数据。通过测试效果展示了组件间数据共享和状态更新的流程。
Vue学习之--------深入理解Vuex之多组件共享数据(2022/9/4)
|
4天前
|
JavaScript
如何通过点击商品的信息(图片或者文字)跳转到更加详细的商品信息介绍(前后端分离之Vue实现)
该博客文章介绍了如何在Vue 2框架下实现前后端分离的商品信息展示和详情页跳转,包括排序筛选、详情展示、加入购物车和分享功能。
如何通过点击商品的信息(图片或者文字)跳转到更加详细的商品信息介绍(前后端分离之Vue实现)
|
4天前
|
JavaScript
在Vue中使用Swiper轮播图、同时解决点击轮播图左右切换按钮不生效的问题、同时将轮播图抽离出为一个公共组件
这篇文章介绍了在Vue中如何使用Swiper插件创建轮播图,解决Swiper左右切换按钮不生效的问题,并展示了如何将Swiper轮播图抽离成一个可复用的公共组件,同时提供了详细的安装、配置和优化建议。
在Vue中使用Swiper轮播图、同时解决点击轮播图左右切换按钮不生效的问题、同时将轮播图抽离出为一个公共组件
|
5天前
|
前端开发 JavaScript
基于Vue3实现鼠标按下某个元素进行拖动,实时改变左侧或右侧元素的宽度,以及点击收起或展开的功能
本文介绍了如何在Vue3项目中实现一个鼠标拖动调整元素宽度的功能,并展示了点击按钮收起或展开侧边栏的效果,提供了完整的实现代码和操作演示。
60 0
基于Vue3实现鼠标按下某个元素进行拖动,实时改变左侧或右侧元素的宽度,以及点击收起或展开的功能
|
5天前
|
JavaScript 前端开发
Vue学习之--------Vue中收集表单数据(使用v-model 实现双向数据绑定、代码实现)(2022/7/18)
这篇文章介绍了Vue中使用v-model实现表单数据收集的方法,包括基础知识、代码实例和测试效果,并提供了一些额外建议。
Vue学习之--------Vue中收集表单数据(使用v-model 实现双向数据绑定、代码实现)(2022/7/18)
|
5天前
|
JavaScript API
Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
这篇博客文章讲解了Vue中列表排序的方法,使用`filter`、`sort`和`indexOf`等数组方法进行数据的过滤和排序,并探讨了Vue检测数据变化的原理,包括Vue如何通过setter和数组方法来实现数据的响应式更新。
Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
|
5天前
|
JavaScript
基于Vue3+TS简单设计一个查看文章时点击展开和点击收起的小功能
该文章展示了如何使用Vue 3和TypeScript创建一个简单的展开和收起功能,用于文章查看时的交互体验。
17 0
基于Vue3+TS简单设计一个查看文章时点击展开和点击收起的小功能
|
5天前
|
JavaScript
Element - Vue使用slot-scope和v-for遍历数据为树形表格
这篇文章介绍了在Vue中使用`slot-scope`和`v-for`指令来遍历数据并将其渲染为树形表格的方法。
11 0
Element - Vue使用slot-scope和v-for遍历数据为树形表格
|
11天前
|
JavaScript 数据处理
如何使用 Vue.js 将数据对象的值放入另一个数据对象中?
如何使用 Vue.js 将数据对象的值放入另一个数据对象中?
|
10天前
|
Web App开发 JavaScript 前端开发
不光好上手,功能还特强的 Vue 3组件!且开源免费!
不光好上手,功能还特强的 Vue 3组件!且开源免费!