Inhaltsverzeichnis
3.wxs-Antwortereignis" >3.wxs-Antwortereignis
Heim Web-Frontend uni-app Wie implementiert Uniapp die kostenlose Drag-and-Drop-Funktion auf der Miniprogrammseite?

Wie implementiert Uniapp die kostenlose Drag-and-Drop-Funktion auf der Miniprogrammseite?

Sep 07, 2021 pm 07:28 PM
uniapp 小程序

Wie implementiert uniapp die kostenlose Drag-and-Drop-Funktion auf der Miniprogrammseite? Der folgende Artikel stellt Ihnen vor, wie Uniapp kostenlose Drag-and-Drop-Komponenten auf Miniprogrammseiten implementiert. Ich hoffe, er wird Ihnen hilfreich sein!

Wie implementiert Uniapp die kostenlose Drag-and-Drop-Funktion auf der Miniprogrammseite?

Werfen wir zunächst einen Blick auf die Implementierung:

Wie implementiert Uniapp die kostenlose Drag-and-Drop-Funktion auf der Miniprogrammseite?

[Verwandte Empfehlungen: „uniapp-Tutorial“]

Implementierungsprozess

Laut Dokumentation zu Implementieren Sie die Drag-and-Drop-Funktion. Es gibt ungefähr drei Möglichkeiten:

1. Überwachen Sie das catchtouchmove-Ereignis für das Element, das per Drag-and-Drop verschoben werden muss, und ändern Sie die Stilkoordinaten dynamisch.

Diese Methode ist die einfachste Denken Sie daran, die Elementkoordinaten dynamisch zu ändern, indem Sie die Berührungsposition über js überwachen. Drag & Drop ist jedoch ein Vorgang, der eine sehr hohe Echtzeitleistung erfordert. Sie können in diesem Vorgang keine Drosselungsfunktion festlegen, um den setData-Vorgang selbst zu reduzieren, und er ist leicht zu verursachen Drag-and-Drop-Verzögerungen können zunächst beseitigt werden.

2.beweglicher Bereich + bewegliche Ansicht

Die Rolle der beweglichen Bereichskomponente besteht darin, einen Bereich zu definieren, in dem die beweglichen Ansichtskomponenten vom Benutzer und der beweglichen Ansicht frei bewegt werden können können problemlos Zoomeffekte einstellen. Gemäß der Komponentendefinition können Sie sich das Verwendungsszenario als Ziehen und Skalieren einiger Elemente in einem lokalen Bereich der Seite vorstellen. Dies steht im Widerspruch zu unserer Notwendigkeit, die gesamte Seite frei zu ziehen und abzulegen.

3.wxs-Antwortereignis

wxs wird speziell zum Lösen von Szenarien mit häufigen Interaktionen verwendet. Es wird direkt auf der Ansichtsebene ausgeführt, wodurch der durch die Kommunikation zwischen der Ansichtsebene und der Logikebene verursachte Leistungsverlust vermieden und eine reibungslose Animation erzielt wird Effekte. Weitere Informationen finden Sie unter: wxs-Antwortereignis. Basierend auf den Verwendungsszenarien von wxs können wir grundsätzlich bestimmen, dass die wxs-Lösung zur Implementierung der gewünschten Funktionen verwendet werden sollte.

Code-Implementierung

Wir verwenden das Uniapp-Framework, überprüfen die Uniapp-Dokumentation, der Beamte stellt direkt ein kostenloses Drag-and-Drop-Codebeispiel zur Verfügung, der Link Klicken Sie hier.

Nehmen Sie einfach das offizielle Codebeispiel und ändern Sie es wie folgt:

<template>
    <view catchtouchmove="return">
        <view @click="play" @touchstart="hudun.touchstart" @touchmove="hudun.touchmove" @touchend="hudun.touchend">
            <canvas id="lottie-canvas" type="2d" style="width: 88px; height: 102px;"></canvas>
        </view>
    </view>
</template>

<script module="hudun">
    var startX = 0
    var startY = 0
    var lastLeft = 20
    var lastTop = 20

    function touchstart(event, ins) {
        ins.addClass(&#39;expand&#39;)
        var touch = event.touches[0] || event.changedTouches[0]
        startX = touch.pageX
        startY = touch.pageY
    }
    
    function touchmove(event, ins) {
        var touch = event.touches[0] || event.changedTouches[0]
        var pageX = touch.pageX
        var pageY = touch.pageY
        var left = pageX - startX + lastLeft
        var top = pageY - startY + lastTop
        startX = pageX
        startY = pageY
        lastLeft = left
        lastTop = top
        ins.selectComponent(&#39;.movable&#39;).setStyle({
            right: -left + &#39;px&#39;,
            bottom: -top + &#39;px&#39;
        })
    }
    
    function touchend(event, ins) {
        ins.removeClass(&#39;expand&#39;)
    }
    
    module.exports = {
        touchstart: touchstart,
        touchmove: touchmove,
        touchend: touchend
    }
</script>

<script>
    import lottie from &#39;lottie-miniprogram&#39;
    let insList = {} // 存放动画实例集合
    export default {
        props: {
            tag: String
        },
        data() {
            return {
                isPlay: true,
            }
        },
        methods: {
            init() {
                const query = uni.createSelectorQuery().in(this)
                query.select(&#39;#lottie-canvas&#39;).fields({ node: true, size: true }).exec((res) => {
                    const canvas = res[0].node
                    const context = canvas.getContext(&#39;2d&#39;)
                    const dpr = uni.getSystemInfoSync().pixelRatio
                    canvas.width = res[0].width * dpr
                    canvas.height = res[0].height * dpr
                    context.scale(dpr, dpr)
                    lottie.setup(canvas)
                    const ins = lottie.loadAnimation({
                        loop: true,
                        autoplay: true,
                        path: &#39;https://usongshu.oss-cn-beijing.aliyuncs.com/data/other/f8780255686b0bb35d25464b2eeea294.json&#39;,
                        rendererSettings: {
                            context,
                        },
                    })
                    insList[this.tag] = ins
                    setTimeout(() => {
                        this.isPlay = false
                        ins.stop()
                    }, 3000)
                })
            },
            play() {
                const ins = insList[this.tag]
                if (!this.isPlay) {
                    this.isPlay = true
                    ins.play()
                    setTimeout(() => {
                        this.isPlay = false
                        ins.stop()
                    }, 3000)
                }
            }
        },
        beforeDestroy() {
            delete insList[this.tag]
        }
    }
</script>

<style>
    .area
        position fixed
        right 20px
        bottom 20px
        width 88px
        height 102px
        z-index 99999

    .expand
        width 100vw
        height 100vh

    .movable
        position absolute
</style>
Nach dem Login kopieren

Der obige Code ist der vollständige Code, der in den Eröffnungs-Renderings implementiert wurde und in eine separate Komponente gekapselt wurde. Was wir ziehen möchten, ist ein Canvas-Element mithilfe der Lottie-Animationsbibliothek, das beim Klicken die Animation abspielt. Wenn Sie einen einfachen Button-Drag auf der Seite implementieren möchten, ist die Codemenge deutlich geringer. Wenn die Funktion, die Sie implementieren möchten, dieser ähnelt, müssen die folgenden Punkte im obigen Code erläutert werden:

1 Unsere Anforderung besteht darin, sie auf mehreren Seiten anzuzeigen Platzieren Sie die Komponente nur auf einer Seite und zeigen Sie sie dann auf jeder Seite an. Glücklicherweise unterstützt Uniapp die Definition globaler Applet-Komponenten, was uns dabei helfen kann, die Menge des eingeführten Codes zu reduzieren. So geht's: Definieren Sie die Komponente

// 动画组件
import { HudunAnimation } from &#39;@/components/hudun-animation/index&#39;
Vue.component(&#39;HudunAnimation&#39;, HudunAnimation)
Nach dem Login kopieren

in main.js und verwenden Sie sie auf der Seite: wxml:

<HudunAnimation tag="index" ref="hudunRef"></HudunAnimation>
Nach dem Login kopieren
// 进入页面时初始化动画
mounted() {
    this.$refs.hudunRef.init()
}
Nach dem Login kopieren

2. Es ist zu erkennen, dass es unter den oben gekapselten Komponenten ein Tag-Attribut gibt, das verwendet wird, um die Animationsinstanz zu identifizieren, von der sie stammt. Es existiert, weil wir in der Komponente unter normalen Umständen direkt eine Eigenschaft in den Daten definieren können, um die Animationsinstanz zu speichern, aber nachdem wir in die Grube gegraben haben, haben wir festgestellt, dass die Konsole einen Fehler meldet, wenn wir dies direkt schreiben

this.ins = lottie.loadAnimation({})
Nach dem Login kopieren

weil lottie.loadAnimation( {}) Das zurückgegebene Objekt durchläuft einen JSON.stringfy-Prozess, wenn es in Daten platziert wird. Während dieses Prozesses wird aus unbekannten Gründen ein Fehler gemeldet. Um diesen Fehler zu beheben, definieren Sie stattdessen global eine insList in der Komponente, um die Animationsinstanzsammlung zu speichern, rufen Sie die entsprechende Seiteninstanz über das eingehende Tag ab und rufen Sie dann die entsprechende Instanzwiedergabemethode auf.

Seitenpenetrations- und Klickprobleme

1. Beim Ziehen der Seite wird die Seite ganz einfach gescrollt. Dieses Problem lässt sich ganz einfach lösen.

catchtouchmove="return"
Nach dem Login kopieren

Problem beim Klicken und Ziehen von Bereichsseitenschaltflächen nicht möglich. Erstens ist unser Ziehbereich die gesamte Seite, und wir verwenden eine feste Positionierung, um die gesamte Seite abzudecken. Dies führt jedoch dazu, dass die Seite unter der Maskenebene nicht auf Klickereignisse reagieren kann. Daher müssen wir den Klassennamen dynamisch erweitern. Wenn sich das Element im Ziehzustand befindet, decken wir den maskierten Bereich auf der gesamten Seite ab, und der anfängliche Bereich kann mit dem gezogenen Element übereinstimmen. Sehen Sie sich den vollständigen Code oben für die Code-Implementierung an

Sehen Sie sich den Erlebniseffekt anWeChat-Such-Applet: Lobbyist English – Ihr privater Fremdlehrer

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Einführung in die Programmierung! !

Das obige ist der detaillierte Inhalt vonWie implementiert Uniapp die kostenlose Drag-and-Drop-Funktion auf der Miniprogrammseite?. 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

So starten Sie die Vorschau des von Webstorm entwickelten Uniapp-Projekts So starten Sie die Vorschau des von Webstorm entwickelten Uniapp-Projekts Apr 08, 2024 pm 06:42 PM

Schritte zum Starten der UniApp-Projektvorschau in WebStorm: Installieren Sie das UniApp Development Tools-Plugin. Verbinden Sie sich mit den Geräteeinstellungen. WebSocket-Startvorschau

Was ist besser, Uniapp oder Mui? Was ist besser, Uniapp oder Mui? Apr 06, 2024 am 05:18 AM

Im Allgemeinen ist Uni-App besser, wenn komplexe native Funktionen benötigt werden; MUI ist besser, wenn einfache oder stark angepasste Schnittstellen benötigt werden. Darüber hinaus bietet die Uni-App: 1. Vue.js/JavaScript-Unterstützung; 2. Umfangreiche native Komponenten/API; 3. Gutes Ökosystem. Die Nachteile sind: 1. Leistungsprobleme; 2. Schwierigkeiten bei der Anpassung der Benutzeroberfläche. MUI bietet: 1. Materialdesign-Unterstützung; 2. Hohe Flexibilität; 3. Umfangreiche Komponenten-/Themenbibliothek. Die Nachteile sind: 1. CSS-Abhängigkeit; 2. Bietet keine nativen Komponenten; 3. Kleines Ökosystem.

Welche Entwicklungstools verwendet Uniapp? Welche Entwicklungstools verwendet Uniapp? Apr 06, 2024 am 04:27 AM

UniApp verwendet HBuilder

Was sind die Nachteile von uniapp Was sind die Nachteile von uniapp Apr 06, 2024 am 04:06 AM

UniApp bietet als plattformübergreifendes Entwicklungsframework viele Vorteile, aber auch seine Mängel liegen auf der Hand: Die Leistung wird durch den hybriden Entwicklungsmodus eingeschränkt, was zu einer schlechten Öffnungsgeschwindigkeit, Seitenwiedergabe und interaktiven Reaktion führt. Das Ökosystem ist unvollkommen und es gibt nur wenige Komponenten und Bibliotheken in bestimmten Bereichen, was die Kreativität und die Realisierung komplexer Funktionen einschränkt. Kompatibilitätsprobleme auf verschiedenen Plattformen können zu Stilunterschieden und inkonsistenter API-Unterstützung führen. Der Sicherheitsmechanismus von WebView unterscheidet sich von nativen Anwendungen, was die Anwendungssicherheit beeinträchtigen kann. Anwendungsversionen und -aktualisierungen, die mehrere Plattformen gleichzeitig unterstützen, erfordern mehrere Kompilierungen und Pakete, was zu höheren Entwicklungs- und Wartungskosten führt.

Welche Grundlagen sind zum Erlernen von uniapp erforderlich? Welche Grundlagen sind zum Erlernen von uniapp erforderlich? Apr 06, 2024 am 04:45 AM

Die Uniapp-Entwicklung erfordert die folgenden Grundlagen: Front-End-Technologie (HTML, CSS, JavaScript) Kenntnisse in der mobilen Entwicklung (iOS- und Android-Plattformen) Node.js andere Grundlagen (Versionskontrolltools, IDE, mobiler Entwicklungssimulator oder Erfahrung im echten Maschinen-Debugging)

Was ist der Unterschied zwischen Uniapp und Flattern? Was ist der Unterschied zwischen Uniapp und Flattern? Apr 06, 2024 am 04:30 AM

UniApp basiert auf Vue.js und Flutter basiert auf Dart. Beide unterstützen die plattformübergreifende Entwicklung. UniApp bietet umfangreiche Komponenten und eine einfache Entwicklung, seine Leistung ist jedoch durch WebView eingeschränkt. Flutter verwendet eine native Rendering-Engine mit hervorragender Leistung, ist jedoch schwieriger zu entwickeln. UniApp hat eine aktive chinesische Community und Flutter hat eine große und globale Community. UniApp eignet sich für Szenarien mit schneller Entwicklung und geringen Leistungsanforderungen; Flutter eignet sich für komplexe Anwendungen mit hoher Anpassungsfähigkeit und hoher Leistung.

Was ist besser: Uniapp oder native Entwicklung? Was ist besser: Uniapp oder native Entwicklung? Apr 06, 2024 am 05:06 AM

Bei der Wahl zwischen UniApp und nativer Entwicklung sollten Sie Entwicklungskosten, Leistung, Benutzererfahrung und Flexibilität berücksichtigen. Die Vorteile von UniApp sind plattformübergreifende Entwicklung, schnelle Iteration, einfaches Lernen und integrierte Plug-Ins, während die native Entwicklung in Bezug auf Leistung, Stabilität, native Erfahrung und Skalierbarkeit überlegen ist. Wägen Sie die Vor- und Nachteile basierend auf den spezifischen Projektanforderungen ab. UniApp eignet sich für Anfänger, und die native Entwicklung eignet sich für komplexe Anwendungen, die eine hohe Leistung und ein nahtloses Erlebnis anstreben.

Welche Komponentenbibliothek verwendet Uniapp, um kleine Programme zu entwickeln? Welche Komponentenbibliothek verwendet Uniapp, um kleine Programme zu entwickeln? Apr 06, 2024 am 03:54 AM

Empfohlene Komponentenbibliothek für Uniapp zur Entwicklung kleiner Programme: uni-ui: Offiziell von Uni produziert, bietet sie Basis- und Geschäftskomponenten. vant-weapp: Produziert von Bytedance, mit einem einfachen und schönen UI-Design. taro-ui: produziert von JD.com und entwickelt auf Basis des Taro-Frameworks. Fischdesign: Produziert von Baidu im Material Design-Designstil. naive-ui: Produziert von Youzan, modernes UI-Design, leichtgewichtig und einfach anzupassen.

See all articles