웹 프론트엔드 H5 튜토리얼 HTML5의 팝업 상자 효과 예 공유

HTML5의 팝업 상자 효과 예 공유

May 10, 2018 pm 02:57 PM
html5

이 글에서는 주로 HTML5 Canvas 기반의 팝업 상자 효과를 소개합니다. 필요하신 분들은 참고하시면 됩니다.

사용자가 마우스를 움직이면 팝업 상자가 나타나는 경우가 많습니다. 이는 HTML 요소를 처리할 때는 간단하지만, HTML5 Canvas로 구성된 그래픽을 처리하는 경우에는 Canvas가 다른 메커니즘을 사용하기 때문에 이 방법은 더 이상 적용되지 않습니다. Canvas에 얼마나 많은 그래픽을 그려도 Canvas는 전체적으로 동일합니다. 그래픽 자체는 실제로 Canvas의 일부이며 별도로 얻을 수 없으므로 JavaScript 이벤트를 그래픽에 직접 추가하는 것은 불가능합니다. 그러나 HT for Web에서는 이 요구 사항이 쉽게 구현됩니다.

이 장면 그래프는 HT for Web의 JSON 파일을 기반으로 합니다. 이러한 JSON 파일을 생성하는 방법에 대해 의구심이 생길 수 있습니다. 실제로 여기에는 이 작고 완전한 "HTML5 토폴로지 편집기"(www.hightopo.com/demo/2deditor_20151010/HT-2D-Editor.html)를 기반으로 내 요구 사항에 맞는 토폴로지 편집기를 쉽게 사용자 정의할 수 있습니다. . 뿐만 아니라, 이 Demo에서는 정의된 3가지 유형의 글머리 기호 상자 중 벡터 이미지 'tips1.json', 'tips2.json', 'tips3.json'이 이 벡터 편집기(http://www.hightopo)를 통해 제공됩니다. .com/demo/Vector-editor/index.html), 간략하게 그려봤는데 꽤 사용하기 쉽습니다. 위 시나리오에서 사용자가 잔디와 같은 개체 위로 마우스를 이동하면 팝업 상자에 자세한 정보가 표시됩니다. 데모 주소: http://www.hightopo.com/demo/blog_meadow_20170605/index.html

구체적인 구현은 다음과 같습니다.

Preparation

HT 소개(www.hightopo.com/):

<script src=&#39;ht.js&#39;></script>
dataModel = new ht.DataModel();
graphView = new ht.graph.GraphView(dataModel);
graphView.addToDOM();
로그인 후 복사

HT는 다음과 같이 정의된 JSON 벡터 형식으로 사용자 정의 JSON 형식 벡터 설명 형식을 제공합니다. HT 표준을 준수하며, 이미지로도 등록하여 사용할 수 있습니다. HT의 벡터 형식은 기존 형식보다 공간을 더 많이 절약하고 크기 조정 시 왜곡이 발생하지 않습니다. 자세한 내용을 보려면 HT를 클릭하세요. 여기에서는 세 가지 모양의 JSON 팝업 상자가 후속 호출을 위한 이미지로 등록됩니다.

ht.Default.setImage(&#39;tips1&#39;, &#39;symbols/tips1.json&#39;);
ht.Default.setImage(&#39;tips2&#39;, &#39;symbols/tips2.json&#39;);
ht.Default.setImage(&#39;tips3&#39;, &#39;symbols/tips3.json&#39;);
로그인 후 복사

그런 다음 대화형 효과가 있는 개체를 가져옵니다. 여기서 각 개체의 속성 이름은 각 기본 요소에 설정된 레이블 이름입니다.

//树
var tree = {
     &#39;tree1&#39; : true,
     &#39;tree2&#39; : true,
     &#39;tree3&#39; : true
};
//草地
var grass = {
     &#39;grass1&#39; : true,
     &#39;grass2&#39; : true,
     &#39;grass3&#39; : true
 };
//山
var mountain = {
    &#39;mountain&#39;: true
};
로그인 후 복사

Pop -up box

사실 팝업박스의 핵심은 노드입니다. 사용자가 마우스를 안팎으로 움직일 때,

1. 노드 숨김과 표시를 제어하면 팝업 효과를 얻을 수 있습니다. -up 상자;

2. 노드의 변경이 동반됩니다.

3. 마우스가 다른 개체 위로 이동하면 노드의 질감도 변경됩니다. . 노드의 속성 값도 마우스 위치에 따라 변경됩니다.

따라서 팝업 상자를 구현하려면 먼저 새 노드를 생성하고 해당 레벨을 '높음'으로 설정해야 합니다. 그 전에 장면 그래프의 JSON 파일을 역직렬화하고 역직렬화된 프리미티브를 레벨로 설정해야 합니다. 기존 프리미티브에 의해 차단되는 것을 방지하기 위해 '낮음':

ht.Default.xhrLoad(&#39;meadow.json&#39;, function(text) {
    const json = ht.Default.parse(text);                   
    if(json.title) document.title = json.title;
    dataModel.deserialize(json);
    //设置层级
    dataModel.each(function(data){
        data.setLayer(&#39;lower&#39;);
    });
    //新建node
    var node = new ht.Node();                   
    node.s(&#39;2d.visible&#39;,false);
    node.setLayer(&#39;higher&#39;);
    dataModel.add(node);
})
로그인 후 복사

그런 다음 기본 p에서 mousemove 이벤트를 수신하고 마우스 위치가 위의 세 개체 위에 있는지 확인하고 개체 유형에 따라 레이아웃()을 호출합니다. Node를 다시 레이아웃하는 함수:

graphView.getView().addEventListener(&#39;mousemove&#39;, function(e) {
     node.s(&#39;2d.visible&#39;,false);
     var hoverData = graphView.getDataAt(e);
     pos = graphView.getLogicalPoint(e);
     if(!hoverData) return;
     if(tree[hoverData.getTag()]){
        layout(node, pos, &#39;tips1&#39;);
     } else if (grass[hoverData.getTag()]) {
        layout(node, pos, &#39;tips2&#39;);
     } else if (mountain[hoverData.getTag()]) {
        layout(node, pos, &#39;tips3&#39;);
     }
});
로그인 후 복사

layout() 함수가 하는 일은 앞에서 자세히 설명했는데, 그 중 팝업 상자의 속성 값을 업데이트하는 것은 노드의 텍스트 속성을 데이터 바인딩하는 것입니다. JSON 파일 형식은 매우 간단합니다. func의 내용은 다음과 같습니다.

1. 함수를 직접 호출하고 관련 데이터를 전달합니다. view.Object의 경우 매개변수 값은 함수 반환 값, 즉 func(data, view);에 의해 결정됩니다.

2. 문자열 유형:

  style@***로 시작하면 data.getStyle(***) 값이 반환됩니다. 여기서 ***는 스타일의 속성 이름을 나타냅니다. ATTR@***의 시작 부분에는 data.getattr(***) 값이 반환됩니다. 여기서 ***는 ATTR의 속성 이름을 나타냅니다. Field@*** 처음부터 시작하여 데이터를 반환합니다. *** 값 중 ***은 ATTR의 속성 이름을 나타냅니다.

위의 조건이 일치하지 않는 경우, 데이터객체의 함수명을 문자열 형태로 직접 사용하여 data***(view)를 호출하고, 반환된 값이 매개변수 값으로 사용됩니다.

func 속성 외에도 value 속성을 기본값으로 설정할 수도 있습니다. 해당 func에서 얻은 값이 정의되지 않거나 null인 경우 value 속성에 정의된 기본값이 사용됩니다. 웹 데이터 바인딩 매뉴얼용 HT(http://www.hightopo.com/guide/guide/core/datamodel/ht-datamodel-guide.html). 예를 들어 여기서 'tips1.json' 파일에 sunshine 값을 데이터 바인딩한 결과는 다음과 같습니다.

"text": {
        "func": "attr@sunshine",
        "value": "阳光值"
      },
로그인 후 복사

아래에 레이아웃() 함수의 소스 코드를 붙여넣습니다.

function layout(node, pos, type){
                node.s(&#39;2d.visible&#39;,true);
                node.setImage(type);                  
                if(type == &#39;tips1&#39;){
                    node.setPosition(pos.x + node.getWidth()/2, pos.y - node.getHeight()/2);
                    node.a({
                        &#39;sunshine&#39;  :   &#39;阳光值   :     &#39;+ (pos.x/1000).toFixed(2),
                        &#39;rain&#39;  :   &#39;雨露值   :     &#39;+ (pos.y/1000).toFixed(2),
                        &#39;love&#39;  :   &#39;爱心值   :    ***&#39;
                    });
                } else if(type == &#39;tips2&#39;){
                    node.setPosition(pos.x , pos.y - node.getHeight()/2);
                    node.a({
                        &#39;temp&#39;  :   &#39;温度   :     30&#39;,
                        &#39;humidity&#39;  :   &#39;湿度   :     &#39;+Math.round(pos.x/100)+&#39;%&#39;
                    });
                } else if(type == &#39;tips3&#39;){
                    node.setPosition(pos.x - node.getWidth()/2, pos.y - node.getHeight()/2);
                    node.a({
                        &#39;hight&#39;  :   &#39;海拔   :    &#39; + Math.round(pos.y)+&#39;米&#39;,
                        &#39;landscapes&#39;  :   &#39;地貌   :    喀斯特&#39;
                    });
                }
            }
로그인 후 복사

Cloud Mobile

마지막으로, 데모에는 클라우드 이동 애니메이션 효과도 있습니다. HT의 데이터 모델 기반 그래픽 구성 요소의 디자인 아키텍처에서 애니메이션은 HT가 제공하는 특정 속성을 시작 값에서 목표 값으로 점진적으로 변경하는 과정으로 이해될 수 있습니다. .Default .startAnim 애니메이션 기능인 ht.Default.startAnim은 프레임 기반 및 시간 기반 애니메이션을 지원합니다:

Frame-Based方式用户通过指定frames动画帧数,以及interval动画帧间隔参数控制动画效果;

Time-Based方式用户只需要指定duration的动画周期的毫秒数即可,HT将在指定的时间周期内完成动画。

详情见HT for Web。

在这里我们用的是Time-Based方式,源码如下:

var cloud = dataModel.getDataByTag(&#39;cloud&#39;);
parent = dataModel.getDataByTag(&#39;mountain&#39;);
round1 = parent.getPosition().x - parent.getWidth()/2 + cloud.getWidth()/2;
round2 = parent.getPosition().x + parent.getWidth()/2 - cloud.getWidth()/2;
end = round1;
//云运动动画
var animParam = {
    duration: 10000,
    finishFunc: function() {
         end = (end == round1) ? round2 : round1;
         ht.Default.startAnim(animParam);
    },
    action: function(v, t) {
         var p = cloud.getPosition();
         cloud.setPosition(p.x + (end - p.x) * v , p.y);
     }
};
ht.Default.startAnim(animParam);
로그인 후 복사

위 내용은 HTML5의 팝업 상자 효과 예 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML의 테이블 테두리 HTML의 테이블 테두리 Sep 04, 2024 pm 04:49 PM

HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML의 중첩 테이블 HTML의 중첩 테이블 Sep 04, 2024 pm 04:49 PM

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 여백-왼쪽 HTML 여백-왼쪽 Sep 04, 2024 pm 04:48 PM

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML 테이블 레이아웃 HTML 테이블 레이아웃 Sep 04, 2024 pm 04:54 PM

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML에서 텍스트 이동 HTML에서 텍스트 이동 Sep 04, 2024 pm 04:45 PM

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.

HTML 정렬 목록 HTML 정렬 목록 Sep 04, 2024 pm 04:43 PM

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML 온클릭 버튼 HTML 온클릭 버튼 Sep 04, 2024 pm 04:49 PM

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.

HTML 입력 자리 표시자 HTML 입력 자리 표시자 Sep 04, 2024 pm 04:54 PM

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

See all articles