我想基本上将angular.js drag directive的以下实现限制在父元素的边界内。我该怎么做?
这是一个可视化我的问题的jsbin:http://jsbin.com/maxife/3/edit?html,css,js,output
答案 0 :(得分:3)
您必须修改拖拽指令才能实现这一点,
由于 event.pageX 和 event.pageY 属性会返回鼠标指针相对于整个文档左边缘的位置,因此您需要:
<span my-draggable>Drag Me</span>
你如何进入指令?使用此: Get element parent height inside directive in AnguarJS
同样,您必须使用父元素的高度和宽度属性,但您不必触摸位置或使用偏移,只需在 element.css({..})之前添加:
if(x>27){
x=27;
}
else if(x<0){
x=0;
}
if(y>77){
y=77;
}
else if(y<0){
y=0;
}
我已手动完成,因此您可以在使用父属性之前获得示例。如果您不希望某些span元素超出div的范围,则必须考虑跨度宽度+高度。
完整的模块:
angular.module('dragModule', [])
.directive('myDraggable', ['$document', function($document) {
return {
link: function(scope, element, attr) {
var startX = 0, startY = 0, x = 0, y = 0;
element.css({
position: 'absolute',
border: '1px solid red',
backgroundColor: 'lightgrey',
cursor: 'pointer'
});
element.on('mousedown', function(event) {
// Prevent default dragging of selected content
event.preventDefault();
startX = event.pageX - x;
startY = event.pageY - y;
$document.on('mousemove', mousemove);
$document.on('mouseup', mouseup);
});
function mousemove(event) {
y = event.pageY - startY;
x = event.pageX - startX;
if(x>27){
x=27;
}
else if(x<0){
x=0;
}
if(y>77){
y=77;
}
else if(y<0){
y=0;
}
element.css({
top: y + 'px',
left: x + 'px'
});
}
function mouseup() {
$document.off('mousemove', mousemove);
$document.off('mouseup', mouseup);
}
}
};
}]);
在JSbin中:JSbin link