javascript - 使用 for 循环创建幻灯片效果时 setInterval 不起作用
问题描述
我想使用 setInterval 创建一个幻灯片来自动运行,但我没有看到它迭代!
每 2 秒后:幻灯片 1 -> 幻灯片 2 -> 幻灯片 1 -> 幻灯片 2 ->...
这是我的代码:
// debugger;
var getValue1 = document.querySelectorAll(".slide.slide-1 span");
var getValue2 = document.querySelectorAll(".slide.slide-2 span");
var slide = document.querySelectorAll(".slide");
var autoRunSlider = setInterval(function() {
for (let i = 0; i < slide.length; i++) {
for (let j = 0; j < getValue1.length; j++) {
getValue1[j].style.transform = "rotateX(90deg) translateY(-50%)";
getValue2[j].style.transform = "rotateX(0deg) translateY(0)";
}
// if (i >= slide.length - 1) {
// for (let j = 0; j < getValue1.length; j++) {
// getValue2[j].style.transform = "rotateX(90deg) translateY(-50%)";
// getValue1[j].style.transform = "rotateX(0deg) translateY(0)";
// }
// }
}
}, 2000);
链接 codepen.io:幻灯片
解决方案
您需要反转效果,因为transform
多次设置该属性只起作用一次。
// debugger;
let effect1 = true; // Counter for choosing which effect to take
var getValue1 = document.querySelectorAll(".slide.slide-1 span");
var getValue2 = document.querySelectorAll(".slide.slide-2 span");
var slide = document.querySelectorAll(".slide");
var autoRunSlider = setInterval(function() {
for (let i = 0; i < slide.length; i++) {
for (let j = 0; j < getValue1.length; j++) {
if (effect1) {
getValue1[j].style.transform = "rotateX(90deg) translateY(-50%)";
getValue2[j].style.transform = "rotateX(0deg) translateY(0)";
} else { // Reverse the effect
getValue2[j].style.transform = "rotateX(90deg) translateY(-50%)";
getValue1[j].style.transform = "rotateX(0deg) translateY(0)";
}
}
}
effect1 = !effect1
}, 2000);
推荐阅读
- java - 使用 Jackson 反序列化(在未知属性上失败)不会忽略鉴别器属性(使用 SwaggerCodegen 创建的 DTO)
- php - PHP删除具有特定键重复值的关联数组的数组
- google-drive-api - '已超过未经授权使用的每日限制。继续使用需要注册。单个文件下载后
- python - find_nearest 函数在调用数据框列时出错
- javascript - 将数据保存在构造函数中以跨多个对象使用
- ruby-on-rails - 如何显示对引擎中的组件所做的更改
- python - 如何在 CoCalc 上上传和导入间隙包
- spring-boot - Thymeleaf 在 Docker 容器中运行时无法解析模板
- cordova - 如何在 Ionic4 中更改指纹弹出窗口的语言?
- javascript - Bot 跟进提示在 IE11 上不起作用