index.html 4.0 KB
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <div>消息: <span id="result"></span></div>

    <div><input type="number" id="maxSize"/><button onclick="setMaxSize()">改变曲线最大点数</button></div>
    <div><button onclick="lianjie()">连接服务</button></div>
    <div><input type="number" id="number"/><button onclick="setCameraNumber()">设置摄像头编号</button></div>
    <div><button onclick="openMedia()">开启摄像头</button></div>
    <div><button  onclick="clean()">清空曲线</button></div>
    <div><button  onclick="closeMedia()">停止摄像头</button></div>
    <div>
        <img id="showVideo" width="500" height="390" src="" style="display: none;"/>
        <canvas id="myCanvas" width="500" height="390" style="border:3px double #996633;"/>
    </div>
</div>
</body>

<script src="js/jquery.min.js"></script>
<script src="js/common.js"></script>
<script>
    var userId = Math.round(Math.random()*100);
    var url="";
    var fishCountList = [];

    var maxSize = 60;

    var ws1;

    function setMaxSize(){
        maxSize = $("#maxSize").val();
        fishCountList = [];
    }
    function lianjie(){
        $("#showVideo").show();
        var wsUrl = "ws://127.0.0.1:8064/websocket/"+userId;
        ws1 = new WebSocket(wsUrl);
        ws1.onopen = function (){
            $("#result").textContent = "服务已连接";
        }
        ws1.onmessage = function(message){
            console.log(message);

            if('{}' != message.data && undefined  != message.data)
            {
                var data = JSON.parse(message.data);
                if('{}' != data.frame && undefined  != data.frame)
                {
                    $("#showVideo").attr("src", "data:image/jpg;base64," + data.frame);
                }
                if(null != data.size && undefined  != data.size)
                {
                    addData(data.size);
                }
                drawChart();
            }
        }
        ws1.onclose = function (o) {
            $("#result").textContent = "服务断开";
        }
    }

    function setCameraNumber()
    {
        var number = $("#number").val();
        $.ajax({
            type: "GET",
            url: url + "/camera/setNumber/"+number,
        });
    }
    function openMedia(){
        $.ajax({
            type: "GET",
            url: url + "/camera/open",
            async: false
        });
    }

    function closeMedia(){
        $.ajax({
            type: "GET",
            url: url + "/camera/close",
        });
    }

    function clean(){
        fishCountList = [];
    }

    function drawChart() {
        var canvas = document.getElementById("myCanvas");
        var context = canvas.getContext("2d");
        context.clearRect(0, 0, canvas.width, canvas.height);

        var panelWidth = canvas.width;
        var panelHeight = canvas.height;
        var countSize = fishCountList.length;
        var counts = fishCountList.slice();

        var max = Math.max(...counts);
        var x = 0;
        var y = Math.round((counts[0] / max) * panelHeight);
        var yOffset = Math.round((panelHeight/2 - y)); // 计算垂直偏移量

        context.beginPath();
        context.moveTo(x, y + yOffset); // 将起始点偏移
        context.strokeStyle = "blue";
        context.lineWidth = 2;

        for (var i = 1; i < countSize; i++) {
            var nextX = Math.round((panelWidth * i) / countSize);
            var nextY = Math.round((counts[i] / max) * panelHeight);
            context.lineTo(nextX, nextY + yOffset); // 将每个点偏移
            x = nextX;
            y = nextY;
        }

        context.stroke();
    }

    // 添加数据到数组
    function addData(value) {
        // 当数组长度达到最大值时,移除第一个数据
        if (fishCountList.length >= maxSize) {
            fishCountList.shift();
        }

        // 添加新数据到数组末尾
        fishCountList.push(value);
    }

</script>
</html>