angularjs 可拖动指令在内部显示值
angularjs draggable directive to display value inside
根据指令开发人员指南,我尝试扭曲关于可拖动指令的示例之一,并使其也显示其坐标。
但我的代码更改使指令不可拖动。最重要的变化是我在指令中添加了范围,如下所示。任何人都可以提供帮助吗?完整的源代码可以在下面的 link 中找到。谢谢!
https://plnkr.co/edit/muegeHyOWC828IjI84Tt?p=preview
scope:{
startX: '=',
startY: '=',
x: '=',
y: '='
},
您没有将控制器变量传递给指令:
<span my-draggable
startX="startX" startY="startY"
x="x" y="y" >
Drag Me({{x}},{{y}})
</span>
但如果您还想更新计数器,我会改为绑定方法:
.directive('myDraggable', ['$document','$timeout', function($document,$timeout) {
return {
scope:{
onChange: '&'
},
link: function(scope, element, attr) {
scope.x=0;
scope.y=0;
scope.startX=0;
scope.startY=0;
element.css({
position: 'relative',
border: '1px solid red',
backgroundColor: 'lightgrey',
cursor: 'pointer'
});
element.on('mousedown', function(event) {
console.log('mousedown');
// Prevent default dragging of selected content
event.preventDefault();
$document.on('mousemove', mousemove);
$document.on('mouseup', mouseup);
});
function mousemove(event) {
scope.y = event.pageY - scope.startY;
scope.x = event.pageX - scope.startX;
element.css({
top: scope.y + 'px',
left: scope.x + 'px'
});
$timeout(function(){
scope.onChange({data:{x:scope.x, y:scope.y}});
});
}
function mouseup() {
console.log('mouseup');
$document.off('mousemove', mousemove);
$document.off('mouseup', mouseup);
}
}
};
}])
控制器
$scope.onChange = function(data){
$scope.x=data.x;
$scope.y=data.y;
}
HTML
<span my-draggable on-change="onChange(data)" >Drag Me({{x}},{{y}})</span>
这是您的
的有效更新代码
angular.module('dragModule', [])
.controller('myController', ['$scope', function($scope){
$scope.startX=0;
$scope.startY=0;
$scope.x=0;
$scope.y=0;
}])
.directive('myDraggable', ['$document', function($document) {
return {
scope:{
startX: '=',
startY: '=',
x: '=',
y: '='
},
link: function(scope, element, attr) {
element.css({
position: 'relative',
border: '1px solid red',
backgroundColor: 'lightgrey',
cursor: 'pointer'
});
element.on('mousedown', function(event) {
// Prevent default dragging of selected content
event.preventDefault();
scope.startX = event.pageX - scope.x;
scope.startY = event.pageY - scope.y;
$document.on('mousemove', mousemove);
$document.on('mouseup', mouseup);
scope.$apply();
});
function mousemove(event) {
scope.y = event.pageY - scope.startY;
scope.x = event.pageX - scope.startX;
element.css({
top: scope.y + 'px',
left: scope.x + 'px'
});
scope.$apply();
}
function mouseup() {
$document.off('mousemove', mousemove);
$document.off('mouseup', mouseup);
}
}
};
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="dragModule">
<div ng-controller="myController">
<span my-draggable start-x="startX" start-y="startY" x="x" y="y" id="drag">Drag Me({{x}},{{y}})</span>
</div>
</body>
根据指令开发人员指南,我尝试扭曲关于可拖动指令的示例之一,并使其也显示其坐标。
但我的代码更改使指令不可拖动。最重要的变化是我在指令中添加了范围,如下所示。任何人都可以提供帮助吗?完整的源代码可以在下面的 link 中找到。谢谢!
https://plnkr.co/edit/muegeHyOWC828IjI84Tt?p=preview
scope:{
startX: '=',
startY: '=',
x: '=',
y: '='
},
您没有将控制器变量传递给指令:
<span my-draggable
startX="startX" startY="startY"
x="x" y="y" >
Drag Me({{x}},{{y}})
</span>
但如果您还想更新计数器,我会改为绑定方法:
.directive('myDraggable', ['$document','$timeout', function($document,$timeout) {
return {
scope:{
onChange: '&'
},
link: function(scope, element, attr) {
scope.x=0;
scope.y=0;
scope.startX=0;
scope.startY=0;
element.css({
position: 'relative',
border: '1px solid red',
backgroundColor: 'lightgrey',
cursor: 'pointer'
});
element.on('mousedown', function(event) {
console.log('mousedown');
// Prevent default dragging of selected content
event.preventDefault();
$document.on('mousemove', mousemove);
$document.on('mouseup', mouseup);
});
function mousemove(event) {
scope.y = event.pageY - scope.startY;
scope.x = event.pageX - scope.startX;
element.css({
top: scope.y + 'px',
left: scope.x + 'px'
});
$timeout(function(){
scope.onChange({data:{x:scope.x, y:scope.y}});
});
}
function mouseup() {
console.log('mouseup');
$document.off('mousemove', mousemove);
$document.off('mouseup', mouseup);
}
}
};
}])
控制器
$scope.onChange = function(data){
$scope.x=data.x;
$scope.y=data.y;
}
HTML
<span my-draggable on-change="onChange(data)" >Drag Me({{x}},{{y}})</span>
这是您的
的有效更新代码angular.module('dragModule', [])
.controller('myController', ['$scope', function($scope){
$scope.startX=0;
$scope.startY=0;
$scope.x=0;
$scope.y=0;
}])
.directive('myDraggable', ['$document', function($document) {
return {
scope:{
startX: '=',
startY: '=',
x: '=',
y: '='
},
link: function(scope, element, attr) {
element.css({
position: 'relative',
border: '1px solid red',
backgroundColor: 'lightgrey',
cursor: 'pointer'
});
element.on('mousedown', function(event) {
// Prevent default dragging of selected content
event.preventDefault();
scope.startX = event.pageX - scope.x;
scope.startY = event.pageY - scope.y;
$document.on('mousemove', mousemove);
$document.on('mouseup', mouseup);
scope.$apply();
});
function mousemove(event) {
scope.y = event.pageY - scope.startY;
scope.x = event.pageX - scope.startX;
element.css({
top: scope.y + 'px',
left: scope.x + 'px'
});
scope.$apply();
}
function mouseup() {
$document.off('mousemove', mousemove);
$document.off('mouseup', mouseup);
}
}
};
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="dragModule">
<div ng-controller="myController">
<span my-draggable start-x="startX" start-y="startY" x="x" y="y" id="drag">Drag Me({{x}},{{y}})</span>
</div>
</body>