0

文字列を受け取り、一度に1文字ずつ遅延して出力する関数があります。ユーザーがリンクまたはボタンをクリックすると、イベントが発生します。問題は、ユーザーがリンクをクリックし、最初のリンクが完了する前に別のリンクをクリックすると、両方が同時に実行され、画面に出力されることです。ごちゃごちゃになってしまう。例: string1 : 「私はパイがとても好きです」 string1 : 「次の男もそうです」 出力 : i sloi kdeo epse .... など。

これを修正する方法を知っている人はいますか?関数が既に処理されているかどうかを確認し、処理が完了するまで待ってから次の処理を開始する方法が必要だと思います。

4

4 に答える 4

0

すべてのクリックを考慮したくありませんが、順番に ? もしそうなら、プロセスへのクリックの追加とクリックの消費の間でストリームを分離することをお勧めします:

html:

<a class="example" href="javascript:void(0)" onclick="delayPushLine();">i like pie very much</a><br/>
<a class="example" href="javascript:void(0)" onclick="delayPushLine();">so does the next guy</a>
<div class="writeThere"></div>

およびjavascript(jQueryを少し使用)

var charDisplayDelay = 50; // the time between each char display
var displayDelay = 2000; // the time before a click is handled
var lines = [];
var lineIdx = 0, pos = 0;

function delayPushLine(e) {
    if (!e) {
        e = window.event
    }
    setTimeout(function() { lines.push(e.srcElement.innerText); }, displayDelay);
}

function showLines () {
    if (lines.length > lineIdx) {
        if (pos < lines[lineIdx].length) {
            $(".writeThere").append(lines[lineIdx].substr(pos,1));
            pos++;
        } else {
            pos = 0;
            lineIdx++;
             $(".writeThere").append("<br/>");
        }
    }
}

setInterval("showLines()", charDisplayDelay);

http://jsfiddle.net/kD4JL/1/

于 2013-10-25T17:19:12.970 に答える