A부터 시작하여 대상 문자에 도달 할 때까지 주어진 단어의 각 문자를 증가시키는 코드가 있습니다. 아래의 코드 스 니펫에서 예제를 볼 수 있습니다. 이 코드는 단일 div id를 대상으로 할 때 작동하지만이 "block"클래스가 할당 된 모든 텍스트 블록에이 증가하는 텍스트 효과를 적용하도록 만들고 싶습니다.각 클래스를 사용하여이 클래스에 액세스
$(this).parent('.block').html(txt);
나는 위의 각 "블록"클래스를 대상으로하는 것을 시도하고있다 :
$(document).ready(function() {
console.log("ready!");
$('.block').each(function() {
function Letter(table, letter, duration) {
this.table = table;
this.letter = letter;
this.current = 0;
this.delay = duration/tbl.indexOf(letter); // ms
this.time = Date.now();
this.done = false;
}
Letter.prototype.update = function() {
if (this.done) return;
var time = Date.now();
if (time - this.time >= this.delay) {
this.time = time;
if (this.letter === this.table[this.current] || this.current === this.table.length) {
this.done = true;
} else {
this.current++;
}
}
};
var word = $(this).html();
console.log('Word: ' + word);
var tbl = " ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var letters = [];
word.toUpperCase().split("").forEach(function(l) {
letters.push(new Letter(tbl, l, 2500))
console.log(l);
});
(function loop() {
var txt = "",
isDone = true;
letters.forEach(function(l) {
l.update();
if (!l.done) isDone = false;
txt += l.table[l.current];
});
// output txt
//$("div#d").html(txt);
$(this).parent('.block').html(txt);
if (!isDone) requestAnimationFrame(loop);
else { /* done */ }
})();
});
});
나는 할당 된 "블록"클래스와 출력에 각 텍스트 비트 상에 증가 효과를 시도하고있다 코드 행은 작동하지 않습니다. 어떻게해야합니까? 다음은이 내 인생이 창
var word = $(this).html();
$(document).ready(function() {
console.log("ready!");
$('.block').each(function() {
function Letter(table, letter, duration) {
this.table = table;
this.letter = letter;
this.current = 0;
this.delay = duration/tbl.indexOf(letter); // ms
this.time = Date.now();
this.done = false;
}
Letter.prototype.update = function() {
if (this.done) return;
var time = Date.now();
if (time - this.time >= this.delay) {
this.time = time;
if (this.letter === this.table[this.current] ||
this.current === this.table.length) {
this.done = true;
} else {
this.current++;
}
}
};
var word = $(this).html();
console.log('Word: ' + word);
var tbl = " ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var letters = [];
word.toUpperCase().split("").forEach(function(l) {
letters.push(new Letter(tbl, l, 2500))
console.log(l);
});
(function loop() {
var txt = "",
isDone = true;
letters.forEach(function(l) {
l.update();
if (!l.done) isDone = false;
txt += l.table[l.current];
});
// output txt
//d.innerHTML = txt;
$("div#d").html(txt);
if (!isDone) requestAnimationFrame(loop);
else { /* done */ }
})();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id=d></div>
<div id="other_spans">
<span class="block">First</span>
<span class="block">Second</span>
<span class="block">Third</span>
내부 참조를 사용합니까? 같은'# d' 엘리먼트로? – guest271314
당신이 물어 보지는 않았지만'Letter()'생성자와'update()'메소드를'.each()'루프 전에 선언 할 수 없었습니까? 그들은 실제로 루프 논리의 일부가 아닙니다. 또한 마음에 들지는 않았 으면 좋겠지 만, 각 블록이 끝난 곳을보기가 어려웠으므로 코드의 들여 쓰기 (실제 코드 자체는 변경되지 않음)를 수정하기 위해 질문을 편집했습니다. – nnnnnn
@ guest271314 각 결과는 해당 ".block"클래스 요소가 반환됩니다. 다시 말하면, 위의 예제에서 "First" "Second"와 "Third"는 모두 주위에 "블록"스팬이 있기 때문에 증가 효과를 표시합니다 – cpcdev