代码之家  ›  专栏  ›  技术社区  ›  Zack Burt

当收到新消息且选项卡处于非活动状态时,使标题反弹的最佳方法是什么?

  •  2
  • Zack Burt  · 技术社区  · 15 年前

    这是我目前所拥有的,但它很难看,感觉不是最好的做法。例如,如果接收到多条消息,它会多次启动changeTitle循环。

    var hasFocus = true;
    $(window).bind("blur", function() { 
        hasFocus = false;
    });
    $(window).bind("focus", function() {
        hasFocus = true;
        document.title = 'SiteName | Chat'; 
    });
    var i=0;
    function changeTitle() {
        i++;
        if(i%2) {
            document.title = 'New message on SiteName!';
        }
        else {
            document.title = 'SiteName | Chat';
        }
        if(!hasFocus) {
            setTimeout('changeTitle()',1000);
        }
    }
    
    // Then I call changeTitle() when a new message is received.
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   Zack Burt    15 年前

    这就是我最后要做的。

    function changeTitle() {
        i++;
        if(i%2) {
            document.title = 'New message on mysite!';
        }
        else {
            document.title = 'MySite | Chat';
        }
        if(!hasFocus) {
            titleCurrentlyChanging = true;
            setTimeout('changeTitle()',1000);
        }
        else {
            titleCurrentlyChanging = false;
            i=0;
            document.title = 'MySite | Chat';
        }
    }
    

    在addMessage()函数中,当接收到新消息时调用该函数:

    if(!hasFocus && !titleCurrentlyChanging) {
        changeTitle();
    }
    

    var i = 0;
    var titleCurrentlyChanging = false;
    
    var hasFocus = true;
    $(window).bind("blur", function() { 
        hasFocus = false;
    });
    $(window).bind("focus", function() {
        hasFocus = true;
        document.title = 'MySite | Chat'; 
    });
    
        2
  •  0
  •   Community Mohan Dere    9 年前

    在我的脑海里我能想到三个:

    1. Firefox的更好的gReader插件实际上改变了标签的favicon以显示未读文章。看看这个问题: Changing website favicon dynamically
    2. 新的Meta SO chat在标题前面添加了一个(*)。这有点让人想起IDE,IDE用一个星号来通知用户未保存的文件
    3. 对时间敏感(如聊天)您可能需要播放一个小声音来提醒用户新消息