这应该发生: 在开始的数组中,PartA会根据每个时间添加到div中。为此,我使用setTimeout()。
无效。
如果用户点击从partA添加的链接,则数组partB(或partN)中的单词也应附加到div。如何将当前感兴趣的数组传递给function buildString(what)
?
这是我挂的地方
// WORDS!
partA = [
["Hello", 300],
["my", 300],
["name", 300],
["<a href='#' class='partB' >is</a>", 600],
[".", 300],
];
PartB = [
["Good", 300],
["Bye", 300]
];
// Function to iterate over array
var i = 1;
function buildString(what) {
$('div').append(partA[i-1][0]+' ');
if(i > partA.length-1) return;
i++;
window.setTimeout(buildString, partA[i-1][1]);
}
// Bind click on link to continue with different array
$('a.partB').click(function(e){
e.preventDefault();
// Continue with part B
// Not working
buildString(partB);
})
// Begin with first array
buildString(partA);
#div {
font-size: 50pt;
font-family: Arial;
letter-spacing: -1px;
margin:2rem;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div"></div>
修改 当我在setTimeout函数中使用什么并注入数组时:
function buildString(what) {
$('div').append(what[i-1][0]+' ');
if(i > what.length-1) return;
i++;
window.setTimeout(buildString(what), what[i-1][1]);
}
这些单词不会一个接一个地附加,但会添加整个刺痛。
答案 0 :(得分:0)
我使用for循环执行并在每个cicle中添加超时值:
var box = $('div');
var before;
function buildString(array) {
before = 0;
for(var i = 0; i < array.length; i++){
appendToBox(array[i]);
}
}
function appendToBox(obj){
setTimeout(function(){
box.append(obj[0] + ' ');
}, obj[1] + before);
before += obj[1];
}
使用此方法可确保每个超时值都能正确执行。
修改强>
你可以根据需要将尽可能多的数组传递给buildString(array)函数。
答案 1 :(得分:0)
buildString
函数中,您没有使用参数。 你能做的就像我在例子中所做的那样bind the click event to an anchestor
。基本上,您将click事件绑定到类a.partB
// WORDS!
partA = [
["Hello", 300],
["my", 300],
["name", 300],
["<a href='#' class='partB' >is</a>", 600],
[".", 300],
];
partB = [
["Good", 300],
["Bye", 300]
];
// Function to iterate over array
function buildString(part, index) {
console.log('part');
console.log(part);
console.log('with index ' + index);
console.log(part[index]);
$('div').append(part[index][0]+' ');
if(index == part.length-1) return;
index++;
window.setTimeout(buildString, part[index-1][1], part, index);
}
$(document).on('click', 'a.partB', function(e){
e.preventDefault();
// Continue with part B
console.log('here we go B');
buildString(partB, 0);
});
buildString(partA, 0);
#div {
font-size: 50pt;
font-family: Arial;
letter-spacing: -1px;
margin:2rem;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div"></div>
答案 2 :(得分:0)
// Function to iterate over array -> buildString(partA);
function buildString(arr) {
arr.forEach(function(item) {
setTimeout($('#div').append(item[0] + ' '), item[1]);
})
}
$(document).on('click', 'a.partB', function(e) {
buildString(partB);
});
buildString(partA);