大量の文章を一文字ずつ表示したいのですが
パル
[E-Mail]
2000/01/23(日) 21:52:19
JavaScriptで、フォームに一文字ずつ文字を出力したいのですが(ゲーム風に)
その方法自体は分かるのですが(ループとwrith()を使って)
なにぶん量が多いので効率の良い方法を探しています。(大体A4百数十枚)
理想は、TEXTファイルに書いた文章を読み込んで、書き出すという方法
が良いのですが、
読み込む方法が分かりません?(そもそも可能なのでしょうか?)
一度に表示する量は、A4・1~4枚分ぐらいになると思います。
あと、変数に入れれる文字数の制限はどれぐらいなのでしょうか?
やはり・・・・・
var a = 0
var S = "表示したい|文章。*"
"|"改行 "*"文章の終わりの目印です。
While (s != "*") {
if s.charAt(a) = "|" {
<BR>
else
document.write(s.charAt(a))
a += 1
}
}
と、書いていくしかないのでしょうか?
大変そうでちょっと(^^;;;・・・・
どうかよろしくお願いいたします。
パル
[E-Mail]
2000/01/24(月) 22:32:36
別のフレームに、隠しフィールドを作って
フィールドのValueに、表示したい文章を書く事にしました。
文章が大量にあるため、プログラム部分と文章部分のファイルを分けたかった
のですが、何とか解決できそうです?
(もっと効率の良い方法等があれば、御伝授願いますm(._.)m)
ただ、素朴な?疑問として、変数やValue等は、文字制限などはあるのでしょうか?
場合によっては、かなり大量の文章書くかもしれないので
エラーなどが起こるのではないかと少々心配です(^^;;;
最大どれぐらいの文章になるかは今の所分かりませんが、多い時は
数百文字(全角)になるかもしれません(^^;;
たびたびの質問申し訳ありません。
hash
[HomePage]
2000/01/25(火) 13:41:54
僕は変数に文章を代入する部分を外部ファイルにして
<SCRIPT SRC="xxx.js"></SCRIPT>
の形で使ってます。
40KBぐらいですが、メモリが足りない環境だとフリーズしてます・・
パル
[E-Mail]
2000/01/25(火) 18:42:33
>僕は変数に文章を代入する部分を外部ファイルにして
><SCRIPT SRC="xxx.js"></SCRIPT>
外部ファイルにして、変数に代入できるのですか(^^)よかった。
えと、具体的にどのように代入したら良いのでしょうか?
一寸分からなくて(ゴメンナサイ)
hash
2000/01/26(水) 04:58:26
s="ながーーーい文字列";
の一行のみのgaibu.jsというファイルをつくって使いたいhtmlファイルに
<script src="gaibu.js></script>
をいれとけば、その後のスクリプトでsが使えると思います。
よかったら参考にしてください↓
http://hp.vector.co.jp/authors/VA012485/
パル
[E-Mail]
2000/01/26(水) 16:11:37
hashさん、ありがとうございます!!
おかげさまで、外部ファイルを読み込む事が出来ました!!
このおかげで、無駄な処理やフレームを省く事が出来そうなので
嬉しいです。
ありがとうございました。
パル
[E-Mail]
2000/01/26(水) 16:27:27
一通りプログラムが完成したので、テストしようと思ったら物の見事に
動きません(苦笑)
コードを見たら、スペルミスなどが多々あったのでそれらを修正したのですが
それでも動きません・・・・・・
どのぶぶんが悪いのか(全部かも・・・・爆)自分ではまったく分からないので(お手上げ)
どうかチェックしてもらえないでしょうか?(長いですが・・・・)
よろしくお願いいたします。
f_cg_______CGを表示するフレーム
f_msg______文章を表示するフレーム
f_pro______変数代わりのフォームが置いてあるフレーム
f_serifu___隠しフォームに、表示したい文章が書いてあるフレーム
f_proのフォームの名前
pro_form_________フォーム名前
check_moziichi___調べている文字の位置(value使用・一行テキスト)
f_serifuのフォーム内容
serifu_form___
serifu________表示したい文章を入れてある隠しフォーム
どうかよろしくお願いします。(次にコードを書きます)
パル
[E-Mail]
2000/01/26(水) 16:28:35
<BODY>
<P>
<SCRIPT language="JavaScript">
alert("FFF");
cg_file = new Image;
ghost = new Image;
ghost_top = new Image;
ghost_sid = new Image;
ghost_put = new Image;
ghost.src = "../gdata/chala/ghost.GIF";
ghost_top.src = "../gdata/chala/ghost_top.GIF";
ghost_sid.src = "../gdata/chala/ghost_sid.GIF";
ghost_put.src = "../gdata/chala/ghost_put.GIF";
<!--
//現在位置の文字の摘出
//-->
function mozi_tori(ichi){
ichi += 1;
parent.f_pro.document.pro_form.check_moziichi.value = ichi;
return parent.f_serifu.document.serifu_form.serifu.value.charAt(ichi);
}
<!--
//調べたい文字の位置の取り出し
//-->
function mozi_ichi(){
var cc = parseInt(parent.f_pro.document.pro_form.check_moziichi.value);
return cc;
}
<!--
//表示している画像の切り替え
//-->
function cg_change(cc){
ss = mozi_tori(cc);
cg_file.src = "../gdata/chala/" + parent.f_serifu.document.serifu_form.serifu.value.substr(cc + 2,4) + ".GIF";
parent.f_cg.document.images[0].src = ghost_top.src;
switch (ss){
case "1":
parent.f_cg.document.images[1].src = cg_file.src;
parent.f_cg.document.images[2].src = ghost_put.src;
case "2":
parent.f_cg.document.images[1].src = ghost_sid.src;
parent.f_cg.document.images[2].src = cg_file.src;
case "3":
parent.f_cg.document.images[1].src = cg_file.src;
parent.f_cg.document.images[2].src = ghost_put.src;
}
parent.f_pro.document.pro_form.check_moziichi.value = cc + 3;
}
<!--
//文字の摘出
//-->
function serifu_hyouzi(){
alert("gogoggo");
var c = mozi_ichi; //位置
var s = ""; //文字
alert("gogoggo");
parent.f_msg.document.open();
while ( c != 0.5 ){
c = mozi_ichi;
s = mozi_tori(c);
switch (s){
case "|" : //特殊処理
c = mozi_ichi;
s = mozi_tori(c);
switch (s){
case "B": //改行処理
<br>;
case "C": //CG変更処理
cg_change(mozi_tori(c));
case "E"; //MSG一時停止
brerk;
case "Q"; //MSG終了処理
parent.f_pro.document.pro_form.check_moziichi.value = "1";
brerk;
}
case "\n" :
parent.f_pro.document.pro_form.check_moziichi.value = c + 1;
default:
parent.f_msg.document.write(s);
}
}
}
</SCRIPT>
</P>
<P><A href="javascript:serifu_hyouzi()">Next</A></P>
</BODY>
パル
2000/01/26(水) 18:16:03
申し訳ないです(^^;;・・・・・
エラー発生個所が分かったので、調べてみたら
全角スペースを使っている所がありました(爆)
調べてくれている人が居たら、本当にゴメンナサイですm(._.)m
色々調べてみても分からないはずでした(^^;;・・・・・・・・・
あと、スペルミスも若干あった・・・・breakがbrerkになってた・・・
まだ上手く動きませんが、とりあえず分からなくなった時
もう一度質問させて頂きます
お騒がせして、もう仕分けありませんでした。m(._.)m
パル
[E-Mail]
2000/01/26(水) 20:42:42
あれから、コードの問題個所を色々修正して、一応文章を表示する
所までは来たのですが、問題が出てきました。
一文字ずつ表示をしたいのですが、表示が追いつかず?に
文字が一気に全部表示されてしまいます。
一文字ずつ表示したいのですがどうしたら良いのでしょうか?
上手く表示させるための処理などは無いのでしょうか?教えて下さい。
パル
[E-Mail]
[HomePage]
2000/01/27(木) 22:53:08
hash様、ありがとうございました。
すべてイメージ通りに表示できるようになりました!!!(大感謝)
ただ、まだ問題があります(まだですか・・・・・・)
IEは、完璧に表示する事が可能なのですが、NNで実行すると
まったく上手く動作しません?
これは何故何でしょうか?
ソースを書いても分かりにくいだけなんで、HPにアップしました。
画像などは、昔描いた落書きなんで気にしないで下さい(笑)
それと、白いラインが出たりしますが、それは透視化していない
画像があるためです(^^;;;
処理適には、NN4.0以上IE3.0以上での動作を目指したつもりなのですが
どうだろう?
テストプレイする時は、完全にロードされたか確認してから
NEXTを押して下さい。
ソースが完璧じゃないので、ロード中でも次の文章の表示処理
をしにいってしまいます(^^;;;・・・・
パル
[E-Mail]
2000/01/28(金) 21:08:30
[[解決]]
hashさん、ありがとうございました。
close()を使って、何とかNN系でも文字の表示をする事が出来ました。
ただ、一文字ずつにclose()は使えないので、表示処理した後に
close()を使うようにしたら、間を置いてから一気に文章を表示する
使用になってしまいました。
まぁ、これはNN系の仕様という事と思いあきらめました(^^;;;・・・・
このままだとレスポンスが相当悪いので、NN用にコードを書き換える
事にしました。
まだ画像表示に問題がありますが(原因は分かった)
このトピの元々の質問の謎が解けたので、これで終了します。
ありがとうございました。(^^)