Projekt

Obecné

Profil

Stáhnout (5.07 KB) Statistiky
| Větev: | Tag: | Revize:
1
/**
2
 * The class which ensures zoom.
3
 */
4
function Zoom() {
5
	var CONST_ZOOM_VALUES = [10, 25, 40, 50, 60, 70, 80, 90, 100, 125, 150, 200, 300, 400, 500];
6

    
7
	this.currentZoom = 1;
8
	this.currentZoomIndex = CONST_ZOOM_VALUES.indexOf(100);
9

    
10
	var mouseX = 0;
11
	var mouseY = 0;
12

    
13
	$(document).mousemove(function(e) {
14
		mouseX = e.pageX;
15
		mouseY = e.pageY - 100; //odecteni horniho okraje od viewportu
16
	});
17

    
18
	/**
19
	 * Gets zoom step (no per cent).
20
	 *
21
	 * @param zoomStepInPercent zoom step in per cent
22
	 * @returns {number} zoom step
23
	 */
24
	function getZoomStep(zoomStepInPercent) {
25
		return zoomStepInPercent/100.0;
26
	}
27
	
28
	/**
29
	* This method ensures zoom in.
30
	*/
31
	this.zoomIn = function() {
32
		if (this.currentZoomIndex >= (CONST_ZOOM_VALUES.length - 1)) return;
33
		
34
		var viewport_pos_top_bef_zoom = $('#viewport').scrollTop(),//pozice odshora
35
			viewport_pos_left_bef_zoom = $('#viewport').scrollLeft(),//pozice odshora
36
			svg_width_bef = $('#svg1').width(),//pozice odshora
37
			svg_height_bef = $('#svg1').height();//pozice odshora
38
		
39
		
40
		$("#zoomOut").removeAttr("disabled");
41
		$("#zoomOut img").attr("src", "images/zoom_out.png");
42
		this.currentZoomIndex++;
43

    
44
		var zoomStepInPercent = CONST_ZOOM_VALUES[this.currentZoomIndex];
45
		this.currentZoom = getZoomStep(zoomStepInPercent);
46

    
47
		var graph = $("#graph");
48
		graph.attr('transform', 'scale('+ this.currentZoom + ')');
49
		
50
		GraphManager.setSizeOfSvg();
51
		graph.attr('transform', 'scale('+ this.currentZoom + ') ' +  GraphManager.centerGraphInViewport(this.currentZoom));
52
		$("#zoomValue").html(CONST_ZOOM_VALUES[this.currentZoomIndex] + "%");
53

    
54
		var viewport_pos_top_after_zoom = $('#viewport').scrollTop(),    //pozice odshora
55
			viewport_pos_left_after_zoom = $('#viewport').scrollLeft();  //pozice odshora
56

    
57
		//pokud se rozsiruje #svg1
58
		if ( viewport_pos_top_bef_zoom != viewport_pos_top_after_zoom ) {
59
			var svg_height_after = $('#svg1').height(),//pozice odshora
60
				new_viewport_top = (mouseY + viewport_pos_top_bef_zoom ) / svg_height_bef;
61
			
62
			new_viewport_top = (new_viewport_top * svg_height_after) - mouseY ;
63
			
64
			var diff_konst = 0;
65
			if (mouseX < ($('#viewport').height() / 2) ){
66
				diff_konst = diff_konst * -1;
67
			}
68
			$('#viewport').scrollTop( (new_viewport_top)  + diff_konst * new_viewport_top);
69
		}
70
		
71
		if ( viewport_pos_left_bef_zoom != viewport_pos_left_after_zoom ) {
72
			var viewport_width = $('#viewport').width(),
73
				svg_width_after = $('#svg1').width();//pozice odshora
74
			
75
			viewport_pos_left_bef_zoom *= -1;
76
			var new_viewport_left = (viewport_width - mouseX + viewport_pos_left_bef_zoom ) / svg_width_bef;
77
			
78
			new_viewport_left = (new_viewport_left * svg_width_after) - (viewport_width - mouseX);
79
			
80
			var diff_konst = 0;
81
			if (mouseY < ($('#viewport').width() / 2) ){
82
				diff_konst = diff_konst * -1;
83
			}
84
			new_viewport_left *=-1;
85
			$('#viewport').scrollLeft( new_viewport_left  - (diff_konst * new_viewport_left));
86
		}
87
		
88
		if (this.currentZoomIndex >= (CONST_ZOOM_VALUES.length - 1)) {
89
			$("#zoomIn").attr("disabled", "disabled");
90
			$("#zoomIn img").attr("src", "images/zoom_in_disabled.png");
91
		}
92
	};
93
	
94
	/**
95
	* This method ensures zoom out.
96
	*/
97
	this.zoomOut = function() {
98
		if (this.currentZoomIndex <= 0) return;
99

    
100
		var viewport_pos_top_bef_zoom = $('#viewport').scrollTop(),//pozice odshora
101
			viewport_pos_left_bef_zoom = $('#viewport').scrollLeft(),//pozice odshora
102
			svg_width_bef = $('#svg1').width(),//pozice odshora
103
			svg_height_bef = $('#svg1').height();//pozice odshora
104
		
105
		
106
		$("#zoomIn").removeAttr("disabled");
107
		$("#zoomIn img").attr("src", "images/zoom_in.png");
108
		this.currentZoomIndex--;
109

    
110
		var zoomStepInPercent = CONST_ZOOM_VALUES[this.currentZoomIndex];
111
		this.currentZoom = getZoomStep(zoomStepInPercent);
112
		
113
		var graph = $("#graph");
114
		graph.attr('transform', 'scale('+ this.currentZoom + ')');
115
		
116
		GraphManager.setSizeOfSvg();
117

    
118
		graph.attr('transform', 'scale('+ this.currentZoom + ') ' +  GraphManager.centerGraphInViewport(this.currentZoom));
119
		$("#zoomValue").html(CONST_ZOOM_VALUES[this.currentZoomIndex] + "%");
120

    
121
		var viewport_pos_top_after_zoom = $('#viewport').scrollTop(),    //pozice odshora
122
			viewport_pos_left_after_zoom = $('#viewport').scrollLeft();  //pozice odshora
123

    
124
		if ( viewport_pos_top_bef_zoom != viewport_pos_top_after_zoom ) {
125
			
126
			var svg_height_after = $('#svg1').height(),//pozice odshora
127
				new_viewport_top = (mouseY + viewport_pos_top_bef_zoom ) / svg_height_bef;
128
			
129
			new_viewport_top = (new_viewport_top * svg_height_after) - mouseY;
130
			
131
			$('#viewport').scrollTop( new_viewport_top );
132
		}
133
		
134
		if ( viewport_pos_left_bef_zoom != viewport_pos_left_after_zoom ) {
135
			var viewport_width = $('#viewport').width(),
136
				svg_width_after = $('#svg1').width();//šířka
137
			
138
			viewport_pos_left_bef_zoom *= -1;
139
			var new_viewport_left = (viewport_width - mouseX + viewport_pos_left_bef_zoom ) / svg_width_bef;
140
			
141
			new_viewport_left = (new_viewport_left * svg_width_after) - (viewport_width - mouseX);
142
			
143
			$('#viewport').scrollLeft( new_viewport_left * -1 );
144
		}
145
		
146
		if (this.currentZoomIndex <= 0) {
147
			$("#zoomOut").attr("disabled", "disabled");
148
			$("#zoomOut img").attr("src", "images/zoom_out_disabled.png");
149
		}
150
	};
151
}
(19-19/19)