如何使用jQuery实现服务器新增数据时文本闪烁,兼容多用户同时发消息场景
问题根因
- 现有逻辑仅在页面初始化时触发1次闪烁效果,点击按钮执行
unblink()后没有对应重启闪烁的逻辑 - 没有存储历史未读消息数做对比,无法判断定时拉取到的是不是新的未读消息,即使有新用户发消息也不会重新启动闪烁
修复后的实现代码
JS 代码
$(document).ready(function() { // 存储上一次的未读消息数,初始设为0 let lastUnreadCount = 0; // 页面初始化拉取数据 $("#new_message").load('new_notification'); $("#indi").load('indi', function() { // 加载完成后取当前未读数,初始有未读就启动闪烁 const currentCount = parseInt($("#indi").text().trim()) || 0; if (currentCount > 0) { $("#indi").blink({delay: 100}); } lastUnreadCount = currentCount; }); // 点击下拉按钮停止闪烁 $('.dropdown-toggle').click(function() { $('#indi').unblink(); }); // 定时拉取新通知 setInterval(function() { $("#new_message").load('new_notification'); $("#indi").load('indi', function() { // 加载完成后对比未读数 const currentCount = parseInt($("#indi").text().trim()) || 0; // 如果当前未读数 > 上一次记录的,说明有新消息,启动闪烁 if (currentCount > lastUnreadCount) { $("#indi").blink({delay: 100}); } // 更新历史未读数 lastUnreadCount = currentCount; }); }, 1000); });
HTML 代码(无需修改,可保留原有逻辑)
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <i class="fa fa-envelope-o"></i> <span class="label label-success" id="indi"></span> </a>
逻辑说明
- 新增
lastUnreadCount变量存储上一次拉取到的未读消息数量,每次拉取新数据后和当前值做对比 - 只有当新的未读数量大于历史值时,才重新启动闪烁效果,避免重复触发
- 点击下拉按钮后仅停止当前闪烁,后续有新消息进来还是会重新触发闪烁,满足多用户同时发消息的场景需求
内容的提问来源于stack exchange,提问作者Gaming With Shady Wolf
相关产品推荐
相关产品推荐

