【发布时间】:2015-10-25 13:02:03
【问题描述】:
当拖动的元素位于其上方时,我无法突出显示放置区域(使用 dropZone 指令定义)。
我尝试过使用 CSS:
.highlight {
background-color: rgba(0, 255, 0, 0.2);
}
.highlight:hover {
background-color: rgba(0, 255, 0, 0.5);
}
但这不起作用,因为我正在拖动一个元素,所以hover 在可拖动元素上。
代码如下:
var app = angular.module("myApp", []);
app.directive("dragCopy", function($http, $compile, $document) {
return {
restrict: 'A',
link: function($scope, $element) {
$element.on("mousedown", function($event) {
$event.preventDefault();
var newNode = $compile('<div class="dragFile" draggable-file>drag</div>')($scope);
newNode.children("#title").text($element.parent().text());
angular.element($document[0].body).append(newNode);
newNode.css({
top: $event.pageY - (newNode.prop("offsetHeight") * 0.9) + "px",
left: $event.pageX - (newNode.prop("offsetWidth") / 2) + "px",
});
newNode.triggerHandler("mousedown");
});
}
}
});
app.factory("dragDropService", function() {
var object = {
dropZoneList: [],
highlightList: [],
register: function(element) {
object.dropZoneList.push(element);
},
highlightDropZones: function() {
for (var i in object.dropZoneList) {
var element = object.dropZoneList[i].append('<div class="highlight"></div>');
var childrens = element.children();
object.highlightList.push(childrens[childrens.length - 1]);
}
},
resetDropZones: function() {
for (var i in object.highlightList) {
object.highlightList[i].remove();
}
}
};
return object;
});
app.directive("dropZone", function(dragDropService) {
return {
restrict: 'A',
link: function($scope, $element) {
dragDropService.register($element);
}
};
});
app.directive("draggableFile", function($document, dragDropService) {
return {
restrict: 'A',
link: function($scope, $element) {
var startX = 0,
startY = 0;
var x, y;
$element.on("mousedown", function($event) {
dragDropService.highlightDropZones();
startX = $element.prop("offsetWidth") / 2;
startY = $element.prop("offsetHeight") * 0.9;
$document.on("mousemove", mousemove);
$document.on("mouseup", mouseup);
});
function mousemove($event) {
y = $event.pageY - startY;
x = $event.pageX - startX;
$element.css({
top: y + "px",
left: x + "px"
});
}
function mouseup() {
$document.off("mousemove", mousemove);
$document.off("mouseup", mouseup);
$element.remove();
console.log(document.elementFromPoint(x, y));
dragDropService.resetDropZones();
}
}
}
});
.itemDrag {
cursor: pointer;
border: 3px solid #81CFE0;
border-radius: 50%;
font-size: 40px;
color: #81CFE0;
padding: 5px;
background-color: rgba(255, 255, 255, 0.5);
}
#receiver {
position: absolute;
left: 50%;
right: 0;
top: 0;
bottom: 0;
}
.dragFile {
position: absolute;
border: 1px solid #81CFE0;
border-radius: 5px;
background-color: rgba(129, 207, 224, 0.5);
cursor: pointer;
}
.highlight {
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
color: #00FF00;
border: 3px dashed #00FF00;
border-radius: 5px;
text-align: center;
font-weight: bold;
text-shadow: 0px 0px 2px black;
background-color: rgba(0, 255, 0, 0.2);
}
.highlight:before {
content: "Add content to terminal";
}
.highlight:hover {
background-color: rgba(0, 255, 0, 0.5);
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp">
<div class="itemDrag fa fa-hand-pointer-o" drag-copy></div>
<div id="receiver" drop-zone></div>
</div>
只能使用 CSS 吗?
【问题讨论】:
标签: javascript css angularjs drag-and-drop