angularjs 选项卡 --- 自定义属性

时间:2021-05-08 06:26:37
<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<style>
#div1 { position:absolute; left: 0; top: 0; width:150px; height:150px; border:1px red solid; background: red; cursor: pointer;}
</style>
<script src="jquery-1.11.1.js"></script>
<script src="angular.min.js" ></script>
<script type="text/javascript">

var m1 = angular.module('myApp', []);

// 指令是可以复用的
m1.directive('myDrag', function() {

// scope: 独立作用域, 只在当前标签起作用, 跟外面没有关系
// 自定义指令内部数据的绑定方式, 共享的
// @: 绑定的普通字符串 , = :解析的是数据, &: 绑定的是父级函数的传递方式
// 属性指令跟模板没有太大的关系
return {
restrict : 'A',
link: function( scope, ele, attr ) {
var disX = 0, disY = 0;
attr.myDrag = angular.equals(attr.myDrag, 'true');
// alert( typeof attr.myDrag);

ele.on('mousedown', function(ev) {
var This = this;

disX = ev.pageX - $(this).offset().left;
disY = ev.pageY - $(this).offset().top;

if(attr.myDrag) {
var $line = $('<div>');
$line.css({ width : $(this).outerWidth() , height : $(this).outerHeight() , position : 'absolute' , left : $(this).offset().left , top : $(this).offset().top , border : '1px gray dotted'});
$('body').append($line);
}

$(document).on('mousemove', function(ev) {
// console.log($(this).get(0).tagName);
//
if(attr.myDrag) {
$line.css('left',ev.pageX - disX);
$line.css('top',ev.pageY - disY);

} else {
$(This).css('left', ev.pageX - disX);
$(This).css('top', ev.pageY - disY);
}

});

$(document).on('mouseup', function() {
$(document).off();
if(attr.myDrag) {
$(This).css('left',$line.offset().left);
$(This).css('top',$line.offset().top);
$line.remove();
}
});

return false;
});

}

};

});
m1.controller('tab', ['$scope', function($scope) {
// $scope.age = 101;

}]);

</script>
</head>
<body ng-controller="tab">
<div id="div1" my-drag="true"></div>
</body>
</html>