このファイル: /home/web6047/www/cgi-bin/prj/20180615-javascript/次の画面へフェードする/javascript.html
1
<!DOCTYPE html>
2
<head>
3
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
4
<title>画面から画面へフェードする</title>
5
<script>
6
7
8
9
10
11
12
13
console.log( "=============== script ==============" );
14
function $( id ) { return document.getElementById( id ); }
15
var HereDocument = /\/\*\s*([^]*?)\s*\*\//;
16
17
18
function onloadx() {
19
20
canvasEL = document.getElementById( "canvasELID" );
21
canvas = canvasEL.getContext( "2d" );
22
canvas.font = "32px 'MS Pゴシック'";
23
24
screenNum = 0;
25
draw();
26
27
timerID = setInterval( run, 200 );
28
anms = new Array();
29
onkeypress = function( e ) {
30
switch( e.which ) {
31
case 13:
32
screenNum = 0;
33
draw();
34
break;
35
case 32:
36
var anm = new Anm();
37
anm.program = [
38
[ "fade", 13 ],
39
[ "changescreen", 1 ],
40
];
41
anm.programCounter = 0;
42
anms.push( anm );
43
break;
44
default:
45
46
}
47
};
48
onclick = function( e ) {
49
onkeypress( { which : screenNum == 0 ? 32 : 13 } );
50
};
51
}
52
function run() {
53
var doDraw = false;
54
55
56
for( var i = anms.length - 1; i >= 0; i-- ) {
57
var anm = anms[ i ];
58
59
doDraw = anm.step();
60
61
if( ! anm.isRunning ) {
62
anms.splice( i, 1 );
63
}
64
}
65
if( doDraw ) {
66
draw();
67
}
68
}
69
70
function Anm() {
71
this.programCounter = 0;
72
this.isRunning = true;
73
}
74
Anm.prototype.step = function() {
75
76
77
var line = this.program[ this.programCounter ];
78
var funcname = line[ 0 ];
79
var funcargs = line.slice( 1 );
80
81
82
var result = window[ "script_" + funcname ]( this, funcargs );
83
84
this.programCounter += result.pc;
85
86
if( this.programCounter == this.program.length ) {
87
this.isRunning = false;
88
}
89
90
return result.doDraw;
91
};
92
93
function script_changescreen( owner, args ) {
94
95
screenNum = args[ 0 ];
96
return {pc:1, doDraw:true,};
97
}
98
function script_fade( owner, args ) {
99
100
var fadeCNTMAX = args[ 0 ];
101
102
if( typeof owner.fadeCNT == "undefined" ) {
103
owner.fadeCNT = 0;
104
105
106
screenNum = 1;
107
draw();
108
owner.imageDataNew = canvas.getImageData( 0, 0, canvasEL.width, canvasEL.height );
109
110
screenNum = 0;
111
draw();
112
owner.imageDataNow = canvas.getImageData( 0, 0, canvasEL.width, canvasEL.height );
113
}
114
115
116
var length = canvasEL.width * canvasEL.height;
117
for( var i = 0; i < length / fadeCNTMAX; i++ ) {
118
var pos = ( i * fadeCNTMAX + owner.fadeCNT ) * 4;
119
owner.imageDataNow.data[ pos + 0 ] = owner.imageDataNew.data[ pos + 0 ];
120
owner.imageDataNow.data[ pos + 1 ] = owner.imageDataNew.data[ pos + 1 ];
121
owner.imageDataNow.data[ pos + 2 ] = owner.imageDataNew.data[ pos + 2 ];
122
owner.imageDataNow.data[ pos + 3 ] = owner.imageDataNew.data[ pos + 3 ];
123
}
124
canvas.putImageData( owner.imageDataNow, 0, 0 );
125
126
owner.fadeCNT ++;
127
128
if( owner.fadeCNT == fadeCNTMAX ) {
129
return {pc:1, doDraw:false,};
130
} else {
131
return {pc:0, doDraw:false,};
132
133
}
134
}
135
136
function draw() {
137
switch( screenNum ) {
138
case 0:
139
canvas.fillStyle = "blue";
140
canvas.fillRect( 0,0, canvasEL.width, canvasEL.height );
141
142
canvas.fillStyle = "white";
143
canvas.save();
144
canvas.translate( canvasEL.width / 2, canvasEL.height / 2 );
145
canvas.fillRect( -100,-100, 200, 200 );
146
canvas.restore();
147
148
canvas.fillStyle = "black";
149
canvas.fillText( "PRESS SPACE KEY.", 100,400 );
150
break;
151
case 1:
152
canvas.fillStyle = "magenta";
153
canvas.fillRect( 0,0, canvasEL.width, canvasEL.height );
154
155
canvas.fillStyle = "red";
156
canvas.save();
157
canvas.translate( canvasEL.width / 2, canvasEL.height / 2 );
158
canvas.rotate( 3.14 / 4, 3.14 / 4 );
159
canvas.fillRect( -100,-100, 200, 200 );
160
canvas.restore();
161
162
canvas.fillStyle = "black";
163
canvas.fillText( "next", 100,100 );
164
canvas.fillText( "PRESS RETURN KEY TO BACK.", 100,400 );
165
break;
166
}
167
}
168
</script>
169
<style>
170
</style>
171
</head>
172
<body onload="onloadx();" style="">
173
<canvas id="canvasELID" width="640" height="480" style="
174
border : solid 1px black;
175
">
176
</canvas>
177
</body>
178
</html>