Angular 指令不适用于 child 元素
Angular Directive not for child element
我有一个指令,我想添加到 div 但不添加到它的 child div。
我想要一个 div 是可拖动的,以便这个 div 是可拖动的,它的 child divs 也被拖动。但我不希望 child div 能够拖动它的 parent div.
这是HTML模板
<div div-draggable id="chColorPickerWrapper">
<div>
<div id="colorDiv"> </div>
<div id="whiteToTransparent"> </div>
<div id="blackToTransparent"> </div>
</div>
</div>
这是指令
chDirectives.directive('divDraggable',['$document', function($document){
return{
restrict: 'A',
link : link
};
function link(scope,element,attrs)
{
var startX = 0;
var startY = 0;
var x = 0;
var y = 0;
var mouseMove = function(event) {
event.preventDefault();
y = event.pageY - startY;
x = event.pageX - startX;
element.css({
top: y + 'px',
left: x + 'px'
});
}
var mouseUp = function() {
console.log('UNBIND');
$document.off('mousemove', mouseMove);
$document.off('mouseup', mouseUp);
}
var mouseDown = function(event){
console.log('mouseDown');
event.preventDefault();
startX = event.pageX - x;
startY = event.pageY - y;
$document.on('mousemove', mouseMove);
$document.on('mouseup', mouseUp);
}
element.bind('mousedown',mouseDown);
element.css({
position: 'relative',
cursor: 'pointer',
display: 'block',
});
}
}]);
当我点击 colorDiv 时,我不希望它是可拖动的。
我如何覆盖或删除 child div 的这种行为?
如果您有任何改进我的代码的建议,我也将不胜感激,因为我是 angularjs
的新手
编辑:
这是一个例子:
http://plnkr.co/edit/K52DDXQRCME7S3oMimoC
在您的 mouseDown 处理程序中,您需要检查 event.target
是否是可拖动元素:
var mouseDown = function(event){
console.log('mouseDown');
event.preventDefault();
if( event.target === element ) {
startX = event.pageX - x;
startY = event.pageY - y;
$document.on('mousemove', mouseMove);
$document.on('mouseup', mouseUp);
}
}
我有一个指令,我想添加到 div 但不添加到它的 child div。 我想要一个 div 是可拖动的,以便这个 div 是可拖动的,它的 child divs 也被拖动。但我不希望 child div 能够拖动它的 parent div.
这是HTML模板
<div div-draggable id="chColorPickerWrapper">
<div>
<div id="colorDiv"> </div>
<div id="whiteToTransparent"> </div>
<div id="blackToTransparent"> </div>
</div>
</div>
这是指令
chDirectives.directive('divDraggable',['$document', function($document){
return{
restrict: 'A',
link : link
};
function link(scope,element,attrs)
{
var startX = 0;
var startY = 0;
var x = 0;
var y = 0;
var mouseMove = function(event) {
event.preventDefault();
y = event.pageY - startY;
x = event.pageX - startX;
element.css({
top: y + 'px',
left: x + 'px'
});
}
var mouseUp = function() {
console.log('UNBIND');
$document.off('mousemove', mouseMove);
$document.off('mouseup', mouseUp);
}
var mouseDown = function(event){
console.log('mouseDown');
event.preventDefault();
startX = event.pageX - x;
startY = event.pageY - y;
$document.on('mousemove', mouseMove);
$document.on('mouseup', mouseUp);
}
element.bind('mousedown',mouseDown);
element.css({
position: 'relative',
cursor: 'pointer',
display: 'block',
});
}
}]);
当我点击 colorDiv 时,我不希望它是可拖动的。 我如何覆盖或删除 child div 的这种行为?
如果您有任何改进我的代码的建议,我也将不胜感激,因为我是 angularjs
的新手编辑: 这是一个例子: http://plnkr.co/edit/K52DDXQRCME7S3oMimoC
在您的 mouseDown 处理程序中,您需要检查 event.target
是否是可拖动元素:
var mouseDown = function(event){
console.log('mouseDown');
event.preventDefault();
if( event.target === element ) {
startX = event.pageX - x;
startY = event.pageY - y;
$document.on('mousemove', mouseMove);
$document.on('mouseup', mouseUp);
}
}