Mobile Angular UI - Drag & Drop

Mit der Drag & Drop-Funktion können Sie die Kontrolle über ein HTML-Element übernehmen, indem Sie es greifen und ziehen und an einer anderen Stelle platzieren.

Um mit Drag & Drop-Funktionen in der Benutzeroberfläche von Mobile Angular arbeiten zu können, müssen Sie das Gestenmodul hinzufügen.

Fügen Sie zuerst die JavaScript-Datei in index.html hinzu, wie unten gezeigt -

<script src="node_modules/mobile-angular-ui/dist/js/mobile-angular-ui.gestures.min.js"></script>

Fügen Sie später das Gestenmodul als Abhängigkeit in app.js hinzu, wie unten gezeigt -

var app=angular.module('myFirstApp', [
   'ngRoute',
   'mobile-angular-ui',
   'mobile-angular-ui.gestures'
]);

Wir müssen eine benutzerdefinierte Direktive erstellen, um das Element mithilfe des $ drag-Moduls zu ziehen.

Die Syntax zur Verwendung des $ drag-Moduls lautet wie folgt:

$drag.bind(element, dragOptions, touchOptions);

Parameter

element - Das HTML-Element, das Sie ziehen möchten.

dragOptions - Es ist ein Objekt mit den folgenden Details -

var dragOptions= {
   transform: $drag.TRANSLATE_BOTH,
   start: function(dragInfo, event){},
   end: function(dragInfo, event){},
   move: function(dragInfo, event){},
   cancel: function(dragInfo, event){}
};

Für die Transformation können Sie die folgenden Optionen verwenden:

$ drag.NULL_TRANSFORM - Keine Transformationsbewegung für das Element.

$ drag.TRANSLATE_BOTH - Das Element bewegt sich sowohl auf der x- als auch auf der y-Achse.

$ drag.TRANSLATE_HORIZONTAL - Das Element bewegt sich auf der x-Achse.

$ drag.TRANSLATE_UP - Das Element bewegt sich auf der negativen y-Achse.

$ drag.TRANSLATE_DOWN - Das Element bewegt sich auf einer positiven y-Achse.

$ drag.TRANSLATE_LEFT - Das Element bewegt sich auf der negativen x-Achse.

$ drag.TRANSLATE_RIGHT - Das Element bewegt sich auf der positiven x-Achse.

$ drag.TRANSLATE_VERTICAL - Das Element bewegt sich auf der y-Achse.

$ drag.TRANSLATE_INSIDE - Es verwendet eine Funktion wie unten gezeigt -

{
   transform: $drag.TRANSLATE_INSIDE(myElement)
}

Das Starten, Beenden , Verschieben, Abbrechen ist eine Funktion mit Draginfo- und Ereignisdetails als Parametern.

draginfo- Es ist eine erweiterte Version des $ touch-Moduls. Es hat folgende Details -

originalTransform- Das $ transform-Objekt relativ zur CSS-Transformation, bevor $ drag gebunden wird.

originalRect - Das Bounding Client Rect für gebundenes Element vor jeder Ziehaktion.

startRect - Das Bounding Client Rect für gebundenes Element, das beim Startereignis registriert wurde.

startTransform- Die $ transform beim Startereignis.

rect - Das aktuelle Bounding Client Rect für gebundenes Element.

transform- Die aktuelle $ -Transformation.

reset - Eine Funktion, die das Element in originalTransform wiederherstellt.

undo - Ein Funktionswiederherstellungselement für startTransform.

touchOptions - ist ein Optionsobjekt, das an den zugrunde liegenden $ touch-Dienst übergeben werden soll.

Erstellen Sie eine Direktive mit dem $ drag-Modul in src / js / app.js wie unten gezeigt -

app.directive('dragItem', ['$drag', function($drag) {
   return {
      controller: function($scope, $element) {
         $drag.bind($element,
            {
               transform: $drag.TRANSLATE_BOTH,
               end: function(drag) {
                  drag.reset();
               }
            },
            {
               sensitiveArea: $element.parent()
            }
         );
      }
   };
}]);

Lassen Sie uns ein funktionierendes Beispiel für das Ziehen eines Elements sehen -

Index.html

<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8" />
      <title>Mobile Angular UI Demo</title>
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
      <meta name="apple-mobile-web-app-capable" content="yes" />
      <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimal-ui" />
      <meta name="apple-mobile-web-app-status-bar-style" content="yes" />
      <link rel="shortcut icon" href="/assets/img/favicon.png" type="image/x-icon" />
      <link rel="stylesheet" href="node_modules/mobile-angular-ui/dist/css/mobile-angular-ui-hover.min.css" />
      <link rel="stylesheet" href="node_modules/mobile-angular-ui/dist/css/mobile-angular-ui-base.min.css" />
      <link rel="stylesheet" href="node_modules/mobile-angular-ui/dist/css/mobile-angular-ui-desktop.min.css" />
      <script src="node_modules/angular/angular.min.js"></script>
      <script src="node_modules/angular-route/angular-route.min.js"></script>
      <script src="node_modules/mobile-angular-ui/dist/js/mobile-angular-ui.min.js"></script>
      <script src="node_modules/angular-route/angular-route.min.js"></script>
      <script src="node_modules/mobile-angular-ui/dist/js/mobile-angular-ui.gestures.min.js"></script>
      <link rel="stylesheet" href="src/css/app.css" />
      <script src="src/js/app.js"></script>
   </head>
   <body ng-app="myFirstApp" ng-controller="MainController">
      
      <!-- Sidebars -->
      <div class="sidebar sidebar-left">
         <div class="scrollable">
            <h1 class="scrollable-header app-name">Tutorials</h1>
            <div class="scrollable-content">
               <div class="list-group" ui-turn-off='uiSidebarLeft'>
                  <a class="list-group-item" href="/">Home Page </a>
                     <a class="list-group-item" href="#/academic"><i class="fa fa-caret-right"></i>Academic Tutorials </a>
                     <a class="list-group-item" href="#/bigdata"><i class="fa fa-caret-right"></i>Big Data & Analytics </a>
                     <a class="list-group-item" href="#/computerProg"><i class="fa fa-caret-right"></i>Computer Programming </a>
                     <a class="list-group-item" href="#/computerscience"><i class="fa fa-caret-right"></i>Computer Science </a>
                     <a class="list-group-item" href="#/databases"><i class="fa fa-caret-right"></i>Databases </a>
                     <a class="list-group-item" href="#/devops"><i class="fa fa-caret-right"></i>DevOps </a>
                  </div>
               </div>
            </div>
         </div>
         <div class="sidebar sidebar-right">
            <div class="scrollable">
               <h1 class="scrollable-header app-name">eBooks</h1>
               <div class="scrollable-content">
                  <div class="list-group" ui-toggle="uiSidebarRight">
                     <a class="list-group-item" href="#/php"><i class="fa fa-caret-right"></i>PHP </a>
                     <a class="list-group-item" href="#/Javascript"><i class="fa fa-caret-right"></i>Javascript </a>
                  </div>
               </div>
            </div>
      </div>
      <div class="app">
         <div class="navbar navbar-app navbar-absolute-top">
            <div class="navbar-brand navbar-brand-center" ui-yield-to="title">
               TutorialsPoint
            </div>
            <div class="btn-group pull-left">
               <div ui-toggle="uiSidebarLeft" class="btn sidebar-left-toggle">
                  <i class="fa fa-th-large "></i> Tutorials
               </div>
            </div>
            <div class="btn-group pull-right" ui-yield-to="navbarAction">
               <div ui-toggle="uiSidebarRight" class="btn sidebar-right-toggle">
                  <i class="fal fa-search"></i> eBooks
               </div>
            </div>
         </div>
         <div class="navbar navbar-app navbar-absolute-bottom">
            <div class="btn-group justified">
               <a ui-turn-on="aboutus_modal" class="btn btn-navbar"><i class="fal fa-globe"></i> About us</a>
               <a ui-turn-on="contactus_overlay" class="btn btn-navbar"><i class="fal fa-map-marker-alt"></i> Contact us</a>
            </div>
         </div>

         <!-- App body -->
         <div class='app-body'>
            <div class='app-content'>
               <ng-view></ng-view>
            </div>
         </div>
      </div><!-- ~ .app -->
      <!-- Modals and Overlays -->
      <div ui-yield-to="modals"></div>
   </body>
</html>

src / js / app.js.

/* eslint no-alert: 0 */

'use strict';
//
// Here is how to define your module
// has dependent on mobile-angular-ui
//
var app=angular.module('myFirstApp', [
   'ngRoute',
   'mobile-angular-ui',
   'mobile-angular-ui.gestures'
]);
app.config(function($routeProvider, $locationProvider) {
   $routeProvider
   .when("/", {
      templateUrl : "src/home/home.html"
   });
   $locationProvider.html5Mode({enabled:true, requireBase:false});
});
app.directive('dragItem', ['$drag', function($drag) {
   return {
      controller: function($scope, $element) {
         $drag.bind($element, 
            {
               transform: $drag.TRANSLATE_BOTH,end: function(drag) {
                  drag.reset();
               }
            },
            {
               sensitiveArea: $element.parent()
            }
         );
      }
   };
}]);
app.controller('MainController', function($rootScope, $scope, $routeParams) {
   $scope.msg="Welcome to Tutorialspoint!"
   $scope.js="JavaScript is a lightweight, interpreted programming language. It is designed 
   for creating network-centric applications. It is 
   complimentary to and integrated with Java. 
   JavaScript is very easy to implement because it 
   is integrated with HTML. It is open and cross-platform.";
   $scope.angularjs="AngularJS is a very powerful 
   JavaScript Framework. It is used in Single Page 
   Application (SPA) projects. It extends HTML DOM 
   with additional attributes and makes it more 
   responsive to user actions. AngularJS is open 
   source, completely free, and used by thousands of 
   developers around the world. It is licensed under the Apache license version 2.0.";
   $scope.reactjs="React is a front-end library 
   developed by Facebook. It is used for handling 
   the view layer for web and mobile apps. ReactJS 
   allows us to create reusable UI components. It is 
   currently one of the most popular JavaScript 
   libraries and has a strong foundation and large community behind it.";
});

Das Drag-Element wird in src / home / home.html hinzugefügt -

<div style="height: 100%; width: 100%; padding: 40px;">
   <div style="height: 100%; width: 100%; border: 1px solid #444; position: relative;">
      <div drag-Item>
         <img src="src/img/test.png" width="100" height="100" />
      </div>
   </div>
</div>

Ein Bild wird zum Ziehen verwendet, wie unten gezeigt -

Die Anzeige im Browser ist wie folgt:

Sie können das Bild in der Benutzeroberfläche ziehen , sobald die Maustaste losgelassen wird, wird es in die ursprüngliche Position zurückzusetzen , wie wir gebraucht haben drag.reset () in der End-Funktion .

$drag.bind($element, {
      transform: $drag.TRANSLATE_BOTH,
      end: function(drag) {
         drag.reset();
      }
   },
   {
      sensitiveArea: $element.parent()
   }
);