-
Notifications
You must be signed in to change notification settings - Fork 0
/
20161120照片墙练习.html
116 lines (115 loc) · 3.71 KB
/
20161120照片墙练习.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
#container{
height: 540px;
width: 540px;
}
#container div{
height: 150px;
width: 150px;
float: left;
margin: 15px;
}
</style>
</head>
<body>
<div id="container">
<div style="background-color: #999999"></div>
<div style="background-color: lightsteelblue"></div>
<div style="background-color: powderblue"></div>
<div style="background-color: blue"></div>
<div style="background-color: #CCCCCC"></div>
<div style="background-color: cadetblue"></div>
<div style="background-color: cornflowerblue"></div>
<div style="background-color: dodgerblue"></div>
<div style="background-color: lightblue"> </div>
</div>
<script src="jslib.js"></script>
<script>
var oContainer = document.getElementById('container');
var aDiv = oContainer.getElementsByTagName('div');
var nearElem;
for(var i=aDiv.length-1;i>=0;i--){
aDiv[i].style.left = aDiv[i].offsetLeft +'px';
aDiv[i].style.top = aDiv[i].offsetTop + 'px';
aDiv[i].style.position = 'absolute';
aDiv[i].style.margin = 0;
drag(aDiv[i]);
}
function drag(elem){
var ELeft = elem.offsetLeft;
var ETop = elem.offsetTop;
elem.onmousedown = function(e){
e = e || window.event;
var iDisX = e.clientX - elem.offsetLeft;
var iDisY = e.clientY - elem.offsetTop;
document.onmousemove = function(e){
e= e || window.event;
var left = e.clientX - iDisX;
var top = e.clientY - iDisY;
elem.style.left = left +'px';
elem.style.top = top +'px';
aColide=[];
for(var i=0;i<aDiv.length;i++){
var checkDis = check(elem,aDiv[i]);
if(checkDis){
aColide.push(aDiv[i]);
console.log(aColide);
}
}
if(aColide.length>0){
nearElem = nearest(elem);
var NLeft = nearElem.offsetLeft;
var NTop = nearElem.offsetTop;
if(elem != nearElem){
animate(elem,{left:NLeft,top:NTop});
animate(nearElem,{left:ELeft,top:ETop});
nearElem = null;
}
}
}
};
document.onmouseup = function(){
document.onmousemove = null;
}
}
function check(elem,target){
var elemL = elem.offsetLeft;
var elemR = elem.offsetWidth + elem.offsetLeft;
var elemT = elem.offsetTop;
var elemB = elem.offsetHeight + elem.offsetTop;
var targetL = target.offsetLeft;
var targetR = target.offsetWidth + target.offsetLeft;
var targetT = target.offsetTop;
var targetB = target.offsetHeight + target.offsetTop;
if(elemL < targetR || elemR < targetL || elemT > targetB || elemB < targetT ){
return false;
}else{
return true;
}
}
function nearest(elem){
var mixDis = 9999999;
var index = -1;
for(var i=0;i<aColide.length;i++){
var x = aDiv[i].offsetLeft - elem.offsetLeft;
var y = aDiv[i].offsetTop - elem.offsetTop;
var iDis = Math.sqrt(x*x +y*y);
if(iDis < mixDis){
mixDis = iDis;
index=i;
}
}
return aColide[index];
}
</script>
</body>
</html>