这是我的函数。将递归函数转换为异步CPS实现(javascript)
function duplicate_step_through_highlighted (element_jq, target_jq, char_cb) {
console.log(element_jq);
var contents = element_jq.contents();
for (var i = 0 ; i < contents.length; ++i) {
// if text node, step
if (contents[i].nodeType === 3) {
// insert empty text node
var new_tn = document.createTextNode('');
target_jq.append(new_tn);
// iterate it
var text = contents[i].nodeValue;
for (var j = 0; j < text.length; j++) {
char_cb(text[j],new_tn);
new_tn.nodeValue += text[j];
// *** I want an async delay here ***
}
} else { // type should be 1: element
// target_jq gets a duplicate element inserted, copying attrs
var new_elem = $(contents[i].cloneNode(false)).appendTo(target_jq);
duplicate_step_through_highlighted($(contents[i]),$(new_elem),char_cb);
// then a recursive call is performed on the newly created element as target_jq
// and the existing one as element_jq. char_cb is passed in
}
}
}
我在做什么是通过一次重建是一个字符重建的HTML元素。这样做有很好的理由,我希望它的视觉效果能够“输入”。
所以现在没有延迟,所以我的元素立即被复制。我已经检查过结果是否一致,但我很清楚,我可能需要完全重写这些功能,以便在插入每个字符后能够进行异步延迟。
我需要重新编写它并有一个堆栈来跟踪我在元素中的位置吗?
那岂不是更容易的方式元素? – Yoshi 2012-07-26 08:43:27
字符串太多<-->如果我这样做了dom转换。它可能不会太慢,但如果我可以帮助它的话,我不会写低效的代码。我想看到元素动态地获得新的字母。我实际上计划在插入的字母上做动画。 – 2012-07-26 08:44:28