Este es un blogger front-end sin rutinas. Está interesado en todo tipo de operaciones orientadas al front-end. A menudo escribe donde piensa. Si te interesa la tecnología y los efectos front-end, puedes dejar un mensaje~ El blogger pisará el hoyo para todos después de verlo. La ~
página de inicio: la página de inicio de Oliver Yoon
Lema: Levántate cuando te caigas ~
I. Introducción
Este artículo proviene de la demanda real de pantalla grande. Dado que tomé un desvío durante mucho tiempo, lo grabé deliberadamente. El objetivo principal es realizar la selección predeterminada y los efectos de selección de cambio de tiempo del histograma apilado en echarts ;
2. Representación
El diagrama de efectos generales es el siguiente:
3. Realización del efecto
El núcleo de la conmutación radica en dispatchAction
el (la dirección del sitio web oficial es la siguiente: https://echarts.apache.org/zh/api.html#action.highlight ), este método tiene dos parámetros en el elemento de tipo, que son highlight
y showTip
, estos dos parámetros se utilizan aquí.La descripción de estos dos parámetros es la siguiente:
3.1 resaltar
La función principal de resaltar es resaltar el gráfico , en otras palabras, esta configuración en el histograma puede hacer que el histograma esté resaltado.
// 如果要高亮系列:
dispatchAction({
type: 'highlight',
// 用 index 或 id 或 name 来指定系列。
// 可以使用数组指定多个系列。
seriesIndex?: number | number[],
seriesId?: string | string[],
seriesName?: string | string[],
// 数据项的 index,如果不指定也可以通过 name 属性根据名称指定数据项
dataIndex?: number | number[],
// 可选,数据项名称,在有 dataIndex 的时候忽略
name?: string | string[],
});
Efecto de resaltado específico, efecto:
la barra de fondo blanco aquí es el efecto de resaltado;
3.2 showTip
La función de este parámetro es mostrar sugerencias de forma activa , que es el pequeño cuadro blanco en la leyenda anterior.
dispatchAction({
type: 'showTip',
// 系列的 index,在 tooltip 的 trigger 为 axis 的时候可选。
seriesIndex?: number,
// 数据项的 index,如果不指定也可以通过 name 属性根据名称指定数据项
dataIndex?: number,
// 可选,数据项名称,在有 dataIndex 的时候忽略
name?: string,,
// 本次显示 tooltip 的位置。只在本次 action 中生效。
// 缺省则使用 option 中定义的 tooltip 位置。
position: number[] | string | Function,
})
Después de ejecutar este código, puede especificar la visualización de sugerencias de la imagen;
3.3 Código de implementación
Conociendo la API para resaltar y mostrar sugerencias, entonces será conveniente
// 取消之前高亮的图形
chart.dispatchAction({
type: "downplay",
seriesIndex: option.yAxis.data.length,
dataIndex: app.currentIndex,
});
// 计算下一个高亮的位置
app.currentIndex =
app.currentIndex - 1 > -1
? app.currentIndex - 1
: option.yAxis.data.length;
// 执行高亮
chart.dispatchAction({
type: "highlight",
seriesIndex: 0,
dataIndex: app.currentIndex,
});
// 执行
chart.dispatchAction({
type: "showTip",
seriesIndex: 0,
dataIndex: app.currentIndex,
});
Cabe señalar aquí que antes de realizar el resaltado, es necesario cancelar el resaltado anterior por seguridad , para garantizar que los resultados estén en línea con las expectativas al realizar el resaltado;
3.4 Código general
El siguiente es el código completo, el efecto específico es el efecto del segundo capítulo de este artículo;
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
<style>
html,
body {
position: relative;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
.main {
position: relative;
width: 100%;
height: 100%;
padding: 20px;
box-sizing: border-box;
background-color: #333333;
}
</style>
</head>
<body>
<div class="main" id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.4.2/echarts.js"></script>
<script>
let chart = echarts.init(document.getElementById("app"));
let option = {
tooltip: {
trigger: "axis",
axisPointer: {
// Use axis to trigger tooltip
type: "shadow", // 'shadow' as default; can also be 'line' or 'shadow'
},
},
legend: {
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true,
},
xAxis: {
type: "value",
},
yAxis: {
type: "category",
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
},
series: [
{
name: "Direct",
type: "bar",
stack: "total",
label: {
show: true,
},
emphasis: {
focus: "series",
},
data: [320, 302, 301, 334, 390, 330, 320],
},
{
name: "Mail Ad",
type: "bar",
stack: "total",
label: {
show: true,
},
emphasis: {
focus: "series",
},
data: [120, 132, 101, 134, 90, 230, 210],
},
{
name: "Affiliate Ad",
type: "bar",
stack: "total",
label: {
show: true,
},
emphasis: {
focus: "series",
},
data: [220, 182, 191, 234, 290, 330, 310],
},
],
};
chart.setOption(option);
var app = {
currentIndex: option.yAxis.data.length,
};
setInterval(() => {
// 取消之前高亮的图形
chart.dispatchAction({
type: "downplay",
seriesIndex: option.yAxis.data.length,
dataIndex: app.currentIndex,
});
app.currentIndex =
app.currentIndex - 1 > -1
? app.currentIndex - 1
: option.yAxis.data.length;
chart.dispatchAction({
type: "highlight",
seriesIndex: 0,
dataIndex: app.currentIndex,
});
chart.dispatchAction({
type: "showTip",
seriesIndex: 0,
dataIndex: app.currentIndex,
});
}, 1000);
</script>
</body>
</html>
Cuatro Resumen
La función de echarts es muy poderosa. La selección predeterminada y el cambio de tiempo en este artículo principalmente toman prestado el resaltado y la sugerencia en la API de dispatchAction ; especifique el resaltado gráfico a través del resaltado , luego muestre la ventana de aviso a través de **showTip , y finalmente ejecute la sincronización a través de setInterval Switching completa este requisito (por supuesto, setInterval tiene ciertos problemas, que pueden resolverse mediante setTimeout recursivo);