2013-03-28 23 views
0

我正在开发音频会议项目,以处理所有最新的浏览器。谁在谈论麦克风,将在服务器上生成一个事件,并在JavaScript中调用一个函数(whoIsTalking())。我将CSS替换为动画,以便通过切换CSS(依次切换背景图片)根据需要提高音量。但JavaScript的运行速度如此之快,我没有看到任何改变的CSS。演讲者发言时,我需要提高和降低音量。谁可以帮我这个事?如何使用CSS进行动画制作?

this.whoIsTalking = function (action, id, type) { 
    if(_selfM.logging) { 
     log.info("The current user who is " + action + " with id " + id + " , recieved from :" + type); 
    } 
    talker(id); 
} 
/** 
* Change class for talker 
* 
*/ 
function talker(id) { 
    if(_selfM.logging) log.debug('Now in the "talker" function'); 
    var talker = "talker_" + id; 
    $('span#' + talker).alterClass('btn-volum*', 'btn-volume_low'); 
    console.log($('span#' + talker)); 
    $('span#' + talker).alterClass('btn-volum*', 'btn-volume_medium'); 
    $('span#' + talker).alterClass('btn-volum*', 'btn-volume_high'); 
    $('span#' + talker).alterClass('btn-volum*', 'btn-volume_medium'); 
    $('span#' + talker).alterClass('btn-volum*', 'btn-volume_low'); 
    $('span#' + talker).alterClass('btn-volum*', 'btn-volume'); 
} 

注:alterClass('x','y')是一样removeClass('x').addClass('y');参考:alterClass

+0

jQuery的优点之一是它是可链式的。 '$('span#'+ talker).alterClass(x,y).delay(100).alterClass(x,y).....' – 2013-03-28 04:03:38

+0

检查alterclass是否正常工作。 – karthick 2013-03-28 04:12:35

+0

@Derek - '' .delay()只适用于使用动画队列的方法,所以它可能不适用于'.alterClass()'。 – jfriend00 2013-03-28 05:07:12

回答

1

可以使用一个计时器来调整的你的类的变化的定时,以便它们被间隔开的时间可预测的量:

function talker(id) { 
    if(_selfM.logging) log.debug('Now in the "talker" function'); 
    var volumes = ["_low", "_medium", "_high", "_medium", "_low", ""]; 
    var item = $('#talker_' + id); 
    var index = 0; 
    function next() { 
     var cls = item.attr("class"); 
     var match = cls.match(/(btn-volume.*?)[\s$]/); 
     if (match) { 
      item.removeClass(match[1]); 
     } 
     item.addClass("btn-volume" + volumes[index]); 
     index++; 
     // if still more to go, set timer for next class change 
     if (index < volumes.length) { 
      setTimeout(next, 500); 
     } 
    } 
    // start the process 
    next(); 
} 

这也使用卷名称的数组,以避免重复批次的代码和名称。

+0

我们应该在代码中的某个地方调用next()吗?它现在不会在下一个()。 – user1595858 2013-03-28 09:41:39

+0

我在最后添加了next()来执行该函数。现在它工作正常。 – user1595858 2013-03-28 10:17:29

+0

@ user1595858 - 是的,你是对的。我纠正了这个帖子。 – jfriend00 2013-03-28 13:42:49

相关问题