質問編集履歴
1
試した事、コードの追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
[みなりん堂様](http://sei.sakuraweb.com/lib/maid/index.html)のmaid-systemをお借りして着せ替えゲームを作ろうと考えています。
|
2
|
-
http://sei.sakuraweb.com/lib/maid/index.html
|
3
|
-
|
4
2
|
以下の事を行いたいのですが可能でしょうか?
|
5
3
|
|
6
4
|
・アイテム名部分を画像に変更
|
@@ -11,4 +9,387 @@
|
|
11
9
|
Javascriptの知識が全くなくどこをどのように変更すればいいのかわかりません。どうかお力をいただければ幸いです。
|
12
10
|
|
13
11
|
どれかひとつでも構いません。可能であれば方法をご教示いただきたいです。
|
12
|
+
どうかよろしくお願いいたします。
|
13
|
+
|
14
|
+
--追記---
|
15
|
+
|
16
|
+
ありがとうございます。
|
17
|
+
|
18
|
+
中央寄せに関しては全体を<center></center>で挟んだり以下のcssを試してみました。
|
19
|
+
```css
|
20
|
+
position: absolute;
|
21
|
+
top: 0;
|
22
|
+
left: 0;
|
23
|
+
right: 0;
|
24
|
+
bottom: 0;
|
25
|
+
margin: auto;
|
26
|
+
width:300px;
|
27
|
+
height:300px;
|
28
|
+
```
|
29
|
+
|
30
|
+
検討違いの部分を載せてしまっていたら申し訳ありません。
|
31
|
+
```html
|
32
|
+
|
33
|
+
<style type="text/css">
|
34
|
+
<!--
|
35
|
+
* { font-size:12px; }
|
36
|
+
body {
|
37
|
+
background:#FFFFFF; line-height:120%;
|
38
|
+
}
|
39
|
+
#guide {
|
40
|
+
color:#444444; padding:20px; position:absolute; left:0; top:200px; z-index:0;
|
41
|
+
}
|
42
|
+
#panel {
|
43
|
+
cursor:default; width:160px; position:absolute; top:0; z-index:2;
|
44
|
+
}
|
45
|
+
#imgbody { position:absolute; z-index:1; }
|
46
|
+
#setlist { width:105px; }
|
47
|
+
#panel p { text-align:center; }
|
48
|
+
#panel p, #itemlist table { border:1px solid; padding:2px; margin:0 0 4px 0; }
|
49
|
+
#itemlist { overflow:auto; }
|
50
|
+
#itemlist table { width:100%; border-collapse:collapse; }
|
51
|
+
#itemlist td { border-bottom:1px solid; height:20px; padding:0; margin:0; }
|
52
|
+
#itemlist .name { width:100%; }
|
53
|
+
#itemlist .chg input { width:12px; height:12px; padding:0; margin:2px 0; }
|
54
|
+
|
55
|
+
/*==================*/
|
56
|
+
/* 拡張パネル設定 */
|
57
|
+
/*==================*/
|
58
|
+
#imgarea {
|
59
|
+
position:absolute; left:0; top:0; z-index:0;
|
60
|
+
background:none; /* ← 画像エリアに背景画像を表示する場合は「url(画像URL);」*/
|
61
|
+
/* を指定。表示しない場合は「none;」を指定 */
|
62
|
+
}
|
63
|
+
|
64
|
+
#panel-ext {
|
65
|
+
background:#FAF9F8; overflow-y:scroll; cursor:default; display:none;
|
66
|
+
position:absolute; left:0; top:0; z-index:2; width:260px;
|
67
|
+
}
|
68
|
+
|
69
|
+
#panel-ext p { padding:4px; margin:0; }
|
70
|
+
#panel-ext .category { color:#605550; background:#D8D5CF; border:1px solid #AAA099; margin-bottom:4px; }
|
71
|
+
#panel-ext .title { color:#524A43; background:#AAA099; font-weight:bold; }
|
72
|
+
|
73
|
+
.adjust-opt { position:absolute; right:2px; }
|
74
|
+
.adjust-opt a { color:#524A43; padding:0 2px; }
|
75
|
+
.adjust-name { color:#6B615E; font-weight:bold; }
|
76
|
+
.adjust-hsv, #random-make { background:#F3F2F0; padding:4px; }
|
77
|
+
.adjust-hsv, .adjust-hsv input { width:100%; }
|
78
|
+
.adjust-hsv td:nth-child(odd) { width:34px; }
|
79
|
+
.adjust-hsv * { text-align:right; vertical-align:bottom; margin:0; }
|
80
|
+
|
81
|
+
#panel-popup { /* popup表示用 */
|
82
|
+
background:#F8F8FB; text-align:center; border-radius:12px; box-shadow:2px 2px 5px 3px rgba(86,90,96,0.5);
|
83
|
+
display:none; padding:16px; margin:0 auto; position:absolute; left:0; right:0; top:20%; z-index:3;
|
84
|
+
}
|
85
|
+
|
86
|
+
-->
|
87
|
+
</style>
|
88
|
+
</head>
|
89
|
+
<body onload="init()">
|
90
|
+
<script src="maid.js" type="text/javascript"></script>
|
91
|
+
<script src="maidChrMake.js" type="text/javascript"></script>
|
92
|
+
|
93
|
+
<div id="imgbody">
|
94
|
+
<script type="text/javascript">
|
95
|
+
<!--
|
96
|
+
/*============*/
|
97
|
+
/* 動作設定 */
|
98
|
+
/*============*/
|
99
|
+
|
100
|
+
panel.imgAreaWidth = 0; // 画像エリアの横幅ピクセル数 (0:自動設定 [デフォルト値])
|
101
|
+
panel.imgAreaHeight = 0; // 画像エリアの縦幅ピクセル数 (0:自動設定 [デフォルト値])
|
102
|
+
|
103
|
+
img("set:1; src:face/; group:face; adjust:face");
|
104
|
+
img("set:1; src:base.png; ctrl:0"); // ベース画像の指定
|
105
|
+
|
106
|
+
pnl("set:00,AA; ctrl:3; name:顔; group:face", [
|
107
|
+
"chr:A; src:1.png; name:画像1",
|
108
|
+
"chr:B; src:2.png; name:画像2",
|
109
|
+
]);
|
110
|
+
pnl("set:1111; ctrl:0; group:body");
|
111
|
+
|
112
|
+
//-->
|
113
|
+
</script>
|
114
|
+
</div><!-- /#imgbody -->
|
115
|
+
|
116
|
+
|
117
|
+
```
|
118
|
+
|
119
|
+
```javascript
|
120
|
+
/*
|
121
|
+
* Pnlオブジェクト
|
122
|
+
*/
|
123
|
+
function Pnl(arg, item)
|
124
|
+
{
|
125
|
+
var i, n, wk, tb, s1, s2;
|
126
|
+
|
127
|
+
this.opIndex;
|
128
|
+
this.img = [];
|
129
|
+
this.src = [];
|
130
|
+
this.set = [];
|
131
|
+
this.item = item || [];
|
132
|
+
|
133
|
+
panel.param.call(this, arg);
|
134
|
+
|
135
|
+
tb = [0,1,17,15,13,11,9,7,5,3,2,4,6,8,10,12,14,16];
|
136
|
+
s1 = arg.set1 || "";
|
137
|
+
s2 = arg.set2 || "";
|
138
|
+
wk = [];
|
139
|
+
|
140
|
+
for (i = 0; i < this.item.length; i++) {
|
141
|
+
this.item[i] = parseParam(this.item[i]);
|
142
|
+
if (this.item[i].chr1) wk[this.item[i].chr1.charAt(0)] = i;
|
143
|
+
}
|
144
|
+
|
145
|
+
for (i = 0; i < s1.length; i++) this.set.push(tb[parseInt(s1.charAt(i), 18) | 0] | (wk[s2.charAt(i)] << 5));
|
146
|
+
|
147
|
+
n = this.chgIndex = this.getset(0).n;
|
148
|
+
wk = imgs[arg.group1] || [];
|
149
|
+
|
150
|
+
for (i = 0; i < wk.length; i++) {
|
151
|
+
this.src.push(wk[i][0]);
|
152
|
+
this.img.push(new Img(this.getsrc(i, n), wk[i][1]));
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
Pnl.prototype = {
|
157
|
+
getset: function(n) {
|
158
|
+
n = this.set[n];
|
159
|
+
return { v:!!(n & 1), o:(n >> 1) & 15, n:(n >>> 5) };
|
160
|
+
},
|
161
|
+
|
162
|
+
getsrc: function(i, n) {
|
163
|
+
return (this.src[i] || "") + ((this.item[n] && this.item[n].src1) || "");
|
164
|
+
},
|
165
|
+
|
166
|
+
eff: function(func) {
|
167
|
+
for (var i = 0; i < this.img.length; i++) {
|
168
|
+
if (effuse && ua.LE_IE8 && $("effect-on").checked) {
|
169
|
+
this.img[i].eff.filters.blendTrans.apply();
|
170
|
+
func.call(this, i);
|
171
|
+
this.img[i].eff.filters.blendTrans.play();
|
172
|
+
}
|
173
|
+
else {
|
174
|
+
func.call(this, i);
|
175
|
+
}
|
176
|
+
}
|
177
|
+
},
|
178
|
+
|
179
|
+
visible: function(mode) {
|
180
|
+
this.eff(function(i){
|
181
|
+
this.img[i].setVisible(mode);
|
182
|
+
});
|
183
|
+
},
|
184
|
+
|
185
|
+
opacity: function(index) {
|
186
|
+
this.eff(function(i){
|
187
|
+
this.img[i].setOpacity(maid.op[index]);
|
188
|
+
});
|
189
|
+
this.opIndex = index;
|
190
|
+
},
|
191
|
+
|
192
|
+
change: function(index) {
|
193
|
+
if (this.chgIndex == index) return;
|
194
|
+
|
195
|
+
this.eff(function(i){
|
196
|
+
this.img[i].change(this.getsrc(i, index));
|
197
|
+
});
|
198
|
+
this.chgIndex = index;
|
199
|
+
}
|
200
|
+
};
|
201
|
+
|
202
|
+
/*
|
203
|
+
* パラメータ取り込み
|
204
|
+
*/
|
205
|
+
function img(arg, item)
|
206
|
+
{
|
207
|
+
if (!ua) return;
|
208
|
+
arg = parseParam(arg);
|
209
|
+
|
210
|
+
var g = arg.group1 || (arg.group1 = "_" + imgno);
|
211
|
+
|
212
|
+
if (!imgs[g]) imgs[g] = [];
|
213
|
+
imgs[g].push([arg.src1, imgno++]);
|
214
|
+
|
215
|
+
if ("_" == g.charAt(0)) pnls.push(new Pnl(arg, item));
|
216
|
+
}
|
217
|
+
|
218
|
+
function pnl(arg, item)
|
219
|
+
{
|
220
|
+
if (!ua) return;
|
221
|
+
pnls.push(new Pnl(parseParam(arg), item));
|
222
|
+
}
|
223
|
+
|
224
|
+
/*
|
225
|
+
* パネル制御で使用する関数
|
226
|
+
*/
|
227
|
+
function syncImg(no, index, func)
|
228
|
+
{
|
229
|
+
var i, wk, ct = 300, tmp = [], load = function(obj, n){
|
230
|
+
var i, wk;
|
231
|
+
if (obj.chgIndex == n) return;
|
232
|
+
|
233
|
+
for (i = 0; i < obj.src.length; i++) {
|
234
|
+
wk = tmp[tmp.push(new Image()) -1];
|
235
|
+
wk.onload = wk.onerror = wk.onabort = function(){ this.$ok = true; };
|
236
|
+
wk.src = obj.getsrc(i, n);
|
237
|
+
}
|
238
|
+
};
|
239
|
+
|
240
|
+
if (-1 == no) {
|
241
|
+
for (i = 0; i < pnls.length; i++) load(pnls[i], pnls[i].getset(index).n);
|
242
|
+
}
|
243
|
+
else {
|
244
|
+
load(pnls[no], index);
|
245
|
+
}
|
246
|
+
|
247
|
+
(wk = function(){
|
248
|
+
for (i = 0; (i < tmp.length) && (0 < ct); i++) {
|
249
|
+
if (!(tmp[i].complete || tmp[i].$ok)) {
|
250
|
+
ct--;
|
251
|
+
setTimeout(wk, (-1 == no) ? 200 : 100);
|
252
|
+
return;
|
253
|
+
}
|
254
|
+
}
|
255
|
+
setTimeout(func, 1);
|
256
|
+
})();
|
257
|
+
}
|
258
|
+
|
259
|
+
function applySet(index)
|
260
|
+
{
|
261
|
+
syncImg(-1, index, function(){
|
262
|
+
var i, wk, rv;
|
263
|
+
|
264
|
+
effuse = 0;
|
265
|
+
for (i = 0; i < pnls.length; i++) {
|
266
|
+
wk = pnls[i];
|
267
|
+
rv = wk.getset(index);
|
268
|
+
|
269
|
+
wk.visible(rv.v);
|
270
|
+
wk.opacity(rv.o);
|
271
|
+
wk.change(rv.n);
|
272
|
+
}
|
273
|
+
effuse = 1;
|
274
|
+
});
|
275
|
+
}
|
276
|
+
|
277
|
+
/*
|
278
|
+
* パネル制御処理
|
279
|
+
* setTimeout(,1) はIEの表示乱れ防止のため使用
|
280
|
+
*/
|
281
|
+
var panel = new function() {
|
282
|
+
var PREF_CHK = "chk";
|
283
|
+
var PREF_CHG = "chg";
|
284
|
+
var PREF_NAME = "name";
|
285
|
+
var curNo = -1, op;
|
286
|
+
|
287
|
+
function focus(mode) {
|
288
|
+
var wk = $(PREF_NAME + curNo).style;
|
289
|
+
wk.color = maid.color[(mode) ? 0 : 2];
|
290
|
+
wk.backgroundColor = maid.color[(mode) ? 1 : 3];
|
291
|
+
}
|
292
|
+
|
293
|
+
this.param = function(arg) {
|
294
|
+
this.ctrl = arg.ctrl1 || 3;
|
295
|
+
this.name = arg.name1;
|
296
|
+
};
|
297
|
+
|
298
|
+
this.init = function() {
|
299
|
+
var i, j, wk, bf, dsp;
|
300
|
+
|
301
|
+
bf = '<table>\n';
|
302
|
+
for (i = 0; i < pnls.length; i++) {
|
303
|
+
dsp = (pnls[i].ctrl & 2) ? '' : ' style="display:none"';
|
304
|
+
|
305
|
+
bf += '<tr' + dsp + '><td><input type="checkbox" id="' + PREF_CHK + i +
|
306
|
+
'" onclick="panel.checkItem(' + i +
|
307
|
+
',this.checked)"' + ((pnls[i].ctrl & 1) ? '' : ' disabled') +
|
308
|
+
'></td><td class="name" id="' + PREF_NAME + i +
|
309
|
+
'" onmousedown="panel.selectItem(' + i +
|
310
|
+
')">' + (pnls[i].name || i) + '</td></tr>\n';
|
311
|
+
|
312
|
+
if ((wk = pnls[i].item).length) {
|
313
|
+
bf += '<tr class="chg"' + dsp + '><td> </td><td>\n';
|
314
|
+
|
315
|
+
for (j = 0; j < wk.length; j++) {
|
316
|
+
bf += ' <input type="radio" name="' + PREF_CHG + i +
|
317
|
+
'" id="' + (PREF_CHG + i + '-' + j) +
|
318
|
+
'" onclick="panel.changeItem(' + i + ',' + j +
|
319
|
+
')"><label for="' + (PREF_CHG + i + '-' + j) +
|
320
|
+
'">' + (wk[j].name1 || (i + '-' + j)) + '</label><br>\n';
|
321
|
+
}
|
322
|
+
|
323
|
+
bf += '</td></tr>\n';
|
324
|
+
}
|
325
|
+
}
|
326
|
+
|
327
|
+
bf += '</table>\n';
|
328
|
+
$("itemlist").innerHTML = bf;
|
329
|
+
|
330
|
+
for (i = 0; (wk = (i < pnls.length)) && !(pnls[i].ctrl & 2); i++);
|
331
|
+
curNo = (wk) ? i : 0;
|
332
|
+
focus(1);
|
333
|
+
|
334
|
+
op = $("oplist");
|
335
|
+
this.changeSet(0);
|
336
|
+
};
|
337
|
+
|
338
|
+
this.checkItem = function(no, mode) {
|
339
|
+
pnls[no].visible(mode);
|
340
|
+
};
|
341
|
+
|
342
|
+
this.selectItem = function(no) {
|
343
|
+
var ctrl = !!(pnls[no].ctrl & 1);
|
344
|
+
|
345
|
+
focus(0);
|
346
|
+
curNo = no;
|
347
|
+
focus(1);
|
348
|
+
|
349
|
+
if (ctrl) {
|
350
|
+
$(PREF_CHK + no).checked = true;
|
351
|
+
pnls[no].visible(true);
|
352
|
+
}
|
353
|
+
op.disabled = !ctrl;
|
354
|
+
op.selectedIndex = pnls[no].opIndex;
|
355
|
+
};
|
356
|
+
|
357
|
+
this.changeItem = function(no, index) {
|
358
|
+
syncImg(no, index, function(){
|
359
|
+
if (no != curNo) panel.selectItem(no);
|
360
|
+
pnls[no].change(index);
|
361
|
+
});
|
362
|
+
};
|
363
|
+
|
364
|
+
this.changeOp = function(index) {
|
365
|
+
if (-1 == curNo) return;
|
366
|
+
setTimeout(function(){ pnls[curNo].opacity(index); }, 1);
|
367
|
+
};
|
368
|
+
|
369
|
+
this.changeSet = function(index) {
|
370
|
+
var i, wk, rv;
|
371
|
+
|
372
|
+
if (-1 == curNo) return;
|
373
|
+
op.disabled = !(pnls[curNo].ctrl & 1);
|
374
|
+
op.selectedIndex = pnls[curNo].getset(index).o;
|
375
|
+
|
376
|
+
for (i = 0; i < pnls.length; i++) {
|
377
|
+
wk = pnls[i];
|
378
|
+
rv = wk.getset(index);
|
379
|
+
|
380
|
+
if (wk.item.length) $(PREF_CHG + i + '-' + rv.n).checked = true;
|
381
|
+
$(PREF_CHK + i).checked = rv.v;
|
382
|
+
}
|
383
|
+
|
384
|
+
applySet(index);
|
385
|
+
};
|
386
|
+
};
|
387
|
+
|
388
|
+
var changeOp = panel.changeOp;
|
389
|
+
var changeSet = panel.changeSet;
|
390
|
+
|
391
|
+
```
|
392
|
+
|
393
|
+
HTMLとCSSの知識は、コードを調べながら簡単なホームページを作れる程度です。
|
394
|
+
|
14
395
|
どうかよろしくお願いいたします。
|