- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我为我的元素实现了 DRAG 和 DROP Angularjs,将 DIV 从一个位置移动到另一个位置,以便让用户能够对元素进行分类。我只需要满足我的简单要求即:
Step 1: User click at division (1)
Step 2: User click at division (2)
过程将采取:一旦用户进入STEP(2),Goose
将移动到STEP (2)
。如果用户在 STEP(2)
中再次点击 Goose
,它将返回到 STEP(1)
。
我该怎么做?
如您所见我的预期输出:
我目前的代码:
var myApp = angular.module('MyApp',['ngDraggable']).controller('MyCtrl',function($scope){
$scope.centerAnchor = true;
$scope.toggleCenterAnchor = function () {
$scope.centerAnchor = !$scope.centerAnchor
};
var onDraggableEvent = function (evt, data) {
console.log("128", "onDraggableEvent", evt, data);
};
$scope.$on('draggable:start', onDraggableEvent);
$scope.$on('draggable:end', onDraggableEvent);
$scope.droppedObjects0 = [{name:'Goose'},{name:'Rabbit'},{name:'Chick'},{name:'Cat'}];
$scope.droppedObjects1 = []; //Answer: Cat + Rabbit
$scope.droppedObjects2 = []; //Answer: Chicken + Goose
$scope.AnswerOject1 = [{name:'Arnab'},{name:'Kucing'}];
$scope.AnswerOject2 = [{name:'Angsa'},{name:'Ayam'}];
$scope.onDropComplete0 = function (data, evt) {
console.log("127", "$scope", "onDropComplete0", data, evt);
var index = $scope.droppedObjects0.indexOf(data);
if (index == -1)
$scope.droppedObjects0.push(data);
};
$scope.onDropComplete1 = function (data, evt) {
console.log("127", "$scope", "onDropComplete1", data, evt);
var index = $scope.droppedObjects1.indexOf(data);
if (index == -1)
$scope.droppedObjects1.push(data);
};
$scope.onDragSuccess0 = function (data, evt) {
console.log("133", "$scope", "onDragSuccess0", "", evt);
var index = $scope.droppedObjects0.indexOf(data);
if (index > -1) {
$scope.droppedObjects0.splice(index, 1);
}
};
$scope.onDragSuccess1 = function (data, evt) {
console.log("133", "$scope", "onDragSuccess1", "", evt);
var index = $scope.droppedObjects1.indexOf(data);
if (index > -1) {
$scope.droppedObjects1.splice(index, 1);
}
};
$scope.onDragSuccess2 = function (data, evt) {
var index = $scope.droppedObjects2.indexOf(data);
if (index > -1) {
$scope.droppedObjects2.splice(index, 1);
}
};
$scope.onDropComplete2 = function (data, evt) {
var index = $scope.droppedObjects2.indexOf(data);
if (index == -1) {
$scope.droppedObjects2.push(data);
}
};
var inArray = function (array, obj) {
var index = array.indexOf(obj);
};
});
.body
{
width:500px;
margin-left:auto;
margin-right:auto;
}
[ng-drag] {
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
[ng-drag] {
width: 50px;
height: 50px;
background: rgba(255, 255, 255, 0.5);
color: #131313;
text-align: center;
padding-top: 12px;
display: inline-block;
margin: 5px 5px;
cursor: move;
border: 1px solid #ccc;
border-radius: 4px;
}
ul.draggable-objects:after {
display: block;
content: "";
clear: both;
}
.draggable-objects li {
float: left;
display: block;
width: 50px;
height: 50px;
margin:2px;
}
[ng-drag].drag-over {
border: solid 1px red;
}
[ng-drag].dragging {
opacity: 0.5;
}
[ng-drop] {
background: rgba(198, 255, 198, 0.5);
text-align: center;
height: 150px;
padding-top: 10px;
display: block;
margin: 20px auto;
position: relative;
border: 1px solid #c3c3c3;
border-radius: 8px;
}
[ng-drop].drag-enter {
border: solid 5px red;
}
[ng-drop] span.title {
display: block;
position: absolute;
top: 50%;
left: 50%;
width: 200px;
height: 20px;
margin-left: -100px;
margin-top: -10px;
}
[ng-drop] div {
position: relative;
z-index: 2;
}
.list-of-drag-item
{
height: 83px;
background-color: #f7f7f7;
}
<link href="http://code.ionicframework.com/1.3.1/css/ionic.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ngDraggable/0.1.10/ngDraggable.js"></script>
<div ng-app="MyApp" ng-controller="MyCtrl" class="body">
Categorize the animals based on their reproductive system
<div class="row">
<div class="col">
<div class="list-of-drag-item" ng-drop="true" ng-drop-success="onDropComplete0($data,$event)">
<div ng-click="clickMe()" ng-repeat="obj in droppedObjects0" ng-drag="true" ng-drag-data="obj"
ng-drag-success="onDragSuccess0($data,$event)" ng-center-anchor="{{centerAnchor}}">
{{obj.name}}
</div>
</div>
</div>
</div>
<div class="row" style="text-align: center;">
<div class="col div-left">
<span class="title">Animals that give birth
<div ng-drop="true" ng-drop-success="onDropComplete1($data,$event)">
<div ng-repeat="obj in droppedObjects1" ng-drag="true" ng-drag-data="obj"
ng-drag-success="onDragSuccess1($data,$event)" ng-center-anchor="{{centerAnchor}}">
{{obj.name}}
</div>
</div>
</div>
<div class="col div-right">
<span class="title">Animals that Laying Eggs</span>
<div ng-drop="true" ng-drop-success="onDropComplete2($data,$event)">
<div ng-repeat="obj in droppedObjects2" ng-drag="true" ng-drag-data="obj"
ng-drag-success="onDragSuccess2($data,$event)" ng-center-anchor="{{centerAnchor}}">
{{obj.name}}
</div>
</div>
</div>
</div>
</div>
最佳答案
我更改了您的代码以实现此目的。首先,您还没有检查 drop 事件处理程序上是否有对象,如果您只是单击一个元素,drop 事件就会被触发。一定是拖放库中的错误。然后,我在元素上添加了点击处理程序,用于在 $scope.activeElement
中保存给定引用,并在 containerOfActiveElement
中保存它们的容器引用。容器上还有用于在容器数组中添加和移除事件元素的点击处理程序。
模板和css中还有一些代码用于在事件元素上设置红色背景。它还添加了一个过渡,结合 Angular $timeout
,使动画发生。
你有很多重复的代码。您可以像我一样通过传递数组引用来改进它。
var myApp = angular.module('MyApp', ['ngDraggable']).controller('MyCtrl',function($scope, $timeout){
$scope.activeElement;
var containerOfActiveElement;
var activeHTMLElement;
var getCenterOfELement = function (htmlElement) {
var rect = htmlElement.getBoundingClientRect();
return {
x: rect.left + rect.width / 2,
y: rect.top + rect.height / 2
}
};
$scope.onElementClick = function(event, data, container) {
if (!angular.equals(data, $scope.activeElement)) {
event.stopPropagation(); // you need this for not firing event on container
$scope.activeElement = data;
containerOfActiveElement = container;
activeHTMLElement = event.target;
} else
$scope.activeElement = null;
};
$scope.onTargetClick = function(container, event) {
if ($scope.activeElement) {
var activeCenter = getCenterOfELement(activeHTMLElement);
var targetCenter = getCenterOfELement(event.target);
var offsetX = targetCenter.x - activeCenter.x;
var offsetY = targetCenter.y - activeCenter.y;
activeHTMLElement.style.transform= 'translate('+offsetX+'px,'+offsetY+'px)';
$timeout(function() {
container.push($scope.activeElement);
var index = containerOfActiveElement.indexOf($scope.activeElement);
containerOfActiveElement.splice(index, 1);
$scope.activeElement = null;
containerOfActiveElement = null;
activeHTMLElement = null;
}, 200);
}
};
$scope.centerAnchor = true;
$scope.toggleCenterAnchor = function () {
$scope.centerAnchor = !$scope.centerAnchor
};
/* can be removed, since it has no effect:
var onDraggableEvent = function (evt, data) {
console.log("128", "onDraggableEvent", evt, data);
};
$scope.$on('draggable:start', onDraggableEvent);
$scope.$on('draggable:end', onDraggableEvent);
*/
$scope.droppedObjects0 = [{name:'Goose'},{name:'Rabbit'},{name:'Chick'},{name:'Cat'}];
$scope.droppedObjects1 = []; //Answer: Cat + Rabbit
$scope.droppedObjects2 = []; //Answer: Chicken + Goose
$scope.AnswerOject1 = [{name:'Arnab'},{name:'Kucing'}];
$scope.AnswerOject2 = [{name:'Angsa'},{name:'Ayam'}];
$scope.onDropComplete0 = function (data, evt) {
console.log("127", "$scope", "onDropComplete0", data, evt);
var index = $scope.droppedObjects0.indexOf(data);
if (index == -1 && data !== null) // gave unwanted result if data was null (new empty object)
$scope.droppedObjects0.push(data);
};
$scope.onDropComplete1 = function (data, evt) {
console.log("127", "$scope", "onDropComplete1", data, evt);
var index = $scope.droppedObjects0.indexOf(data);
if (index == -1 && data !== null)
$scope.droppedObjects1.push(data);
};
$scope.onDragSuccess0 = function (data, evt) {
console.log("133", "$scope", "onDragSuccess0", "", evt);
var index = $scope.droppedObjects0.indexOf(data);
if (index > -1 && data) {
$scope.droppedObjects0.splice(index, 1);
}
};
$scope.onDragSuccess1 = function (data, evt) {
console.log("133", "$scope", "onDragSuccess1", "", evt);
var index = $scope.droppedObjects1.indexOf(data);
if (index > -1) {
$scope.droppedObjects1.splice(index, 1);
}
};
$scope.onDragSuccess2 = function (data, evt) {
var index = $scope.droppedObjects2.indexOf(data);
if (index > -1) {
$scope.droppedObjects2.splice(index, 1);
}
};
$scope.onDropComplete2 = function (data, evt) {
var index = $scope.droppedObjects2.indexOf(data);
if (index == -1 && data !== null) {
$scope.droppedObjects2.push(data);
}
};
var inArray = function (array, obj) {
var index = array.indexOf(obj);
};
$scope.logResults = function() {
console.log({
'div1': $scope.droppedObjects0,
'div2': $scope.droppedObjects1,
'div3': $scope.droppedObjects2
});
}
});
.body
{
width:500px;
margin-left:auto;
margin-right:auto;
}
[ng-drag] {
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
[ng-drag] {
width: 50px;
height: 50px;
background: rgba(255, 255, 255, 0.5);
color: #131313;
text-align: center;
padding-top: 12px;
display: inline-block;
margin: 5px 5px;
cursor: move;
border: 1px solid #ccc;
border-radius: 4px;
}
ul.draggable-objects:after {
display: block;
content: "";
clear: both;
}
.draggable-objects li {
float: left;
display: block;
width: 50px;
height: 50px;
margin:2px;
}
[ng-drag].drag-over {
border: solid 1px red;
}
[ng-drag].dragging {
opacity: 0.5;
}
[ng-drop] {
background: rgba(198, 255, 198, 0.5);
text-align: center;
height: 150px;
padding-top: 10px;
display: block;
margin: 20px auto;
position: relative;
border: 1px solid #c3c3c3;
border-radius: 8px;
}
[ng-drop].drag-enter {
border: solid 5px red;
}
[ng-drop] span.title {
display: block;
position: absolute;
top: 50%;
left: 50%;
width: 200px;
height: 20px;
margin-left: -100px;
margin-top: -10px;
}
[ng-drop] div {
position: relative;
z-index: 2;
}
.list-of-drag-item
{
height: 83px;
background-color: #f7f7f7;
}
.active {
background-color: red;
color: white;
transition: transform .2s ease-in-out;
}
<link href="http://code.ionicframework.com/1.3.1/css/ionic.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ngDraggable/0.1.10/ngDraggable.js"></script>
<div ng-app="MyApp" ng-controller="MyCtrl" class="body">
Categorize the animals based on their reproductive system
<div class="row">
<div class="col">
<div class="list-of-drag-item" ng-drop="true" ng-drop-success="onDropComplete0($data,$event)" ng-click="onTargetClick(droppedObjects0, $event)">
<div ng-click="onElementClick($event, obj, droppedObjects0)" ng-repeat="obj in droppedObjects0" ng-drag="true" ng-drag-data="obj"
ng-drag-success="onDragSuccess0($data,$event)" ng-center-anchor="{{centerAnchor}}" ng-class="{active: activeElement.name === obj.name}">
{{obj.name}}
</div>
</div>
</div>
</div>
<div class="row" style="text-align: center;">
<div class="col div-left">
<span class="title">Animals that give birth
<div ng-drop="true" ng-drop-success="onDropComplete1($data,$event)" ng-click="onTargetClick(droppedObjects1, $event)">
<div ng-repeat="obj in droppedObjects1" ng-drag="true" ng-drag-data="obj" ng-drag-success="onDragSuccess1($data,$event)" ng-center-anchor="{{centerAnchor}}" ng-click="onElementClick($event, obj, droppedObjects1)" ng-class="{active: activeElement.name === obj.name}">
{{obj.name}}
</div>
</div>
</div>
<div class="col div-right">
<span class="title">Animals that Laying Eggs</span>
<div ng-drop="true" ng-drop-success="onDropComplete2($data,$event)" ng-click="onTargetClick(droppedObjects2, $event)">
<div ng-repeat="obj in droppedObjects2" ng-drag="true" ng-drag-data="obj"
ng-drag-success="onDragSuccess2($data,$event)" ng-center-anchor="{{centerAnchor}}" ng-click="onElementClick($event, obj, droppedObjects2)" ng-class="{active: activeElement.name === obj.name}">
{{obj.name}}
</div>
</div>
</div>
</div>
<button ng-click="logResults()">log results</button>
</div>
关于javascript - 使用angular js点击另一个div后Div移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39767151/
我正在学习构建单页应用程序 (SPA) 所需的所有技术。总而言之,我想将我的应用程序实现为单独的层,其中前端仅使用 API Web 服务(json 通过 socket.io)与后端通信。前端基本上是
当我看到存储在我的数据库中的日期时。 这是 正常 。日期和时间就是这样。 但是当我运行 get 请求来获取数据时。 此格式与存储在数据库 中的格式不同。为什么会发生这种情况? 最佳答案 我认为您可以将
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试使用backbone.js 实现一些代码 和 hogan.js (http://twitter.github.com/hogan.js/) Hogan.js was developed ag
我正在使用 Backbone.js、Node.js 和 Express.js 制作一个 Web 应用程序,并且想要添加用户功能(登录、注销、配置文件、显示内容与该用户相关)。我打算使用 Passpor
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我尝试在 NodeJS 中加载数据,然后将其传递给 ExpressJS 以在浏览器中呈现 d3 图表。 我知道我可以通过这种方式加载数据 - https://github.com/mbostock/q
在 node.js 中,我似乎遇到了相同的 3 个文件名来描述应用程序的主要入口点: 使用 express-generator 包时,会创建一个 app.js 文件作为生成应用的主要入口点。 通过 n
最近,我有机会观看了 john papa 关于构建单页应用程序的精彩类(class)。我会喜欢的。它涉及服务器端和客户端应用程序的方方面面。 我更喜欢客户端。在他的实现过程中,papa先生在客户端有类
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一个图形新手,需要帮助了解各种 javascript 2D 库的功能。 . . 我从 Pixi.js 中得到了什么,而我没有从 Konva 等基于 Canvas 的库中得到什么? 我从 Konva
我正在尝试将一些 LESS 代码(通过 ember-cli-less)构建到 CSS 文件中。 1) https://almsaeedstudio.com/ AdminLTE LESS 文件2) Bo
尝试查看 Express Passport 中所有登录用户的所有 session ,并希望能够查看当前登录的用户。最好和最快的方法是什么? 我在想也许我可以在登录时执行此操作并将用户模型数据库“在线”
我有一个 React 应用程序,但我需要在组件加载完成后运行一些客户端 js。一旦渲染函数完成并加载,运行与 DOM 交互的 js 的最佳方式是什么,例如 $('div').mixItUp() 。对
请告诉我如何使用bodyparser.raw()将文件上传到express.js服务器 客户端 // ... onFilePicked(file) { const url = 'upload/a
我正在尝试从 Grunt 迁移到 Gulp。这个项目在 Grunt 下运行得很好,所以我一定是在 Gulp 中做错了什么。 除脚本外,所有其他任务均有效。我现在厌倦了添加和注释部分。 我不断收到与意外
我正在尝试更改我的网站名称。找不到可以设置标题或应用程序名称的位置。 最佳答案 您可以在 config/ 目录中创建任何文件,例如 config/app.js 包含如下内容: module.expor
经过多年的服务器端 PHP/MySQL 开发,我正在尝试探索用于构建现代 Web 应用程序的新技术。 我正在尝试对所有 JavaScript 内容进行排序,如果我理解得很好,一个有效的解决方案可以是服
我是 Nodejs 的新手。我在 route 目录中有一个 app.js 和一个 index.js。我有一个 app.use(multer....)。我还定义了 app.post('filter-re
我正在使用 angular-seed用于构建我的应用程序的模板。最初,我将所有 JavaScript 代码放入一个文件 main.js。该文件包含我的模块声明、 Controller 、指令、过滤器和
我是一名优秀的程序员,十分优秀!