我在Laravel应用程序中使用推送程序的通道。 因此,当我从控制器触发事件时,该事件就会被接收到我的客户端,并使用pusher函数在首页上添加一些带有lib https://github.com/albburtsev/jquery.typist的文本:
channel.bind('App\\Events\\TextAdded', function(data) {
if(data.txt){
printPhrase(data.txt);
i++;
}
});
function printPhrase(txt) {
$('<span>')
.addClass('txt_' + i)
.appendTo('.typist_dialog')
.typist({
text:txt,
speed: 15,
}).on('end_type.typist', function() {
console.log('end') ;
}).typistStop() ;
}
});
如您所见,我可以捕获事件“ end_type”(当函数停止编写时)。
问题是我无法-或我不知道如何将“ channel.bind”放入队列中,因此等到printPhrase(txt)
完成...这样就不会显示多个打印了在屏幕上停留时间...
答案 0 :(得分:1)
您必须设置某种队列,以确保它们不会在上一个队列完成之前触发。这段代码未经测试,但可以解决问题:
var printQueue = [];
var queueWorking = false;
channel.bind('App\\Events\\TextAdded', function(data) {
if(data.txt){
printQueue.push(data.txt);
workQueue();
}
});
function printPhrase(txt) {
i++;
$('<span>')
.addClass('txt_' + i)
.appendTo('.typist_dialog')
.typist({
text:txt,
speed: 15,
}).on('end_type.typist', function() {
queueWorking = false;
workQueue();
}).typistStop() ;
}
function workQueue(){
if(printQueue.length && !queueWorking){
queueWorking = true;
printPhrase(printQueue.shift());
}
}