前端实时消息提示的效果-websocket长轮询

前端实时消息提示的效果-websocket长轮询

效果图如下:


1037884-20170810142855105-1549463663.png

 

参考代码如下:
jsp代码:

<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<div class="page-header navbar navbar-fixed-top">
    <div class="page-header-inner">
        <div class="page-logo">
            <a href="<c:url value="/"/>"><img
                src="<c:url value="/img/logo.png"/>" style="height: 14px" alt="logo"
                class="logo-default" /></a>
            <div class="menu-toggler sidebar-toggler hide"></div>
        </div>
        <a href="javascript:;" class="menu-toggler responsive-toggler"
            data-toggle="collapse" data-target=".navbar-collapse"></a>
        <div class="top-menu">
            <ul class="nav navbar-nav pull-right">
                <li class="dropdown dropdown-alert"><a href="#"
                    class="dropdown-toggle" data-toggle="dropdown"
                    data-hover="dropdown" data-close-others="true"> <span
                        class="badge pull-left"></span><label class="hidden-sm">报警</label><i
                        class="fa fa-bell"></i>
                </a>
                    <ul class="dropdown-menu">
                    </ul></li>
                <li class="dropdown dropdown-user"><a href="#"
                    class="dropdown-toggle" data-toggle="dropdown"
                    data-hover="dropdown" data-close-others="true"> <span
                        class="username username-hide-on-mobile">你好,${sessionScope.username}</span>
                        <i class="fa fa-angle-down"></i>
                </a>
                    <ul class="dropdown-menu">
                        <li><a href="javascript:;" id="updatePass"><i
                                class="icon-lock"></i>修改密码</a></li>
                        <li><a href="<c:url value="/logout"/> "><i
                                class="icon-key"></i>退出登录</a></li>
                    </ul></li>
            </ul>
        </div>
    </div>
</div>

<div class="clearfix"></div>
<script>
    //toastr.sos(num1)
</script>
<script type="text/javascript"
    src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript"
    src="http://cdn.bootcss.com/sockjs-client/1.1.1/sockjs.js"></script>
<script type="text/javascript">
    function wsPath() {
        var pathName = window.document.location.pathname;
        var host = window.location.host;
        var projectName = pathName.substring(0,
                pathName.substr(1).indexOf('/') + 1);
        return (host + projectName);
    }
    wsPath = wsPath();
    var websocket = null;
    if ('WebSocket' in window) {
        websocket = new WebSocket("ws://" + wsPath + "/websocket/socketServer");
    } else if ('MozWebSocket' in window) {
        websocket = new MozWebSocket("ws://" + wsPath
                + "/bison/websocket/socketServer");
    } else {
        websocket = new SockJS("http://" + wsPath
                + "/bison/sockjs/socketServer");
    }
    websocket.onmessage = onMessage;
    websocket.onope = onOpen;
    websocket.onerror = onError;
    websocket.onclose = onClose;

    function onOpen() {
    }

    function onMessage(evt) {
        var $uncheckedAlertMenuBtn = $("a.dropdown-toggle", $uncheckedAlertMenu);
        var $uncheckedAlertBadge = $("span.badge", $uncheckedAlertMenuBtn);
        var $uncheckedAlertMenu = $('li.dropdown-alert');
        var $uncheckedAlertList = $('ul', $uncheckedAlertMenu);
        var a = $uncheckedAlertBadge.html();
        $uncheckedAlertBadge.html(Number(a) + 1);
        //判断报警类型  如果是位置偏移,place+1
        if (evt.data == "1") {
            var count;
            var a = $("#number").html();
            if (a == null) {
                count = 1;
                $uncheckedAlertList
                        .prepend('<li class="place-alert"><a  href="alert?menuId=274"> <font color="red" id="place-alert">'
                                + "位置报警(<font id ='number'>"
                                + count
                                + "</font>)" + '</font></a></li>');
            } else {
                count = Number(a) + 1;
                $("#place-alert").html(
                        "位置偏移(<font id='number'>" + count + "</font>)");
            }
        }
        if (evt.data == "0") {
            var count;
            var a = $("#snum").html();
            if (a == null) {
                count = 1;
                $uncheckedAlertList
                        .prepend('<li class="sos-alert"> <a  href="alert?menuId=274"><font color="red" id="sos-alert">'
                                + "SOS报警(<font id='snum'>"
                                + count
                                + ")</font>"
                                + '</font></a></li>');
            } else {
                count = Number(a) + 1;
                $("#sos-alert").html(
                        "SOS报警(<font id='snum'>" + count + "</font>)");
            }
        }
    }
    
    function onError() {
        websocket.close();
    }
    
    function onClose() {
    }
    window.close = function() {
        websocket.onclose();
    }
</script>

程序媛

© 著作权归作者所有

拍照达人,爱美食 爱码字,爱生活。 这里是我的生活碎碎念,写代码经验,感悟,旅行笔记以及多愁善感 生活丰富多彩,思想泛滥成灾。 有一个终极梦想,有朝一日,能将自己的文字整理成书籍 更多前端学习资源领取请关注 微信公众号:祈澈姑娘

转载于:https://my.oschina.net/u/3704591/blog/1548670

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值