大量の文章を一文字ずつ表示したいのですが

[上に] [前に] [次に]
パル [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
あれから、コードの問題個所を色々修正して、一応文章を表示する
所までは来たのですが、問題が出てきました。

一文字ずつ表示をしたいのですが、表示が追いつかず?に
文字が一気に全部表示されてしまいます。

一文字ずつ表示したいのですがどうしたら良いのでしょうか?
上手く表示させるための処理などは無いのでしょうか?教えて下さい。

hash 2000/01/27(木) 10:51:14
もし、まだタイマーを使って処理していないなら
このへんを参考にしては?
http://www.tohoho-web.com/wwwjssm2.htm#RealTimer

パル [E-Mail] [HomePage] 2000/01/27(木) 22:53:08
hash様、ありがとうございました。
すべてイメージ通りに表示できるようになりました!!!(大感謝)

ただ、まだ問題があります(まだですか・・・・・・)
IEは、完璧に表示する事が可能なのですが、NNで実行すると
まったく上手く動作しません?
これは何故何でしょうか?

ソースを書いても分かりにくいだけなんで、HPにアップしました。
画像などは、昔描いた落書きなんで気にしないで下さい(笑)

それと、白いラインが出たりしますが、それは透視化していない
画像があるためです(^^;;;
処理適には、NN4.0以上IE3.0以上での動作を目指したつもりなのですが
どうだろう?

テストプレイする時は、完全にロードされたか確認してから
NEXTを押して下さい。
ソースが完璧じゃないので、ロード中でも次の文章の表示処理
をしにいってしまいます(^^;;;・・・・

hash 2000/01/28(金) 10:42:43
このへんの問題かもしれません。
http://www.tohoho-web.com/lng/199802/98022201.htm
僕も前にこんなかんじで直った記憶があります。

パル [E-Mail] 2000/01/28(金) 21:08:30
[[解決]]
hashさん、ありがとうございました。
close()を使って、何とかNN系でも文字の表示をする事が出来ました。
ただ、一文字ずつにclose()は使えないので、表示処理した後に
close()を使うようにしたら、間を置いてから一気に文章を表示する
使用になってしまいました。

まぁ、これはNN系の仕様という事と思いあきらめました(^^;;;・・・・
このままだとレスポンスが相当悪いので、NN用にコードを書き換える
事にしました。

まだ画像表示に問題がありますが(原因は分かった)
このトピの元々の質問の謎が解けたので、これで終了します。
ありがとうございました。(^^)

[上に] [前に] [次に]