功能描述

  1. 全屏横向柱状图
  2. 从小到大排序,每次显示5条,每3秒切换循环显示
  3. 鼠标移入停止切换,鼠标移出继续切换

柱状图组件源码

<template><div class="w100 h100"><div ref="bar" class="w100 h100"></div></div>
</template><script>
import { ququ } from "../../public/static/theme/ququ"; // 引入主题
export default {data() {return {barChart: null,barData: [{name: "商家1",value: 12,},{name: "商家2",value: 22,},{name: "商家3",value: 10,},{name: "商家4",value: 32,},{name: "商家5",value: 25,},{name: "商家6",value: 16,},{name: "商家7",value: 52,},{name: "商家8",value: 33,},{name: "商家9",value: 19,},{name: "商家10",value: 36,},{name: "商家11",value: 24,},{name: "商家12",value: 42,},{name: "商家13",value: 29,},{name: "商家14",value: 33,},],current: 1, // 当前页total: null, // 总页数timerId: null, // 定时器};},mounted() {/*** 需求:* 1、对数据进行从小到大排序,分为5个一组* 2、每隔3S切换一组展示,页面销毁清除定时器* 3、当鼠标移入图表停止切换,鼠标移出开启切换*/this.init();this.update();this.openTimer();},beforeDestroy() {clearInterval(this.timerId);},methods: {// 初始化图表init() {this.$echarts.registerTheme("ququ", ququ); // 注册主题this.barChart = this.$echarts.init(this.$refs.bar, "ququ"); // 使用主题初始化// 监听鼠标移入移出事件this.barChart.on("mouseover", (params) => {console.log(params);clearInterval(this.timerId);});this.barChart.on("mouseout", () => {this.openTimer();});},// 获取并处理数据,然后渲染图表update() {// 排序this.barData = this.barData.sort((a, b) => a.value - b.value);// 总页数this.total =this.barData.length % 5 == 0? this.barData.length / 5: parseInt(this.barData.length / 5) + 1;// 当前显示的5条数据let list = this.barData.slice((this.current - 1) * 5, this.current * 5);// 当前X、Y轴数据let barDataY = list.map((item) => item.name);let barDataX = list.map((item) => item.value);let option = {// 标题title: {text: "▍横向柱状图", // ▍ 任意打一个字,调出搜狗输入法卡片,右键单击——表情符号——符号大全left: 40,top: 40,textStyle: {fontSize: 60,color: "#fff",},},// 坐标轴grid: {top: "15%",left: "5%",right: "3%",bottom: "5%",containLabel: true, //是否包含坐标轴的文字},// X轴:横向柱状图,将xAxis的type设置为valuexAxis: {type: "value",},// Y轴:横向柱状图,将xAxis的type设置为categoryyAxis: {type: "category",data: barDataY,},// 图表内容series: [{type: "bar", // 图表类型data: barDataX, // 数据barWidth: 66, // 柱的宽度// 柱上面的数值配置label: {show: true, // 显示值position: "right", // 显示位置color: "white",},// 每一个条目的样式配置itemStyle: {barBorderRadius: [0, 34, 34, 0], // 圆角// 渐变色  1、指明颜色渐变的方向  2、指明不同百分比之下颜色的值color: new this.$echarts.graphic.LinearGradient(0, 0, 1, 0, [{ offset: 0, color: "#5050ee" },{ offset: 1, color: "#ab6ee5" },]),},},],// 提示框设置tooltip: {trigger: "axis", //触发类型——坐标轴// 鼠标移入条目下面的背景axisPointer: {type: "line",z: 0,lineStyle: {color: "rgba(225,225,225,.3)",width: 65,},},},};// 生成图表this.barChart.setOption(option);},// 定时切换当前展示页码openTimer() {if (this.timerId) {clearInterval(this.timerId);}this.timerId = setInterval(() => {if (this.current < this.total) {this.current++;} else {this.current = 1;}this.update();}, 6000);},},
};
</script>

option配置项的拆分

  1. initOption:初始化的静态配置
  2. dataOption:获取到动态数据后的数据配置
  3. screenOption:适配屏幕分辨率大小的配置
// 每一次set option 是合并的关系,所以可以拆分在不同的时机设置不同的
this.barChart.setOption(option);

加上适配屏幕和option拆分的代码

<template><div class="w100 h100"><div ref="bar" class="w100 h100"></div></div>
</template><script>
import { ququ } from "../../public/static/theme/ququ";
export default {props: {msg: String,},data() {return {barChart: null,barData: [{name: "商家1",value: 12,},{name: "商家2",value: 22,},{name: "商家3",value: 10,},{name: "商家4",value: 32,},{name: "商家5",value: 25,},{name: "商家6",value: 16,},{name: "商家7",value: 52,},{name: "商家8",value: 33,},{name: "商家9",value: 19,},{name: "商家10",value: 36,},{name: "商家11",value: 24,},{name: "商家12",value: 42,},{name: "商家13",value: 29,},{name: "商家14",value: 33,},],current: 1, // 当前页total: null, // 总页数timerId: null, // 定时器};},mounted() {/*** 需求:* 1、对数据进行从小到大排序,分为5个一组* 2、每隔3S切换一组展示,页面销毁清除定时器* 3、当鼠标移入图表停止切换,鼠标移出开启切换*/this.init();this.getData();this.openTimer();// 监听屏幕大小变化window.addEventListener("resize", this.screenResize);// 一进来主动调取屏幕适配this.screenResize();},beforeDestroy() {clearInterval(this.timerId);window.removeEventListener("resize", this.screenResize);},methods: {// 初始化图表init() {this.$echarts.registerTheme("ququ", ququ);this.barChart = this.$echarts.init(this.$refs.bar, "ququ");// 拆分option:1、静态配置在初始化的时候先注册,每一次setOption是合并关系let initOption = {// 标题title: {text: "▍横向柱状图", // ▍ 任意打一个字,调出搜狗输入法卡片,右键单击——表情符号——符号大全left: 40,top: 40,textStyle: {color: "#fff",},},// 坐标轴grid: {top: "15%",left: "5%",right: "3%",bottom: "5%",containLabel: true, //是否包含坐标轴的文字},// X轴:横向柱状图,将xAxis的type设置为valuexAxis: {type: "value",},// Y轴:横向柱状图,将xAxis的type设置为categoryyAxis: {type: "category",},// 图表内容series: [{type: "bar", // 图表类型// 柱上面的数值配置label: {show: true, // 显示值position: "right", // 显示位置color: "white",},// 每一个条目的样式配置itemStyle: {// 渐变色  1、指明颜色渐变的方向  2、指明不同百分比之下颜色的值color: new this.$echarts.graphic.LinearGradient(0, 0, 1, 0, [{ offset: 0, color: "#5050ee" },{ offset: 1, color: "#ab6ee5" },]),},},],// 提示框设置tooltip: {trigger: "axis", //触发类型——坐标轴// 鼠标移入条目下面的背景axisPointer: {type: "line",z: 0,lineStyle: {color: "rgba(225,225,225,.3)",},},},};this.barChart.setOption(initOption);// 监听鼠标移入移出事件this.barChart.on("mouseover", (params) => {console.log(params);clearInterval(this.timerId);});this.barChart.on("mouseout", () => {this.openTimer();});},// 获取并处理数据,然后渲染图表getData() {// 排序this.barData = this.barData.sort((a, b) => a.value - b.value);// 总页数this.total =this.barData.length % 5 == 0? this.barData.length / 5: parseInt(this.barData.length / 5) + 1;// 当前显示的5条数据let list = this.barData.slice((this.current - 1) * 5, this.current * 5);// 当前X、Y轴数据let barDataY = list.map((item) => item.name);let barDataX = list.map((item) => item.value);// 拆分option:2、data配置在获取导数据的时候注册,每一次setOption是合并关系let dataOption = {// Y轴:横向柱状图,将xAxis的type设置为categoryyAxis: {data: barDataY,},// 图表内容series: [{data: barDataX, // 数据},],};// 生成图表this.barChart.setOption(dataOption);},// 定时切换当前展示页码openTimer() {if (this.timerId) {clearInterval(this.timerId);}this.timerId = setInterval(() => {if (this.current < this.total) {this.current++;} else {this.current = 1;}this.getData();}, 6000);},// 监听屏幕变化screenResize() {this.$nextTick(() => {// 获取图表区域的宽度,作为基准值来设置其他需要动态改变的尺寸let width = this.$refs.bar.offsetWidth;let size = (width / 100) * 3.6; // 定义一个基准尺寸// 拆分option:3、受屏幕大小影响的配置在屏幕改变的时候setlet screenOption = {// 标题title: {textStyle: {fontSize: size, //标题大小},},// 图表内容series: [{barWidth: size, // 柱的宽度// 每一个条目的样式配置itemStyle: {barBorderRadius: [0, size / 2, size / 2, 0], // 圆角},},],// 提示框设置tooltip: {// 鼠标移入条目下面的背景axisPointer: {lineStyle: {width: size,},},},};this.barChart.setOption(screenOption);// 更新图表this.barChart.resize();});},},
};
</script>

echarts——横向柱状图相关推荐

  1. echarts横向柱状图单个柱子设置警戒线,超过警戒线为渐变蓝色,没超过为渐变红色

    效果图如下 话不多说,直接上代码. <!-- eslint-disable no-constant-condition --> <template><v-chart cl ...

  2. Echarts横向柱状图:叠加、堆叠(stack)以及点击事件

    html <div class="box" id="echartModel" style="background-color: #191e3e; ...

  3. echarts实现饼图及横向柱状图的绘制

    项目中需要绘制饼图,因此简单学习了下echarts的基本使用. head中引入js文件: <script src="/static/frame/echarts/echarts.min. ...

  4. echarts(横向柱状图和grid)

    场景 最近在做知识图谱的时候,右侧弹窗需要有数据统计功能,大概UI如下图,当时想到的是横向柱状图来实现,目前的效果与UI的不同是后面统计的数量显示的位置.后来经其他前端同事启发,他是用进度条来实现的, ...

  5. echarts横向渐变柱状图,顶部带scatter,effectScatter,背景色

    1.echarts横向渐变柱状图,顶部带scatter,effectScatter,背景色 (代码和效果如下) <template> <div class="chart&q ...

  6. 【Echarts】中国地图、堆叠图、横向柱状图

    封装一个监听窗口变化,自适应图像大小的混入对象: 混入对象:一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被"混合"进入该组件本身的选项. chart ...

  7. vue使用Echarts画柱状图

    目录 1 引入Echarts 1.1 安装 1.2 引入 2 基本柱状图 3 多列柱状图 4 柱状图样式设置 4.1 柱条样式 4.2 柱条间距 5 动态排序柱状图 6 总结 1 引入Echarts ...

  8. 堆叠横向柱状图顶部显示数值和

    效果图 不想写太多 过不了审核 下面代码 // num num1 num2 在全局定义 let num = 0 option = {tooltip: {trigger: "axis" ...

  9. 用Java制作左右横向柱状图_横向柱状图

    Echarts绘制横向柱状图(圆角+渐变) var myChart = echarts.init(document.getElementById('main'));//初始化数据 var catego ...

最新文章

  1. c++ 调用python
  2. 简述ajax的重构原因,Ajax 重构的步骤
  3. QML的import目录爬坑记录
  4. 美团饿了么:严禁诱导强迫骑手注册个体工商户
  5. Practice:Demonstrating the Key TCP/IP Protocols
  6. oracle 二进制运算符,Oracle UNION运算符
  7. DOM(十四):代理检测和事件处理(跨浏览器)
  8. Web前端学习-第一课JavaScript篇
  9. 一个百分号%引起的事故
  10. 识图在线识图_水电腾讯课堂开课啦~学习建筑水电识图从这里开始(文末有福利)...
  11. 原生JS实现弹幕的简单操作速成
  12. .NET MVC第九章、Web Api Json序列化与反序列化
  13. 【错误记录】Android 应用 POST 网络请求报错 ( java.io.IOException: Cleartext HTTP traffic to xxx not permitted )
  14. C语言基础——执行顺序
  15. 分布式和集群的概念区别
  16. Python爬虫:ZzzFun动漫视频网
  17. SAP FICO 批量成本估算
  18. c语言的三种基本结构——初学者一定要了解哦
  19. [ FI基本业务流程 ] - Accounts Payable基础知识
  20. PV、PVC、StorageClass讲解

热门文章

  1. 文件里的三个重要时间:access time(访问时间), modify time(修改时间), change time(状态改动时间)
  2. Hexo Butterfly 主题功能拓展 - 标签云 云养猫
  3. QT Android wifi自动重连开发
  4. Robcup2D足球学习记录【2020.01.18】
  5. c++语言表白超炫图形_数学公式的超酷表白我爱你
  6. 第三章 C语言运算符,表达式,序列点,类型转换
  7. 玄铁C910内存管理与地址转换技术
  8. H5接入支付流程-微信支付支付宝支付
  9. ..\OBJ\PRESSURE_SYSTEM.axf: Error: L6218E: Undefined symbol FLASH_ErasePage (referred from flash.o).
  10. 天玑800u处理器怎么样,相当于骁龙的多少