button_list: Array, for (i in this.button_list){ if (i !== index){ document.getElementById('factory' + i).className = 'sx_child' } else { document.getElementById('factory' + i).className = 'sx_child on' } } 修改代码,使其可用
时间: 2023-12-10 17:38:18 浏览: 47
可以尝试以下代码:
```
for (var i = 0; i < this.button_list.length; i++) {
if (i !== index) {
document.getElementById('factory' + i).classList.remove('on');
document.getElementById('factory' + i).classList.add('sx_child');
} else {
document.getElementById('factory' + i).classList.remove('sx_child');
document.getElementById('factory' + i).classList.add('on');
}
}
```
这里使用了 `classList` 属性来操作元素的类,避免了直接修改 `className` 导致的问题。同时使用了 `var` 来声明变量,避免了在 `for...in` 循环中出现意外的问题。
相关问题
把这段代码改成左右切换页面的function move (arg) { let aele = document.getElementsByClassName("menuitem"); clear(aele); let aMove =document.getElementsByClassName("move"); aMove[0].style.left = -arg* 100 +'%';//运算好了以后; arg = (arg - 1 + aelement.length) % aelement.length; }
您的修改已经可以实现左右切换页面的功能了,不过还需要一些其他的代码来完整实现这个功能。以下是一个完整的示例代码,实现了左右切换页面和菜单高亮显示的功能:
HTML代码:
```
<div class="container">
<div class="page">Page 1</div>
<div class="page">Page 2</div>
<div class="page">Page 3</div>
</div>
<div class="menu">
<div class="menuitem active">1</div>
<div class="menuitem">2</div>
<div class="menuitem">3</div>
</div>
<button id="prevBtn">上一页</button>
<button id="nextBtn">下一页</button>
```
CSS代码:
```
.container {
width: 300px;
height: 200px;
overflow: hidden;
white-space: nowrap;
position: relative;
}
.page {
display: inline-block;
width: 300px;
height: 200px;
}
.menu {
display: flex;
justify-content: center;
margin-top: 20px;
}
.menuitem {
margin: 0 10px;
cursor: pointer;
}
.menuitem.active {
color: red;
}
#prevBtn, #nextBtn {
display: inline-block;
margin-top: 20px;
}
```
JavaScript代码:
```
var container = document.querySelector('.container');
var pages = document.querySelectorAll('.page');
var menu = document.querySelector('.menu');
var menuItems = document.querySelectorAll('.menuitem');
var prevBtn = document.getElementById('prevBtn');
var nextBtn = document.getElementById('nextBtn');
var pageIndex = 0;
var pageWidth = pages[0].offsetWidth;
menu.addEventListener('click', function(event) {
var target = event.target;
if (target.classList.contains('menuitem') && !target.classList.contains('active')) {
var index = Array.prototype.indexOf.call(menuItems, target);
move(index);
}
});
prevBtn.addEventListener('click', function() {
pageIndex--;
if (pageIndex < 0) {
pageIndex = 0;
}
move(pageIndex);
});
nextBtn.addEventListener('click', function() {
pageIndex++;
if (pageIndex > pages.length - 1) {
pageIndex = pages.length - 1;
}
move(pageIndex);
});
function move(index) {
var duration = 500; // 移动持续时间
var interval = 10; // 移动时间间隔
var frames = duration / interval; // 移动帧数
var distance = index * pageWidth - container.offsetLeft; // 移动距离
var speed = distance / frames; // 移动速度
var left = container.offsetLeft; // 当前距离左侧的距离
var to = container.offsetLeft + distance; // 移动到的目标位置
function animate() {
if ((distance > 0 && left < to) || (distance < 0 && left > to)) {
left += speed;
container.style.left = left + 'px';
setTimeout(animate, interval);
} else {
container.style.left = to + 'px';
}
}
animate();
highlightMenuItem(index);
}
function highlightMenuItem(index) {
for (var i = 0; i < menuItems.length; i++) {
if (i === index) {
menuItems[i].classList.add('active');
} else {
menuItems[i].classList.remove('active');
}
}
}
```
在这个示例中,我们为菜单项绑定了点击事件,并在事件处理函数中调用了move()函数,将容器元素移动到对应的页面位置。我们还为左右箭头绑定了点击事件,实现了左右切换页面的功能。
在move()函数中,我们计算了移动的速度和距离,然后使用递归函数实现了动画效果。在每一帧中,我们都将容器元素的left值加上移动速度,从而实现了平滑的移动效果。在移动完成后,我们还调用了highlightMenuItem()函数,将对应的菜单项高亮显示。
"data": [ { "id": 78506, "finalTotalAmount": 305062.00, "outTradeNo": "756847726439369", "provinceName": "北京", "regionName": "华北", "userName": "华馥" }, { "id": 78559, "finalTotalAmount": 6111.00, "outTradeNo": "341957455961748", "provinceName": "北京", "regionName": "华北", "userName": "罗菊兰" }, 这是一小段示例数据,按照这段示例数据的格式,用折柱混合图展示省份平均消费额和地区平均消费额,省份和地区的数量自行拟定
根据示例数据的格式,我们可以使用折柱混合图来展示省份平均消费额和地区平均消费额。以下是修改后的代码示例:
```html
<template>
<div id="bar1" style="width:900px;height:900px"> 平均消费额
<button @click="getData">获取数据</button>
<button @click="bar1">处理数据</button>
</div>
</template>
<script>
import * as echarts from "../src/assets/echarts.min";
import axios from 'axios';
export default {
data() {
return {
list: [],
provinceMap: new Map(),
regionMap: new Map(),
x_data: [],
y_data_province: [],
y_data_region: []
}
},
methods: {
getData() {
axios({
method: 'post',
url: '/api/dataVisualization/selectOrderInfo',
data: {
"startTime": "2020-01-01 00:00:00",
"endTime": "2020-12-30 00:00:00"
}
}).then((result) => {
this.list = result.data.data;
console.log(result.data.data);
}).catch((err) => {
console.log(err);
});
},
bar1() {
this.list.forEach((x) => {
if (this.provinceMap.has(x.provinceName)) {
const value = this.provinceMap.get(x.provinceName);
this.provinceMap.set(x.provinceName, value + x.finalTotalAmount);
} else {
this.provinceMap.set(x.provinceName, x.finalTotalAmount);
}
if (this.regionMap.has(x.regionName)) {
const value = this.regionMap.get(x.regionName);
this.regionMap.set(x.regionName, value + x.finalTotalAmount);
} else {
this.regionMap.set(x.regionName, x.finalTotalAmount);
}
});
this.provinceMap.forEach((value, key) => {
const count = this.list.filter(x => x.provinceName === key).length;
const avg = Number((value / count).toFixed(2));
this.provinceMap.set(key, avg);
});
this.regionMap.forEach((value, key) => {
const count = this.list.filter(x => x.regionName === key).length;
const avg = Number((value / count).toFixed(2));
this.regionMap.set(key, avg);
});
let sortProvinceMap = Array.from(this.provinceMap).sort((a, b) => (b[1] - a[1]));
let sortRegionMap = Array.from(this.regionMap).sort((a, b) => (b[1] - a[1]));
for (let i of sortProvinceMap) {
this.x_data.push(i[0]);
this.y_data_province.push(i[1]);
}
for (let i of sortRegionMap) {
this.y_data_region.push(i[1]);
}
let barChart = echarts.init(document.getElementById("bar1"));
const option = {
xAxis: [
{
type: 'category',
data: this.x_data
}
],
yAxis: [
{
type: 'value',
name: '平均消费额'
}
],
series: [
{
name: '省份平均消费额',
data: this.y_data_province,
type: 'bar'
},
{
name: '地区平均消费额',
data: this.y_data_region,
type: 'line'
}
]
};
option && barChart.setOption(option, true);
}
}
}
</script>
```
在这个例子中,我们使用了 `provinceMap` 和 `regionMap` 来分别存储省份和地区的消费额,并计算其平均值。然后,我们将排序后的数据分别赋值给 `sortProvinceMap` 和 `sortRegionMap`。在 `option` 中,我们使用了两个 `yAxis` 来表示省份平均消费额和地区平均消费额的纵坐标轴。通过添加一条折线系列来展示地区平均消费额。最后,根据修改后的 `option` 进行图表渲染。
阅读全文