Heim Web-Frontend js-Tutorial Verwenden Sie die Element-UI-Tabelle, um die Drag-and-Drop-Funktion zu implementieren

Verwenden Sie die Element-UI-Tabelle, um die Drag-and-Drop-Funktion zu implementieren

Jun 08, 2018 am 11:17 AM
element table ui 拖拽

Dieses Mal werde ich Ihnen vorstellen, wie Sie Element-UI Table zum Implementieren der Drag-and-Drop-Funktion verwenden. Welche Vorsichtsmaßnahmen sind für die Verwendung von Element-UI-Table zum Implementieren der Drag-and-Drop-Funktion zu beachten? sehen.

Die Tabellenkomponente von Element-UI ist sehr leistungsfähig, aber unsere Anforderungen sind noch leistungsfähiger...

Ein einfaches und grobes Rendering:

1. Datengesteuert

Traditionelle Drag-Effekte basieren auf Modifikationen durch Mousedown, Mousemove, Mouseup Dom-Knoten löschen

Vue ist jedoch ein datengesteuertes Front-End-Framework. Sie sollten versuchen, den Dom während der Entwicklung nicht zu bedienen.

Und die Tabellenkomponente von Element-UI ist sehr streng gekapselt, sodass es einfach ist um den Dom direkt zu betreiben. Unvorhersehbare Fehler erzeugen

Meine Kernidee ist also: Rendern Sie den Tabellenkopf (Spalte) durch ein Array und ändern Sie dann die Reihenfolge des Arrays, wodurch die Spaltensortierung der Liste

Vorlagenteil:

 <p class="w-table" :class="{&#39;w-table_moving&#39;: dragState.dragging}">
 <el-table :data="data"
  :border="option.border"
  :height="option.height"
  :max-height="option.maxHeight"
  :style="{ width: parseInt(option.width)+&#39;px&#39; }"
  :header-cell-class-name="headerCellClassName"
 >
  <slot name="fixed"></slot>
  <el-table-column v-for="(col, index) in tableHeader" :key="index"
  :prop="col.prop"
  :label="col.label"
  :width="col.width"
  :min-width="col.minWidth"
  :type="col.type"
  :header-align="col.headerAlign"
  :column-key="index.toString()"
  :render-header="renderHeader"
  >
  </el-table-column>
 </el-table>
 </p>
Nach dem Login kopieren

Die oben genannten Daten sind die Listendatensammlung, die Option ist das Konfigurationselement der Tabellenkomponente und der Header ist der Sammlung von Tabellenkopfdaten, die von der übergeordneten Komponente übergeben werden

props: {
 data: {
  default: function () {
  return []
  },
  type: Array
 },
 header: {
  default: function () {
  return []
  },
  type: Array
 },
 option: {
  default: function () {
  return {}
  },
  type: Object
 }
 }
Nach dem Login kopieren

Konfigurationselemente können gemäß der Element-UI-API gelöscht werden

Innerhalb der Komponente sind jedoch mehrere Parameter erforderlich:

1. Header-Cell-Class-Name

ist an eine Funktion gebunden, um der Header-Zelle dynamisch eine Klasse hinzuzufügen, um beim Ziehen den gepunkteten Linieneffekt zu erzielen.

2. Spaltenschlüssel

ist an den Index des Header-Arrays gebunden und wird verwendet, um den Index des Header-Elements zu bestimmen, das geändert werden muss

3. render-header

Die Header-Rendering-Funktion wird verwendet, um benutzerdefinierte Methoden zur Überwachung von Mausbewegungen und anderen zugehörigen Ereignissen hinzuzufügen

2 Status

Während des Ziehvorgangs müssen mehrere Schlüsselparameter aufgezeichnet werden:

data () {
 return {
  tableHeader: this.header,
  dragState: {
  start: -1, // 起始元素的 index
  end: -1, // 结束元素的 index
  move: -1, // 移动鼠标时所覆盖的元素 index
  dragging: false, // 是否正在拖动
  direction: undefined // 拖动方向
  }
 }
 }
Nach dem Login kopieren

Darüber hinaus übergibt das übergeordnete Element einen Header-Datenheader, diese Daten werden jedoch nach dem geändert Das Ziehen ist abgeschlossen

Es wird nicht empfohlen, die Daten des übergeordneten Elements in der untergeordneten Komponente direkt zu ändern. Daher wird hier ein tableHeader initialisiert, um den Header-Datenkopf zu hosten

Aber um dies zu ermöglichen Der zu ändernde Header kann auch auf die Änderung reagieren. Fügen Sie eine Monitorüberwachung hinzu

3 Passen Sie den Header an

Die Tabellenkomponente von Element-UI Um die Funktion von [Ziehen Sie den Rand, um die Spaltenbreite zu ändern] zu realisieren, werden die drei Ereignisse Mousemove, Mouseup und Mousedown nicht angezeigt

, daher müssen Sie die Kopfzeile anpassen und die Maus manuell hinzufügen Ereignisverarbeitungsfunktion, die die Verwendung von

renderHeader() Methode

 watch: {
 header (val, oldVal) {
  this.tableHeader = val
 }
 }
Nach dem Login kopieren
unter den drei Mausereignissen erfordert, ist der erste Parameter das Ereignisobjekt und der zweite der Header Objekt

In der entsprechenden Verarbeitungsfunktion können Sie übergeben

Column.columnKey Den entsprechenden Index des Header-Elements abrufen

Leeres Etikett wird verwendet, um die Animation während des Ziehens anzuzeigen (gepunktete Linie)

4. Ereignisverarbeitung

Wenn die Maus gedrückt wird, zeichnen Sie die Startspalte auf. Beim Anheben der Maus wird die Endspalte aufgezeichnet. Die Widerstandsrichtung wird anhand der Differenz zwischen beiden berechnet.

Dann werden die Kopfdaten entsprechend der Position der Startspalte und der Endspalte neu angeordnet, wodurch das Spaltenziehen realisiert wird

Die Verarbeitungsfunktion des Ziehvorgangs ist wie folgt:

renderHeader (createElement, {column}) {
  return createElement(
  'p', {
   'class': ['thead-cell'],
   on: {
   mousedown: ($event) => { this.handleMouseDown($event, column) },
   mouseup: ($event) => { this.handleMouseUp($event, column) },
   mousemove: ($event) => { this.handleMouseMove($event, column) }
   }
  }, [
   // 添加 <a> 用于显示表头 label
   createElement('a', column.label),
   // 添加一个空标签用于显示拖动动画
   createElement('span', {
   'class': ['virtual']
   })
  ])
 },
Nach dem Login kopieren

5. Gepunkteter Linieneffekt

Ändern Sie während des Ziehvorgangs den Kopfzeilenstatus der aktuellen Spalte durch das Mousemove-Ereignis

Und verwenden Sie dann

headerCellClassName Seine Klasse dynamisch ändern

// 按下鼠标开始拖动
handleMouseDown (e, column) {
 this.dragState.dragging = true
 this.dragState.start = parseInt(column.columnKey)
 // 给拖动时的虚拟容器添加宽高
 let table = document.getElementsByClassName('w-table')[0]
 let virtual = document.getElementsByClassName('virtual')
 for (let item of virtual) {
 item.style.height = table.clientHeight - 1 + 'px'
 item.style.width = item.parentElement.parentElement.clientWidth + 'px'
 }
},

// 鼠标放开结束拖动
handleMouseUp (e, column) {
 this.dragState.end = parseInt(column.columnKey) // 记录起始列
 this.dragColumn(this.dragState)
 // 初始化拖动状态
 this.dragState = {
 start: -1,
 end: -1,
 move: -1,
 dragging: false,
 direction: undefined
 }
},

// 拖动中
handleMouseMove (e, column) {
 if (this.dragState.dragging) {
 let index = parseInt(column.columnKey) // 记录起始列
 if (index - this.dragState.start !== 0) {
  this.dragState.direction = index - this.dragState.start < 0 ? &#39;left&#39; : &#39;right&#39; // 判断拖动方向
  this.dragState.move = parseInt(column.columnKey)
 } else {
  this.dragState.direction = undefined
 }
 } else {
 return false
 }
},

// 拖动易位
dragColumn ({start, end, direction}) {
 let tempData = []
 let left = direction === &#39;left&#39;
 let min = left ? end : start - 1
 let max = left ? start + 1 : end
 for (let i = 0; i < this.tableHeader.length; i++) {
 if (i === end) {
  tempData.push(this.tableHeader[start])
 } else if (i > min && i < max) {
  tempData.push(this.tableHeader[ left ? i - 1 : i + 1 ])
 } else {
  tempData.push(this.tableHeader[i])
 }
 }
 this.tableHeader = tempData
},
Nach dem Login kopieren

Diese Klasse wird zur Tabellenkopfzelle hinzugefügt Verwenden Sie diese Klasse, um die obige leere Beschriftung hinzuzufügen Gepunktete Linien können verwendet werden

Fügen Sie den vollständigen Stil ein, den ich selbst geschrieben habe (mit sass als Kompilierungstool):

headerCellClassName ({column, columnIndex}) {
 return (columnIndex - 1 === this.dragState.move ? `darg_active_${this.dragState.direction}` : '')
}
Nach dem Login kopieren

6. Aufruf der übergeordneten Komponente

<style lang="scss">
.w-table {
 .el-table th {
 padding: 0;
 .virtual{
  position: fixed;
  display: block;
  width: 0;
  height: 0;
  margin-left: -10px;
  z-index: 99;
  background: none;
  border: none;
 }
 &.darg_active_left {
  .virtual {
  border-left: 2px dotted #666;
  }
 }
 &.darg_active_right {
  .virtual {
  border-right: 2px dotted #666;
  }
 }
 }
 .thead-cell {
 padding: 0;
 display: inline-flex;
 flex-direction: column;
 align-items: left;
 cursor: pointer;
 overflow: initial;
 &:before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
 }
 }
 &.w-table_moving {
 .el-table th .thead-cell{
  cursor: move !important;
 }
 .el-table__fixed {
  cursor: not-allowed;
 }
 }
}
Nach dem Login kopieren
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Praxisfallanalyse der Progressbar-Komponente

So optimieren Sie das Vue-Projekt

Das obige ist der detaillierte Inhalt vonVerwenden Sie die Element-UI-Tabelle, um die Drag-and-Drop-Funktion zu implementieren. 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)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 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)

So ändern Sie element.style So ändern Sie element.style Nov 24, 2023 am 11:15 AM

Methoden für element.style zum Ändern der Hintergrundfarbe des Elements; 2. Ändern der Schriftgröße des Elements; 4. Ändern des Schriftstils des Elements; . Ändern Sie die horizontale Ausrichtung des Elements. Detaillierte Einführung: 1. Ändern Sie die Hintergrundfarbe des Elements. Die Syntax lautet "document.getElementById("myElement").style.backgroundColor = "red";" 2. Ändern Sie die Schriftgröße des Elements usw.

Wie implementiert man mit JavaScript die Drag-and-Zoom-Funktion von Bildern? Wie implementiert man mit JavaScript die Drag-and-Zoom-Funktion von Bildern? Oct 27, 2023 am 09:39 AM

Wie implementiert man mit JavaScript die Drag-and-Zoom-Funktion von Bildern? In der modernen Webentwicklung ist das Ziehen und Zoomen von Bildern eine häufige Anforderung. Durch die Verwendung von JavaScript können wir Bildern ganz einfach Zieh- und Zoomfunktionen hinzufügen, um ein besseres Benutzererlebnis zu bieten. In diesem Artikel stellen wir anhand spezifischer Codebeispiele vor, wie Sie JavaScript zum Implementieren dieser Funktion verwenden. HTML-Struktur Zunächst benötigen wir eine grundlegende HTML-Struktur, um Bilder anzuzeigen und hinzuzufügen

Warum wird die Benutzeroberfläche von Elden Ring immer wieder angezeigt? Warum wird die Benutzeroberfläche von Elden Ring immer wieder angezeigt? Mar 11, 2024 pm 04:31 PM

In Elden's Ring wird die UI-Seite dieses Spiels nach einiger Zeit automatisch ausgeblendet. Spieler können die Anzeigekonfiguration der Anzeige und des Sounds auswählen es an. Warum wird die Benutzeroberfläche von Elden Ring weiterhin angezeigt? 1. Nachdem wir das Hauptmenü aufgerufen haben, klicken Sie zunächst auf [Systemkonfiguration]. 2. Wählen Sie in der Benutzeroberfläche [Anzeige- und Tonkonfiguration] die Anzeigekonfiguration des Messgeräts aus. 3. Klicken Sie zum Abschluss auf „Aktivieren“.

Tipps und Best Practices für die Drag-and-Drop-Auswahl und -Platzierung in Vue Tipps und Best Practices für die Drag-and-Drop-Auswahl und -Platzierung in Vue Jun 25, 2023 am 10:13 AM

Vue ist ein beliebtes JavaScript-Framework, das sich zum Erstellen von Single-Page-Anwendungen (SPA) eignet. Es unterstützt Drag-and-Drop-Auswahl- und Platzierungsfunktionen durch Anweisungen und Komponenten und bietet Benutzern ein besseres interaktives Erlebnis. In diesem Artikel werden die Techniken und Best Practices für die Drag-and-Drop-Auswahl und -Platzierung in Vue vorgestellt. Drag-Anweisung Vue bietet eine v-ziehbare Anweisung, mit der problemlos Drag-Effekte erzielt werden können. Dieser Befehl kann auf jedes Element angewendet werden und der Ziehstil kann angepasst werden.

Was sind die gängigen UI-Komponentenbibliotheken in Vue? Was sind die gängigen UI-Komponentenbibliotheken in Vue? Jun 11, 2023 am 11:47 AM

Vue ist ein beliebtes JavaScript-Framework, das einen komponentenbasierten Ansatz zum Erstellen von Webanwendungen verwendet. Im Vue-Ökosystem gibt es viele UI-Komponentenbibliotheken, mit denen Sie schnell schöne Schnittstellen erstellen und umfangreiche Funktionen und interaktive Effekte bereitstellen können. In diesem Artikel stellen wir einige gängige VueUI-Komponentenbibliotheken vor. ElementUIElementUI ist eine vom Ele.me-Team entwickelte Vue-Komponentenbibliothek. Sie bietet Entwicklern eine Reihe eleganter,

So verwenden Sie Vue zum Implementieren von Drag-and-Drop-Sortiereffekten So verwenden Sie Vue zum Implementieren von Drag-and-Drop-Sortiereffekten Sep 20, 2023 pm 03:01 PM

So verwenden Sie Vue zum Implementieren von Drag-and-Drop-Sortiereffekten Vue.js ist ein beliebtes JavaScript-Framework, das uns beim Erstellen hochgradig interaktiver Front-End-Anwendungen helfen kann. In Vue können wir problemlos Drag-and-Drop-Sortiereffekte implementieren, sodass Benutzer Daten durch Ziehen von Elementen sortieren können. In diesem Artikel wird erläutert, wie Sie mit Vue Drag-and-Drop-Sortiereffekte implementieren, und es werden spezifische Codebeispiele bereitgestellt. Zuerst müssen wir eine Instanz von Vue erstellen und ein Array definieren, um die zu sortierenden Daten zu speichern. Im Beispiel werden wir

Praktische Vue-Fähigkeiten: Verwenden Sie die V-On-Anweisung, um Mausziehereignisse zu verarbeiten Praktische Vue-Fähigkeiten: Verwenden Sie die V-On-Anweisung, um Mausziehereignisse zu verarbeiten Sep 15, 2023 am 08:24 AM

Praktische Fähigkeiten von Vue: Verwenden Sie die v-on-Anweisung, um Mausziehereignisse zu verarbeiten. Vorwort: Vue.js ist ein beliebtes JavaScript-Framework. Aufgrund seiner Einfachheit, Benutzerfreundlichkeit und Flexibilität ist es für viele Entwickler die erste Wahl. Bei der Entwicklung von Vue-Anwendungen ist der Umgang mit Benutzerinteraktionsereignissen eine wesentliche Fähigkeit. In diesem Artikel wird erläutert, wie Sie die v-on-Direktive von Vue verwenden, um Mausziehereignisse zu verarbeiten, und es werden spezifische Codebeispiele bereitgestellt. Erstellen Sie eine Vue-Instanz: Führen Sie zunächst die Bibliotheksdatei Vue.js in die HTML-Datei ein: &

Zwei chinesische Google-Forscher veröffentlichten das erste rein visuelle Modell zum Verständnis der mobilen Benutzeroberfläche und vier Hauptaufgaben zur Aktualisierung von SOTA Zwei chinesische Google-Forscher veröffentlichten das erste rein visuelle Modell zum Verständnis der mobilen Benutzeroberfläche und vier Hauptaufgaben zur Aktualisierung von SOTA Apr 12, 2023 pm 04:40 PM

Für KI ist das „Spielen mit Mobiltelefonen“ keine leichte Aufgabe. Allein die Identifizierung verschiedener Benutzeroberflächen (UI) ist ein großes Problem: Es muss nicht nur der Typ jeder Komponente identifiziert werden, sondern auch die verwendeten Symbole und ihre Position, um die Funktion zu bestimmen der Komponente. Das Verständnis der Benutzeroberfläche mobiler Geräte kann dabei helfen, verschiedene Aufgaben der Mensch-Computer-Interaktion zu realisieren, beispielsweise die Automatisierung der Benutzeroberfläche. Frühere Arbeiten zur Modellierung mobiler Benutzeroberflächen stützen sich in der Regel auf die Ansichtshierarchieinformationen des Bildschirms, nutzen direkt die Strukturdaten der Benutzeroberfläche und umgehen so das Problem der Identifizierung von Komponenten ausgehend von den Bildschirmpixeln. Allerdings ist die Ansichtshierarchie nicht in allen Szenarios verfügbar. Diese Methode gibt aufgrund fehlender Objektbeschreibungen oder falsch platzierter Strukturinformationen normalerweise fehlerhafte Ergebnisse aus, selbst wenn Sie sie verwenden

See all articles