我试图让它闪烁,但它不会工作

我试图让它闪烁,但它不会工作

问题描述:

我试图在我公司的ERP中创建通知系统,类似于Facebook。现在,工作几个小时后,它看起来像这样:我试图让它闪烁,但它不会工作

example

每个菜单项是li元素。每个元素都有的,将修改它的类人的背景色:

  • selected是蓝色的,在图片上
  • restricted显示为红色现在

,我想要实现的是以使li背景在某些事件上闪烁(当新消息进来并且列表未打开(并且selected类不存在))。

问题是:它不会闪烁。 :(

这里是我的HTML(不包括信息框)的卡扣

<li class="notifications-topmenu-button selected"> 
    <a href="#"> 
    <div class="notifications-topmenu-button-wrapper"> 
     <div class="notifications-topmenu-button-icon"> 
     <img class="transparent" width="13" height="13" align="absmiddle" src="/images/icons/notifications.png" title="Powiadomienia" alt="Powiadomienia"> 
     </div> 
     <div class="notifications-topmenu-button-counter" style="display: block;">3</div> 
    </div> 
    </a> 
    <span class="divider"> : </span> 
</li> 
<li class="selected"> 
    <a href="/system_dev.php/users/profile">Strona główna</a> 
    <span class="divider"> : </span> 
</li> 

此外,还有一些JavaScript启动对象(不介意评论):

function notificationsObject(){ 
    var nl = new Object(); 

    //atrybuty klasy 
    nl.liElement = $('.notifications-topmenu-button'); 
    nl.menuButton = $('.notifications-topmenu-button-wrapper'); 
    nl.menuButtonCounter = nl.menuButton.find('.notifications-topmenu-button-counter'); 
    nl.notificationsCount = jQuery.trim(nl.menuButtonCounter.text()); 
    nl.notificationsList = $('.notifications-list-wrapper'); 
    nl.blinkingInterval = null; 

    nl.startBlinking = function(){ 
    nl.blinkingInterval = setInterval(function(){ 
             if(nl.liElement.hasClass('restricted') == false){ 
              console.debug(nl.liElement.addClass('restricted')); 
             } 
              else { 
              nl.liElement.removeClass('restricted'); 
              } 
             }, 1000); 
    } 

    nl.stopBlinking = function(){ 
    if(nl.blinkingInterval != null) nl.blinkingInterval = null; 
    } 

    (more 'class' functions) 

    return nl; 
} 

我们测试它,我只是打电话

$(document).ready(function(){ 

    var notifications = notificationsObject(); 
    notifications.startBlinking(); 

}); 

当然我在函数声明后调用它

有趣的是,当我改变nl.startBlinking函数setInterval内部只添加restricted类,它的工作原理。我很肯定它肯定是一些错字或愚蠢的错误,但我找不到它。

请帮忙!

好的,问题解决了。

的事情是,这个功能

nl.startBlinking = function(){ 
    nl.blinkingInterval = setInterval(function(){ 
             if(nl.liElement.hasClass('restricted') == false){ 
              console.debug(nl.liElement.addClass('restricted')); 
             } 
              else { 
              nl.liElement.removeClass('restricted'); 
              } 
             }, 1000); 
    } 

开始执行的声明。

所以当我打电话

$(document).ready(function(){ 

    var notifications = notificationsObject(); 
    notifications.startBlinking(); 

}); 

我不是一个,而是两个间隔在同一时间工作。

+1

不要认为这是它,它不是一个“即时功能”,你只能称它一次。这里是另一个带有console.log('started')的小提琴,以显示它只被调用一次http://jsfiddle.net/w9SDH/。很高兴你把它分类。 – Ben 2013-03-26 09:34:09

+0

不要忘记接受你的答案(如果可以的话)以备将来参考。 – zik 2013-03-26 11:24:29

+0

本 - 这是真的。事实上,这个问题在其他地方说谎。更进一步,在我的'notificationObject()'函数中,我做了一些与'construct'类似的东西 - 只是一组在启动时执行的函数。其中一个是检查通知计数是否大于0,然后更改页面标题并执行闪烁。这是我愚蠢的错误,但说实话,无论如何,你们帮我找到了它。谢谢! – ex3v 2013-03-26 13:56:15

尝试使用toggleClass函数,而不是检查类自己喜欢:

setInterval(function(){ 
    nl.liElement.toggleClass('restricted');          
}, 1000); 

jQuery的参考:http://api.jquery.com/toggleClass/

+0

嗨!在我遇到'if' -'else'之前,我试过了。不幸的是,它没有给我任何东西 – ex3v 2013-03-26 09:14:15

我把所有的代码放到一个小提琴here和它的工作。不确定是什么问题。

加入CSS

.restricted{ 
    visibility:hidden; 
} 

另外除去(more 'class' functions)线。但我认为你只是将其添加到帖子中,它不是你的代码的一部分。

+0

问题是'restricted'是'background-color:red',但是,当然这并不重要。我刚刚在firebug的html输出上演了一段时间,我看到,在我的例子中,'restricted'类永远不会被JavaScript添加到代码中。 – ex3v 2013-03-26 09:18:59

+0

对不起,我没有关注,你有没有修复它?我已经改变为背景颜色的CSS,它似乎仍然工作 - http://jsfiddle.net/aXS2Z/ – Ben 2013-03-26 09:23:48

+0

本,我在下面添加了新的答案和解决方案。还是要谢谢你的帮助! :) – ex3v 2013-03-26 09:26:57

添加和删除的只是代替了2类受限制

if(nl.liElement.hasClass('restricted') == false){ 
              nl.liElement.addClass('restricted'); 
              nl.liElement.removeClass('selected'); 
             } 
              else { 
              nl.liElement.removeClass('restricted'); 
              nl.liElement.addClass('selected'); 
              }