单击时将数组中的项目插入 div
Insert items from an array into a div when clicking
我有一个包含预定义行的数组:
var linesArr = ["asd", "dsa", "das"];
我有一个 div,我用 JS 创建并用我的 CSS:
设计了它的样式
var div = document.createElement("div");
div.className = "storyArea";
div.innerHTML = linesArr[0];
现在我有了可以在单击时为文本 fadeIns 和 fadeOuts 设置动画的代码:
$(div).click(function(){
$(this).fadeOut(1000, function() {
$(this).text("Random text").fadeIn(2000);
});
});
但这不是一个可以遍历我的数组项的循环,它会一直显示预定义的文本。
我试图写一个可以解决这个问题的循环,但是迷路了:
$(div).click(function(){
for (var i = 1; i < linesArr.length; i++) {
$(div).fadeOut(1000, function() {
$(this).html(linesArr[i].fadeIn(2000));
});
};
});
那个循环不工作,我没有任何控制台错误,但这里的逻辑有缺陷。有人可以帮助我吗?
你想要这样吗
var linesArr = ["asd", "dsa", "das"];
var div = document.createElement("div");
div.className = "storyArea";
div.innerHTML = linesArr[0];
document.body.appendChild(div);
$(div).click(function(){
//for (var i = 1; i < linesArr.length; i++) {
$(div).fadeOut(1000, function() {
index = linesArr.indexOf($(this).html()) + 1;
$(this).html(linesArr[index % linesArr.length]);
$("div").fadeIn(2000);
});
//};
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
如果需要循环,可以在 IIFE 中使用循环:
$('div').click(function () {
(function loop(i) {
$('div').html(linesArr[i]).fadeOut(1000, function () {
$(this).html(linesArr[i]).fadeIn(2000);
i++;
if (i < linesArr.length) {
loop(i);
}
});
})(0);
});
var linesArr = ["asd", "dsa", "das"];
$('div').click(function () {
(function loop(i) {
$('div').html(linesArr[i]).fadeOut(1000, function () {
$(this).html(linesArr[i]).fadeIn(2000);
i++;
if (i < linesArr.length) {
loop(i);
}
});
})(0);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Click Me</div>
当完整回调运行时,您的 i 变量已经达到最后一个值。为了保留变量范围,您可以使用 IIFE
您可以使用指针(在本例中为 show
)来跟踪显示的当前元素。然后在每次单击时淡出当前并淡入下一个。
我还使用模块 %
在您到达结尾时循环回到第一个元素。
var linesArr = ["asd", "dsa", "das"];
var show = 1;
var div = document.createElement("div");
div.className = "storyArea";
div.innerHTML = linesArr[0];
$(document.body).append(div);
$(div).click(function() {
$(div).fadeOut(1000, function() {
$(this).html(linesArr[show++ % linesArr.length]).fadeIn(2000);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
我有一个包含预定义行的数组:
var linesArr = ["asd", "dsa", "das"];
我有一个 div,我用 JS 创建并用我的 CSS:
设计了它的样式 var div = document.createElement("div");
div.className = "storyArea";
div.innerHTML = linesArr[0];
现在我有了可以在单击时为文本 fadeIns 和 fadeOuts 设置动画的代码:
$(div).click(function(){
$(this).fadeOut(1000, function() {
$(this).text("Random text").fadeIn(2000);
});
});
但这不是一个可以遍历我的数组项的循环,它会一直显示预定义的文本。
我试图写一个可以解决这个问题的循环,但是迷路了:
$(div).click(function(){
for (var i = 1; i < linesArr.length; i++) {
$(div).fadeOut(1000, function() {
$(this).html(linesArr[i].fadeIn(2000));
});
};
});
那个循环不工作,我没有任何控制台错误,但这里的逻辑有缺陷。有人可以帮助我吗?
你想要这样吗
var linesArr = ["asd", "dsa", "das"];
var div = document.createElement("div");
div.className = "storyArea";
div.innerHTML = linesArr[0];
document.body.appendChild(div);
$(div).click(function(){
//for (var i = 1; i < linesArr.length; i++) {
$(div).fadeOut(1000, function() {
index = linesArr.indexOf($(this).html()) + 1;
$(this).html(linesArr[index % linesArr.length]);
$("div").fadeIn(2000);
});
//};
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
如果需要循环,可以在 IIFE 中使用循环:
$('div').click(function () {
(function loop(i) {
$('div').html(linesArr[i]).fadeOut(1000, function () {
$(this).html(linesArr[i]).fadeIn(2000);
i++;
if (i < linesArr.length) {
loop(i);
}
});
})(0);
});
var linesArr = ["asd", "dsa", "das"];
$('div').click(function () {
(function loop(i) {
$('div').html(linesArr[i]).fadeOut(1000, function () {
$(this).html(linesArr[i]).fadeIn(2000);
i++;
if (i < linesArr.length) {
loop(i);
}
});
})(0);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Click Me</div>
当完整回调运行时,您的 i 变量已经达到最后一个值。为了保留变量范围,您可以使用 IIFE
您可以使用指针(在本例中为 show
)来跟踪显示的当前元素。然后在每次单击时淡出当前并淡入下一个。
我还使用模块 %
在您到达结尾时循环回到第一个元素。
var linesArr = ["asd", "dsa", "das"];
var show = 1;
var div = document.createElement("div");
div.className = "storyArea";
div.innerHTML = linesArr[0];
$(document.body).append(div);
$(div).click(function() {
$(div).fadeOut(1000, function() {
$(this).html(linesArr[show++ % linesArr.length]).fadeIn(2000);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>