質問編集履歴

1

試した事、コードの追記

2018/04/06 05:09

投稿

knl
knl

スコア7

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>&nbsp;</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
  どうかよろしくお願いいたします。