Heim Web-Frontend H5-Tutorial Teilen Sie ein Beispiel für die Wirkung eines Popup-Fensters in HTML5

Teilen Sie ein Beispiel für die Wirkung eines Popup-Fensters in HTML5

May 10, 2018 pm 02:57 PM
html5

In diesem Artikel wird hauptsächlich der auf HTML5 Canvas basierende Popup-Box-Effekt vorgestellt.

Wenn der Benutzer die Maus bewegt, wird eine solche Anforderung angezeigt kommt sehr häufig vor. Dies ist bei der Verarbeitung von HTML-Elementen einfach, aber wenn Sie Grafiken verarbeiten, die aus HTML5-Canvas bestehen, ist diese Methode nicht mehr anwendbar, da Canvas einen anderen Satz von Mechanismen verwendet. Unabhängig davon, wie viele Grafiken auf Canvas gezeichnet werden, ist Canvas insgesamt dasselbe. Die Grafiken selbst sind eigentlich Teil des Canvas und können nicht separat bezogen werden, daher ist es unmöglich, JavaScript-Ereignisse direkt zu einer Grafik hinzuzufügen. In HT for Web lässt sich diese Anforderung jedoch leicht realisieren. Das Szenario ist wie folgt:

Dieses Szenendiagramm basiert auf der JSON-Datei von HT for Web Ich habe eine Idee, wie man eine solche JSON-Datei generiert. Tatsächlich basiert sie auf dem kleinen und vollständigen „HTML5-Topologie-Editor“ (www.hightopo.com/demo/2deditor_20151010/HT-2D-Editor). .html). Es ist sehr einfach, den Topologieeditor an meine Bedürfnisse anzupassen. Darüber hinaus werden in dieser Demo die Vektorbilder „tips1.json“, „tips2.json“ und „tips3.json“ der drei definierten Typen von Aufzählungsfeldern über diesen Vektoreditor (http://www.hightopo.com) erstellt . com/demo/vector-editor/index.html), ich habe es kurz gezeichnet und es ist ziemlich einfach zu verwenden. Wenn der Benutzer im obigen Szenario die Maus auf ein Objekt wie Gras bewegt, werden in einem Popup-Fenster die detaillierten Informationen zur Demoadresse angezeigt: http://www.hightopo.com/demo/blog_meadow_20170605/index.html

Die konkrete Umsetzung ist wie folgt:

Vorbereitung

Vorstellung unseres HT (www.hightopo.com/):

<script src=&#39;ht.js&#39;></script>
dataModel = new ht.DataModel();
graphView = new ht.graph.GraphView(dataModel);
graphView.addToDOM();
Nach dem Login kopieren

HT bietet ein benutzerdefiniertes Vektorbeschreibungsformular für das JSON-Format. Das vom HT-Standard definierte JSON-Vektorformat kann auch als Bild registriert und verwendet werden. Die Vektormethode von HT spart mehr Platz als herkömmliche Formate Verzerrungen bei der Skalierung verursachen, um mehr zu erfahren. Hier werden drei Formen von JSON-Popup-Boxen als Bilder für nachfolgende Aufrufe registriert:

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;);
Nach dem Login kopieren

Dann werden Objekte mit interaktiven Effekten abgerufen, wobei die Attributnamen in jedem Objekt die für jeden Grundelementnamen festgelegten Beschriftungen sind :

//树
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
};
Nach dem Login kopieren

Popup-Box

Tatsächlich ist die Essenz der Popup-Box ein Knoten, wenn der Benutzer die Maus bewegt rein und raus,

1. Durch die Steuerung des Ausblendens und Anzeigens von Knoten kann der Effekt eines Popup-Fensters erzielt werden.

2 die Knotenposition;

3. Wenn sich die Maus zu verschiedenen Objekten bewegt, ändert sich auch die Textur auf dem Knoten.

4 Position.

Um die Popup-Box zu implementieren, sollten Sie daher zunächst einen neuen Knoten erstellen und dessen Ebene auf „höher“ setzen. Zuvor müssen Sie die JSON-Datei des Szenendiagramms deserialisieren und deserialisieren. Die Grafikelemente werden alle auf die Ebene „niedriger“ gesetzt, um zu verhindern, dass sie durch vorhandene Grafikelemente blockiert werden:

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);
})
Nach dem Login kopieren

Überwachen Sie dann das Mousemove-Ereignis auf dem zugrunde liegenden p, um festzustellen, ob die Mausposition darunter liegt Rufen Sie je nach Objekttyp die Funktion „layout()“ auf, um den Knoten neu zu gestalten:

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;);
     }
});
Nach dem Login kopieren

Die Funktion der Funktion „layout()“ wurde bereits ausführlich erläutert. Die Aktualisierung des Attributwerts im Popup-Feld dient dazu, das Textattribut der JSON-Datei zu binden. Das Bindungsformat ist einfach. Ersetzen Sie den vorherigen Parameterwert durch ein Objekt mit dem Inhalt von func hat die folgenden Typen:

1. Funktionstyp, rufen Sie die Funktion direkt auf und übergeben Sie die relevanten Daten- und Ansichtsobjekte. Der Parameterwert wird durch den Rückgabewert der Funktion bestimmt, d. h. func(data, view ); Anruf.

2. String-Typ:

style@*** beginnt mit, der Wert data.getStyle(***) wird zurückgegeben, wobei *** den Attributnamen des Stils darstellt.

Wenn attr@*** startet, wird der Wert data.getAttr(***) zurückgegeben, wobei *** den Attributnamen von attr darstellt.

Wenn field@*** beginnt, wird der Wert data.*** zurückgegeben, wobei *** den Attributnamen von attr darstellt.

Wenn die oben genannten Bedingungen nicht erfüllt sind, verwenden Sie den Zeichenfolgentyp direkt als Funktionsnamen des Datenobjekts, um data***(view) aufzurufen, und der Rückgabewert wird als Parameterwert verwendet.

Zusätzlich zum func-Attribut können Sie auch das value-Attribut als Standardwert festlegen. Wenn der durch die entsprechende func erhaltene Wert undefiniert oder null ist, wird der durch das value-Attribut definierte Standardwert verwendet. Einzelheiten finden Sie im Handbuch „HT for Web Data Binding Specification“ (http://www.hightopo.com/guide/guide/core/datamodel/ht-datamodel-guide.html). Hier ist beispielsweise das Ergebnis der Datenbindung des Sonnenscheinwerts in der Datei „tips1.json“ wie folgt:

"text": {
        "func": "attr@sunshine",
        "value": "阳光值"
      },
Nach dem Login kopieren

Der Quellcode der Funktion „layout()“ wird unten eingefügt:

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;
                    });
                }
            }
Nach dem Login kopieren

Wolkenbewegung

Schließlich verfügt unsere Demo auch über einen Wolkenbewegungsanimationseffekt. Unter der Designarchitektur der datenmodellgesteuerten Grafikkomponenten von HT kann die Animation verstanden werden Als sicherer Prozess, bei dem sich diese Attribute schrittweise vom Startwert zum Zielwert ändern, unterstützt ht.Default.startAnim zwei Animationsmethoden: Frame-basiert und zeitbasiert:

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);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonTeilen Sie ein Beispiel für die Wirkung eines Popup-Fensters in HTML5. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Tabellenrahmen in HTML Tabellenrahmen in HTML Sep 04, 2024 pm 04:49 PM

Anleitung zum Tabellenrahmen in HTML. Hier besprechen wir verschiedene Möglichkeiten zum Definieren von Tabellenrändern anhand von Beispielen für den Tabellenrand in HTML.

Verschachtelte Tabelle in HTML Verschachtelte Tabelle in HTML Sep 04, 2024 pm 04:49 PM

Dies ist eine Anleitung für verschachtelte Tabellen in HTML. Hier diskutieren wir anhand der entsprechenden Beispiele, wie man eine Tabelle innerhalb der Tabelle erstellt.

HTML-Rand links HTML-Rand links Sep 04, 2024 pm 04:48 PM

Anleitung zum HTML-Rand links. Hier besprechen wir einen kurzen Überblick über HTML margin-left und seine Beispiele sowie seine Code-Implementierung.

HTML-Tabellenlayout HTML-Tabellenlayout Sep 04, 2024 pm 04:54 PM

Leitfaden zum HTML-Tabellenlayout. Hier besprechen wir die Werte des HTML-Tabellenlayouts zusammen mit den Beispielen und Ausgaben im Detail.

Text in HTML verschieben Text in HTML verschieben Sep 04, 2024 pm 04:45 PM

Anleitung zum Verschieben von Text in HTML. Hier besprechen wir eine Einführung, wie Marquee-Tags funktionieren, mit Syntax und Beispielen für die Implementierung.

HTML-geordnete Liste HTML-geordnete Liste Sep 04, 2024 pm 04:43 PM

Leitfaden zur HTML-geordneten Liste. Hier besprechen wir auch die Einführung von HTML-geordneten Listen und Typen sowie deren Beispiele

HTML-Onclick-Button HTML-Onclick-Button Sep 04, 2024 pm 04:49 PM

Anleitung zum HTML-OnClick-Button. Hier diskutieren wir deren Einführung, Funktionsweise, Beispiele und Onclick-Events in verschiedenen Veranstaltungen.

HTML-Eingabeplatzhalter HTML-Eingabeplatzhalter Sep 04, 2024 pm 04:54 PM

Leitfaden für HTML-Eingabeplatzhalter. Hier besprechen wir die Beispiele für HTML-Eingabeplatzhalter zusammen mit den Codes und Ausgaben.

See all articles