>  기사  >  웹 프론트엔드  >  HTML5 Canvas 기반의 지하철역 모니터링 구현

HTML5 Canvas 기반의 지하철역 모니터링 구현

小云云
小云云원래의
2017-12-06 16:23:412419검색

국내 경제의 급속한 발전과 함께 사람들의 안전에 대한 요구도 점점 더 높아지고 있습니다. 다음과 같은 상황이 발생하지 않도록 방지하기 위해서는 보안 시스템 설치를 고려해야 합니다. 증거 및 단서 제공: 많은 공장, 은행, 도난 또는 사고에서 관련 기관은 비디오 정보를 기반으로 사건을 감지할 수 있으며 이는 매우 중요합니다. 단서. 이번 글에서는 HTML5 Canvas를 기반으로 지하철 역사 모니터링을 구현하는 방법을 공유하겠습니다.

이 예제의 동적 효과는 다음과 같습니다.
HTML5 Canvas 기반의 지하철역 모니터링 구현

먼저 기본 장면을 빌드해 보겠습니다. HT에서 외부 장면을 내부로 가져오는 가장 일반적인 방법은 JSON 파일을 구문 분석하고 JSON 파일을 사용하여 빌드하는 것입니다. 장면의 장점 중 하나는 재활용이 가능하다는 것입니다. 오늘의 장면은 JSON을 사용하여 그려졌습니다. 다음으로 HT는 ht.Default.xhrLoad 함수를 사용하여 JSON 장면을 로드하고, HT 캡슐화된 DataModel.deserialize(json)를 사용하여 이를 역직렬화한 후 역직렬화된 개체를 DataModel에 추가합니다.

ht.Default.xhrLoad('demo2.json', function(text) {
    var json = ht.Default.parse(text);
    if(json.title) document.title = json.title;//将 JSON 文件中的 titile 赋给全局变量 titile 
    dataModel.deserialize(json);//反序列化
    graphView.fitContent(true);//缩放平移拓扑以展示所有图元,即让所有的元素都显示出来
});

HT에서는 데이터 type 객체가 생성되면 내부적으로 id 속성이 자동으로 할당됩니다. 이 속성은 data.getId() 및 data.setId(id)를 통해 얻고 설정할 수 있습니다. Data 객체가 DataModel에 추가된 후 id 값은 다음과 같습니다. dataModel.getDataById(id)를 통해 얻을 수 있습니다. 데이터 객체를 빠르게 찾습니다. 일반적으로 HT에 의해 id 속성이 자동으로 할당되는 것이 좋습니다. 사용자의 비즈니스 의미에 대한 고유 식별자는 태그 속성에 저장될 수 있습니다. Data#setTag(tag) 함수는 해당 데이터의 동적 변경을 허용합니다. 개체는 DataModel#getDataByTag(tag)를 통해 찾을 수 있으며 DataModel#removeDataByTag(tag)를 통해 데이터 개체 삭제를 지원합니다. 여기에서는 JSON에서 Data 개체의 태그 속성을 설정하고 코드의 dataModel.getDataByTag(tag) 함수를 통해 Data 개체를 얻습니다.

var fan1 = dataModel.getDataByTag('fan1');
var fan2 = dataModel.getDataByTag('fan2');
var camera1 = dataModel.getDataByTag('camera1');
var camera2 = dataModel.getDataByTag('camera2');
var camera3 = dataModel.getDataByTag('camera3');
var redAlarm = dataModel.getDataByTag('redAlarm');
var yellowAlarm = dataModel.getDataByTag('yellowAlarm');

아래 그림의 각 태그에 해당하는 요소를 만들었습니다.
HTML5 Canvas 기반의 지하철역 모니터링 구현

그런 다음 회전하고 플래싱해야 하는 객체를 설정합니다. HT는 객체의 현재 회전 각도를 가져와 이 각도를 기반으로 특정 라디안을 추가하고 사용합니다. setInterval 정기적으로 호출되어 동일한 호가 특정 시간 간격 내에 회전할 수 있습니다.

setInterval(function(){
    var time = new Date().getTime();
    var deltaTime = time - lastTime;
    var deltaRotation = deltaTime * Math.PI / 180 * 0.1;
    lastTime = time;

    fan1.setRotation(fan1.getRotation() + deltaRotation*3);
    fan2.setRotation(fan2.getRotation() + deltaRotation*3);
    camera1.setRotation(camera1.getRotation() + deltaRotation/3);
    camera2.setRotation(camera2.getRotation() + deltaRotation/3);
    camera3.setRotation(camera3.getRotation() + deltaRotation/3);

    if (time - stairTime > 500) {
        stairIndex--;
        if (stairIndex < 0) {
            stairIndex = 8;
        }
        stairTime = time;
    }

    for (var i = 0; i < 8; i++) {//因为有一些相似的元素我们设置的 tag 名类似,只是在后面换成了1、2、3,所以我们通过 for 循环来获取
        var color = stairIndex === i ? &#39;#F6A623&#39; : &#39;#CFCFCF&#39;;
        dataModel.getDataByTag(&#39;stair_1_&#39; + i).s(&#39;shape.border.color&#39;, color);
        dataModel.getDataByTag(&#39;stair_2_&#39; + i).s(&#39;shape.border.color&#39;, color);
    }

    if (new Date().getSeconds() % 2 === 1) {
        yellowAlarm.s(&#39;shape.background&#39;, null);
        redAlarm.s(&#39;shape.background&#39;, null);
    }
    else {
        yellowAlarm.s(&#39;shape.background&#39;, &#39;yellow&#39;);
        redAlarm.s(&#39;shape.background&#39;, &#39;red&#39;);
    }
}, 5);

HT는 또한 스타일을 설정하는 setStyle 함수를 캡슐화합니다. 특정 스타일은 s로 축약할 수 있습니다. 웹용 HT를 참조하세요. 스타일 매뉴얼:

for (var i = 0; i < 8; i++) {//因为有一些相似的元素我们设置的 tag 名类似,只是在后面换成了1、2、3,所以我们通过 for 循环来获取
    var color = stairIndex === i ? &#39;#F6A623&#39; : &#39;#CFCFCF&#39;;
    dataModel.getDataByTag(&#39;stair_1_&#39; + i).s(&#39;shape.border.color&#39;, color);
    dataModel.getDataByTag(&#39;stair_2_&#39; + i).s(&#39;shape.border.color&#39;, color);
}

us "경고등"의 깜박임도 타이밍 제어됩니다. 짝수 초이면 조명의 배경색이 "무색"으로 설정됩니다. 그렇지 않으면 노란색 경보입니다. "노란색"으로 설정됩니다. redAlarm인 경우 "빨간색"으로 설정됩니다.

if (new Date().getSeconds() % 2 === 1) {
    yellowAlarm.s(&#39;shape.background&#39;, null);
    redAlarm.s(&#39;shape.background&#39;, null);
}
else {
    yellowAlarm.s(&#39;shape.background&#39;, &#39;yellow&#39;);
    redAlarm.s(&#39;shape.background&#39;, &#39;red&#39;);
}

전체 예제가 너무 쉽게 풀렸습니다. . .

더 많은 것을 배우고 싶은 친구는 HT for Web 공식 웹사이트에 가서 다양한 매뉴얼을 보고 학습할 수 있습니다.


국내 경제의 급속한 발전과 함께 사람들의 안전에 대한 요구도 점점 높아지고 있습니다. 다음과 같은 상황이 발생하지 않도록 방지하기 위해서는 보안 시스템 설치를 고려해야 합니다. 증거 및 단서 제공: 많은 공장, 은행, 도난 또는 사고에서 관련 기관은 비디오 정보를 기반으로 사건을 감지할 수 있으며 이는 매우 중요합니다. 단서. 분쟁이나 사고도 일부 발생하는데, 관련 담당자의 책임은 영상녹화를 통해 쉽게 알 수 있다. 높은 민방위 비용: 요즘 많은 곳에서 안전을 생각할 때 경비원 고용을 생각합니다. 경비원 한 명당 월 800달러가 들고 하루 3교대로 근무하면 연간 40,000위안 정도가 필요합니다. 전자 보안 장비의 가격이 저렴하지 않으며, 몇 년 내에 전자 보안 장비를 교체할 필요성도 적습니다. 따라서 민방위 비용은 상대적으로 높습니다. 민방위 지원: 대부분의 경우 안전을 보장하기 위해 사람에게만 의존하는 것은 매우 어렵습니다. 많은 경우 전자 보안 장비(예: 모니터 및 경보)의 지원이 더 완벽해야 합니다. 특별한 경우에 사용해야 합니다. 일부 가혹한 조건(고열, 추위, 폐쇄 등)에서 사람들이 육안으로 명확하게 관찰하기 어렵거나 환경이 단순히 사람들이 머물기에 적합하지 않기 때문에 전자 보안 장비를 사용해야 합니다. 은폐: 전자 보안 장비를 사용하면 일반 사람들은 항상 감시를 받고 있다는 느낌을 받지 못하고 은폐됩니다. 24시간 보안 보장: 24시간 중단 없는 보안 요구를 충족하려면 전자 장비를 고려해야 합니다. 원격 모니터링: 컴퓨터 기술과 네트워크 기술의 발달로 다양한 장소에서 원격으로 모니터링하고 영상을 보는 것이 가능해졌습니다. 이제 많은 기업의 리더들은 인터넷을 통해 전 세계 어느 지점의 상황을 실시간으로 관찰할 수 있습니다. 적시에 상황을 이해하는 데 도움이됩니다. 영상 보존: 디지털 영상 기술의 발달로 영상을 컴퓨터의 디지털 저장장치를 통해 저장할 수 있게 되면서 보다 오랜 기간 동안 보다 선명한 영상으로 저장할 수 있게 되었습니다. 생산 관리: 관리자는 적시에 직관적인 방식으로 생산 최전선의 상황을 이해할 수 있어 명령 및 관리가 용이합니다.

중국에서는 모니터링 시스템에 대한 수요가 많은 점을 고려하여 지하철 역사 등 대규모 모니터링의 경우 사고 예방을 위한 모니터링 시스템이 필요합니다. 오늘은 지하철 전단부 제작 방법을 소개하겠습니다. 스테이션 모니터링 시스템.

http://www.hightopo.com/demo/... 페이지를 마우스 오른쪽 버튼으로 클릭하고 "요소 검사"를 클릭하면 예제 소스 코드를 볼 수 있습니다.

이 예제의 동적 효과는 다음과 같습니다.
HTML5 Canvas 기반의 지하철역 모니터링 구현

먼저 기본 장면을 빌드해 보겠습니다. HT에서 외부 장면을 내부로 가져오는 가장 일반적인 방법은 JSON 파일을 구문 분석하고 JSON 파일을 사용하여 빌드하는 것입니다. 장면의 장점 중 하나는 재활용이 가능하다는 것입니다. 오늘의 장면은 JSON을 사용하여 그려졌습니다. 다음으로 HT는 ht.Default.xhrLoad 함수를 사용하여 JSON 장면을 로드하고, HT 캡슐화된 DataModel.deserialize(json)를 사용하여 이를 역직렬화한 후 역직렬화된 개체를 DataModel에 추가합니다.

ht.Default.xhrLoad(&#39;demo2.json&#39;, function(text) {
    var json = ht.Default.parse(text);
    if(json.title) document.title = json.title;//将 JSON 文件中的 titile 赋给全局变量 titile 
    dataModel.deserialize(json);//反序列化
    graphView.fitContent(true);//缩放平移拓扑以展示所有图元,即让所有的元素都显示出来
});

HT에서는 데이터 type 객체가 생성되면 내부적으로 id 속성이 자동으로 할당됩니다. 이 속성은 data.getId() 및 data.setId(id)를 통해 얻고 설정할 수 있습니다. Data 객체가 DataModel에 추가된 후 id 값은 다음과 같습니다. dataModel.getDataById(id)를 통해 얻을 수 있습니다. 데이터 객체를 빠르게 찾습니다. 일반적으로 HT에 의해 id 속성이 자동으로 할당되는 것이 좋습니다. 사용자의 비즈니스 의미에 대한 고유 식별자는 태그 속성에 저장될 수 있습니다. Data#setTag(tag) 함수는 해당 데이터의 동적 변경을 허용합니다. 개체는 DataModel#getDataByTag(tag)를 통해 찾을 수 있으며 DataModel#removeDataByTag(tag)를 통해 데이터 개체 삭제를 지원합니다. 여기에서는 JSON에서 Data 개체의 태그 속성을 설정하고 코드의 dataModel.getDataByTag(tag) 함수를 통해 Data 개체를 얻습니다.

var fan1 = dataModel.getDataByTag(&#39;fan1&#39;);
var fan2 = dataModel.getDataByTag(&#39;fan2&#39;);
var camera1 = dataModel.getDataByTag(&#39;camera1&#39;);
var camera2 = dataModel.getDataByTag(&#39;camera2&#39;);
var camera3 = dataModel.getDataByTag(&#39;camera3&#39;);
var redAlarm = dataModel.getDataByTag(&#39;redAlarm&#39;);
var yellowAlarm = dataModel.getDataByTag(&#39;yellowAlarm&#39;);

아래 그림의 각 태그에 해당하는 요소를 만들었습니다.
HTML5 Canvas 기반의 지하철역 모니터링 구현

그런 다음 회전하고 플래싱해야 하는 객체를 설정합니다. HT는 객체의 현재 회전 각도를 가져와 이 각도를 기반으로 특정 라디안을 추가하고 사용합니다. setInterval 정기적으로 호출되어 동일한 호가 특정 시간 간격 내에 회전할 수 있습니다.

setInterval(function(){
    var time = new Date().getTime();
    var deltaTime = time - lastTime;
    var deltaRotation = deltaTime * Math.PI / 180 * 0.1;
    lastTime = time;

    fan1.setRotation(fan1.getRotation() + deltaRotation*3);
    fan2.setRotation(fan2.getRotation() + deltaRotation*3);
    camera1.setRotation(camera1.getRotation() + deltaRotation/3);
    camera2.setRotation(camera2.getRotation() + deltaRotation/3);
    camera3.setRotation(camera3.getRotation() + deltaRotation/3);

    if (time - stairTime > 500) {
        stairIndex--;
        if (stairIndex < 0) {
            stairIndex = 8;
        }
        stairTime = time;
    }

    for (var i = 0; i < 8; i++) {//因为有一些相似的元素我们设置的 tag 名类似,只是在后面换成了1、2、3,所以我们通过 for 循环来获取
        var color = stairIndex === i ? '#F6A623' : '#CFCFCF';
        dataModel.getDataByTag('stair_1_' + i).s('shape.border.color', color);
        dataModel.getDataByTag('stair_2_' + i).s('shape.border.color', color);
    }

    if (new Date().getSeconds() % 2 === 1) {
        yellowAlarm.s('shape.background', null);
        redAlarm.s('shape.background', null);
    }
    else {
        yellowAlarm.s('shape.background', 'yellow');
        redAlarm.s('shape.background', 'red');
    }
}, 5);

HT는 또한 스타일을 설정하는 setStyle 함수를 캡슐화합니다. 특정 스타일은 s로 축약할 수 있습니다. 웹용 HT를 참조하세요. 스타일 매뉴얼:

for (var i = 0; i < 8; i++) {//因为有一些相似的元素我们设置的 tag 名类似,只是在后面换成了1、2、3,所以我们通过 for 循环来获取
    var color = stairIndex === i ? '#F6A623' : '#CFCFCF';
    dataModel.getDataByTag('stair_1_' + i).s('shape.border.color', color);
    dataModel.getDataByTag('stair_2_' + i).s('shape.border.color', color);
}

us "경고등"의 깜박임도 타이밍 제어됩니다. 짝수 초이면 조명의 배경색이 "무색"으로 설정됩니다. 그렇지 않으면 노란색 경보입니다. "yellow"로 설정되어 있으면 "red"로 설정됩니다.

if (new Date().getSeconds() % 2 === 1) {
    yellowAlarm.s('shape.background', null);
    redAlarm.s('shape.background', null);
}
else {
    yellowAlarm.s('shape.background', 'yellow');
    redAlarm.s('shape.background', 'red');
}

위 내용은 HTML5 Canvas를 기반으로 지하철 역사 모니터링을 구현하는 방법입니다.

관련 권장 사항:

자동 모니터링 및 동기화를 위한 mysql 스크립트

모니터링 스크립트에 대한 권장 예제 튜토리얼 10개

서버 모니터링에 대한 권장 기사 10개

위 내용은 HTML5 Canvas 기반의 지하철역 모니터링 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.