JavaScriptで流れる文字
ティッカー 流れる文字
つhttp://javascript123.seesaa.net/article/11068130 …
このサイトのJavaScriptを借りているんですが、
list[0]="Message1";
list[1]="Message2";
list[2]="Message3";
というように順番に表示されてしまいます。
これをランダムにしたいのですがJavaScriptについては素人なのでうまくいきません。
どのようにすればランダムな順番で表示されるようになるのでしょうか。
また、出来れば同じメッセージが続けて表示されないように工夫したいです。
たとえば、list[1]の後にはlist[1]以外のメッセージが流れるように。
No.2ベストアンサー
- 回答日時:
メッセージ(配列)から表示するものの選択を変数iで行なっており、次に表示するものはi++(1つ足す)となっているので、この部分をランダムになるようにすればよいですが、メッセージが3種類程度だとたいして変わりがないと思います。
//i++;
//if(i==list.length){i=0;}
if (list.length>1) {
j = i;
while (j==i) i = Math.random() * list.length | 0;
}
最初に表示するものもランダムにするのなら、初期設定のi=0の部分もランダムに。
…というわけで、こんな感じ?
(他の部分はそのままにしてあります。)
window.onload = scrMsg;
var cnt = 0;
var stpX = 10; //停止座標
var stpTime = 200; //停止時間
var posLeft = 600; //開始座標
//var i = 0; //配列変数
var i, j;
var list = new Array(); //配列 スクロールさせる文字列
list[0]="このスクリプトは、流れる文字,ティッカーを実行します。";
list[1]="文字のスクロールはMARQUEE を使うと簡単にできるのですが、動きがぎこちない??";
list[2]="このスクリプトでは,スムーズに流れる文字を実現しています。";
i = Math.random() * list.length | 0;
function scrMsg(){
document.getElementById('msgBx').innerHTML = msgTxt();
cnt++;
if(cnt > stpTime){
cnt = 0;
//i++;
//if(i==list.length){i=0;}
if (list.length>1) {
j = i;
while (j==i) i = Math.random() * list.length | 0;
}
}
setTimeout("scrMsg()",20);
}
function msgTxt() {
var drift = "";
var speed = 15; //テキストの流れる速さ
var posX = posLeft-cnt*speed; //テキストの X座標
if (posX < stpX){ posX = stpX;} //スクロール停止
{drift = '<div style="position:absolute;left:' + posX +'">' + list[i] + "</div>";
return drift;}
}
コピペして動かしてみると、願っていたとおりに動いてくれました!
ありがとうございました。
それと、メッセージの数は増やせるようなので10個ほどにしてあります。
たまに同じものが流れてくる程度ですので気になりませんでした。
No.3
- 回答日時:
No.1です。
よく見ると、
list.shuffle();のいれ場所間違えてました。
if(i==list.length){i=0;}に入れないとだめですね。
function scrMsg(){
document.getElementById('msgBx').innerHTML = msgTxt();
cnt++;
if(cnt > stpTime){
cnt = 0;
i++;
if(i==list.length){i=0;list.shuffle();}
}
setTimeout("scrMsg()",20);
}
それから、
drift = '<div style="position:absolute;left:' + posX +'px">' + list[i] + "</div>"
と単位 'px'も付けないと、IEじゃない人が不幸になります。
No.1
- 回答日時:
毎回にlistの配列をシャッフルしてやればよいと思う。
Array.prototype.shuffle = function() {
var i = this.length;
while(i){
var j = Math.floor(Math.random()*i);
var t = this[--i];
this[i] = this[j];
this[j] = t;
}
return this;
}
を定義しておけば、
list.shuffle()
で、シャッフルできます。
これを、function scrMsg()
の先頭にででも、いれとけばよし。
同じメッセージが続けて表示されないように工夫したいです。
=>それってランダムじゃなくなるんじゃ無い!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- JavaScript 空白で入力フォームのボタンをクリックしたら、ブラウザの上部からjavascriptで 表示されるアラ 1 2022/05/20 11:16
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
二次元配列を使って順位をだす...
-
undefinedを表示させない方法は...
-
javascript 変数名の連結をしたい
-
C#テキストボックスの文字を配...
-
textareaに入力されたデータを...
-
jspからjavascriptの変数引継ぎ
-
配列を作って総当たりで距離を...
-
javascriptで行を抽出したいです。
-
二次元配列の全要素の全要素を...
-
functionから別のfunctionを実...
-
google apps scriptの終了のさせ方
-
idを使わずにonclickで自身の要...
-
XMLHttpRequestでキャッシュを...
-
正規表現で半角数字1桁のみを全...
-
<a>タグのテキストを取得
-
クリックすると上に開くアコー...
-
ASP+アクセスでのSQLコメントに...
-
Boolean型配列中のTrueの有無を...
-
ActiveXobjectが作成できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
C#テキストボックスの文字を配...
-
React hooksが値を返して配列変...
-
オブジェクトから任意のプロパ...
-
javascript 変数名の連結をしたい
-
jspからjavascriptの変数引継ぎ
-
配列の1要素を代入した変数を使...
-
JavaScriptにおける[] とか :...
-
フォーム入力値の重複チェック
-
javascriptで行を抽出したいです。
-
undefinedを表示させない方法は...
-
javascriptで2つのArrayの...
-
WSH(Jscript)でファイル一覧
-
JavaScriptでの動的な多次元配...
-
Perlの配列をJavaScriptに渡せ...
-
[JS] setAttributeで保存される...
-
JSONデータを50音順でソートしたい
-
二次元配列の全要素の全要素を...
-
javascriptを用いて作成された...
-
バナーのランダム表示(複数、...
おすすめ情報