我试图让它闪烁,但它不会工作
我试图在我公司的ERP中创建通知系统,类似于Facebook。现在,工作几个小时后,它看起来像这样:我试图让它闪烁,但它不会工作
每个菜单项是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();
});
我不是一个,而是两个间隔在同一时间工作。
尝试使用toggleClass函数,而不是检查类自己喜欢:
setInterval(function(){
nl.liElement.toggleClass('restricted');
}, 1000);
jQuery的参考:http://api.jquery.com/toggleClass/
嗨!在我遇到'if' -'else'之前,我试过了。不幸的是,它没有给我任何东西 – ex3v 2013-03-26 09:14:15
我把所有的代码放到一个小提琴here和它的工作。不确定是什么问题。
加入CSS
.restricted{
visibility:hidden;
}
另外除去(more 'class' functions)
线。但我认为你只是将其添加到帖子中,它不是你的代码的一部分。
问题是'restricted'是'background-color:red',但是,当然这并不重要。我刚刚在firebug的html输出上演了一段时间,我看到,在我的例子中,'restricted'类永远不会被JavaScript添加到代码中。 – ex3v 2013-03-26 09:18:59
对不起,我没有关注,你有没有修复它?我已经改变为背景颜色的CSS,它似乎仍然工作 - http://jsfiddle.net/aXS2Z/ – Ben 2013-03-26 09:23:48
本,我在下面添加了新的答案和解决方案。还是要谢谢你的帮助! :) – 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');
}
不要认为这是它,它不是一个“即时功能”,你只能称它一次。这里是另一个带有console.log('started')的小提琴,以显示它只被调用一次http://jsfiddle.net/w9SDH/。很高兴你把它分类。 – Ben 2013-03-26 09:34:09
不要忘记接受你的答案(如果可以的话)以备将来参考。 – zik 2013-03-26 11:24:29
本 - 这是真的。事实上,这个问题在其他地方说谎。更进一步,在我的'notificationObject()'函数中,我做了一些与'construct'类似的东西 - 只是一组在启动时执行的函数。其中一个是检查通知计数是否大于0,然后更改页面标题并执行闪烁。这是我愚蠢的错误,但说实话,无论如何,你们帮我找到了它。谢谢! – ex3v 2013-03-26 13:56:15