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 07:38:18 浏览: 43
可以尝试以下代码:
```
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()函数,将对应的菜单项高亮显示。
阅读全文