/
zui.js
104 lines (92 loc) · 2 KB
/
zui.js
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
var tx=0, ty=0,
sx=innerWidth/2,
sy=innerHeight/2,
mx=innerWidth/2,
my=innerHeight/2;
var eps = 0.1;
var y0 = 0, x0 = 0, x1 = innerWidth, y1 = innerHeight;
var tar;
document.onmousewheel=function(a){
var s = Math.exp(a.wheelDelta / 500)
x0 = (x0 - mx) * s + mx
x1 = (x1 - mx) * s + mx
y0 = (y0 - my) * s + my
y1 = (y1 - my) * s + my
var scale = (y1-y0)/innerHeight;
if(scale < eps) history.go(-1);
showTransform();
a.preventDefault()
};
window.onpopstate=function(a){
loadPage(a.state.url)
};
function showTransform(){
var s = (y1-y0)/innerHeight; // same as (x1-x0)/innerWidth
document.body.style.webkitTransform="scale("+s+") translate("+x0/s+"px,"+y0/s+"px)";
document.body.style.webkitTransformOrigin = "0 0";
document.body.style.overflow = 'hidden'
if(tar && tar.nodeName == 'A' && 1/s < eps){
// console.log("clicky");
loadPage(tar.href);
history.pushState({url:tar.href},tar.href,tar.href)
}
}
function loadPage(a){
var b=new XMLHttpRequest;
b.open("get",a,true);
document.body.innerHTML=''
b.onload=function(){
document.body.innerHTML=b.responseText;
resetParameters()
showTransform()
};
b.send(null);
resetParameters()
showTransform()
}
var dragging=false;
document.onmousemove=function(a){
mx = a.pageX
my = a.pageY
tar = a.target;
if(dragging){
var s = (y1-y0)/innerHeight;
var dx = (sx-a.pageX),
dy = (sy-a.pageY);
x0-=dx;
x1-=dx;
y0-=dy;
y1-=dy;
sx=a.pageX;
sy=a.pageY;
showTransform();
a.preventDefault();
a.stopPropagation()
}
};
function resetParameters(){
tx=0;
ty=0;
sx=innerWidth/2;
sy=innerHeight/2;
y0 = 0, x0 = 0,
x1 = innerWidth;
y1 = innerHeight;
showTransform()
}
window.onresize = function(){
resetParameters()
}
document.onmousedown=function(a){
dragging=true;
sx=a.pageX;
sy=a.pageY;
a.preventDefault()
};
document.onclick=function(a){
a.preventDefault()
};
document.onmouseup=function(a){
dragging=false;
a.preventDefault()
};