10枚の画像を更新するごとに重複せず
ランダム(シャッフル)させるには
どうしたらいいですか?
理想は、JavaScriptは外部で読み込ませ、
そして下記のようにHTMLでリストを使い
ランダム表示させたいのですが・・・
<ul>
<li><a href="http://www.1/"><img src="s1.gif" /><br />あああ</a></li>
<li><a href="http://www.2/"><img src="s2.gif" /><br />いいい</a></li>
<li><a href="http://www.3/"><img src="s3.gif" /><br />ううう</a></li>
<li><a href="http://www.4/"><img src="s4.gif" /><br />えええ</a></li>
<li><a href="http://www.5/"><img src="s5.gif" /><br />おおお</a></li>
<li><a href="http://www.6/"><img src="s6.gif" /><br />かかか</a></li>
<li><a href="http://www.7/"><img src="s7.gif" /><br />ききき</a></li>
<li><a href="http://www.8/"><img src="s8.gif" /><br />くくく</a></li>
<li><a href="http://www.9/"><img src="s9.gif" /><br />けけけ</a></li>
<li><a href="http://www.0/"><img src="s0.gif" /><br />こここ</a></li>
</ul>
似たようなことをしているサイトがあったので
参考に貼り付けておきます。
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}// JavaScript Document
詳しい方いましたら教えて頂けませんか?
宜しくお願いします。
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
>babu_babooさん (#7)
ご指導ありがとうございます。
> Fisher-Yatesという、やつらしい。
ああ、これは配列のランダムソートで検索したときに見た名前です。
#6を書き換えると、こんな形かな。
<script type="text/javascript">
window./*@cc_on @if(@_jscript) attachEvent('on' + @else @*/addEventListener(/*@end @*/ 'load', function (evt) {
// Fisher-Yates
var list = [0,1,2,3,4,5,6,7,8,9],
i = list.length, j, tmp;
while (--i) {
j = Math.floor(Math.random() * (i + 1));
if (i == j) continue;
tmp = list[i];
list[i] = list[j];
list[j] = tmp;
}
// append Element-Node
for(var i=0,l=list.length,li,ul=document.createElement('ul'); i<l; i++){
li = document.createElement('li');
li.appendChild(document.createTextNode(list[i]));
ul.appendChild(li);
}
document.body.appendChild(ul);
},false);
</script>
> しつもんすう12にたいして、おれいすう0。
> さいしょからわかってたべぇ~~~?
プロフィールを見てませんでした…。
自分のことなら我慢できますが、他人のことは気になってしまう。
この性分何とかしないといけないですね。
No.7
- 回答日時:
いぜん、sortでしゃっふるしたら、してきされて・・・
Fisher-Yatesという、やつらしい。
でも、このあいだは、sort(~).sort(~)なんて、れんちゃんしたり
>どうかと思いますが
しつもんすう12にたいして、おれいすう0。
さいしょからわかってたべぇ~~~?
あっちをみているひとは、こっちもみてる。
なにはともあれ、どちらもが、じぶんのためになら!^^;
No.6
- 回答日時:
#2です。
babu_babooさんのコードも面白いですね。デクリメントはあまり使わないから勉強になります。
>更新ボタンを一回押しますと
>パッパッと二回ランダムしてしまいます・・
document.createElement() でノードを生成するとか。
<script type="text/javascript">
window./*@cc_on @if(@_jscript) attachEvent('on' + @else @*/addEventListener(/*@end @*/ 'load', function (evt) {
var ul = document.createElement('ul'), li = document.createElement('li');
for(var i=0,content=[0,1,2,3,4,5,6,7,8,9],l=content.length,li; i<l; i++){
li = document.createElement('li');
li.appendChild(document.createTextNode(content[i]));
ul.appendChild(li);
}
for(var i=0,l=ul.childNodes.length; i<l; i++){
ul.appendChild(ul.childNodes[Math.floor(Math.random() * l)]);
}
document.body.appendChild(ul);
},false);
</script>
# 後で気が付きましたが、マルチポスト、#1さんのコードをコピペして再質問、本質問のコードもコピペなようです。
# 個人的にはfujillinさんに断りなく転載して再質問するのはどうかと思いますが…。
Yahoo!知恵袋 - maclovedesu0204さんのMy知恵袋
http://my.chiebukuro.yahoo.co.jp/my/maclovedesu0 …
No.4
- 回答日時:
think49さんにちかいね。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Script-Type" content="application/javascript">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TEST</title>
</head>
<body>
<ul id="abc">
<li><a href="http://www.1/"><img src="s1.gif" /><br />あああ</a></li>
<li><a href="http://www.2/"><img src="s2.gif" /><br />いいい</a></li>
<li><a href="http://www.3/"><img src="s3.gif" /><br />ううう</a></li>
<li><a href="http://www.4/"><img src="s4.gif" /><br />えええ</a></li>
<li><a href="http://www.5/"><img src="s5.gif" /><br />おおお</a></li>
<li><a href="http://www.6/"><img src="s6.gif" /><br />かかか</a></li>
<li><a href="http://www.7/"><img src="s7.gif" /><br />ききき</a></li>
<li><a href="http://www.8/"><img src="s8.gif" /><br />くくく</a></li>
<li><a href="http://www.9/"><img src="s9.gif" /><br />けけけ</a></li>
<li><a href="http://www.0/"><img src="s0.gif" /><br />こここ</a></li>
</ul>
<script type="text/javascript"><!--
//@cc_on @if( @_jscript ) attachEvent( 'on' + @else@*/ addEventListener (/*@end@*/
'load', function ( evt ) {
var doc = evt.ownerDocument || document;
var p = doc.getElementById( 'abc' );
var c = p.childNodes;
var n = c.length;
while( n-- ) p.appendChild( c[ Math.random() * n | 0 ] );
}, false);
//ぜんかくくうはくは、はんかくにでもなおしてね。
//-->
</script>
</body>
</html>
No.3
- 回答日時:
#1です。
>更新ボタンを一回押しますと
>パッパッと二回ランダムしてしまいます・・
確認しましたが、そのような動作はしていないはずです。
想像するところ、ulより下にloadに時間がかかるものがあって、スクリプトが実行される前に、初期状態のリストが表示され、その後にランダムに表示し直されているとかではないでしょうか?
もしそうだとすると、
・最初にリストを非表示にしておいて、ランダム後に表示にする。
(スクリプトオフのユーザだと表示されないままになるけど)
・ul部分をロード直後に、スクリプトを直接実行させておく。
のどちらかでいけると思いますが…
そうでない場合は、原因がわからないので対処法も考えられません。
No.2
- 回答日時:
思いつきで作りましたが、それなりにシャッフルしてくれている感じ。
---
<script type="text/javascript">
window./*@cc_on @if(@_jscript) attachEvent('on' + @else @*/addEventListener(/*@end @*/ 'load', function (evt) {
var ul = document.getElementById('test'), li = ul.getElementsByTagName('li');
for(var i=0,l=li.length; i<l; i++){
ul.appendChild(li[Math.floor(Math.random() * l)]);
}
},false);
</script>
</head>
<body>
<ul id="test">
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
---
appendChild() でノード移動できる挙動を利用しました。
element.appendChild - MDC
https://developer.mozilla.org/ja/DOM/element.app …
No.1
- 回答日時:
やりたいことがよくわからないけど、特定のulの中のliの順序をランダムに入れ替えたいと解釈しました。
(liの内容は何でもよいので、↓では省略してあります)
<html>
<head>
<script type="text/javascript">
window.onload = function() {
var i, j, ln, tmp, e=[], ul = document.getElementById('test'), li = ul.getElementsByTagName('li');
for (i=0; li[i];) e[i] = li[i++];
ln = e.length;
for (i=0; i<ln; i++) {
var j = Math.floor(Math.random() * ln);
tmp = e[j], e[j] = e[i], e[i] = tmp;
}
for (i=0; i<ln; i++) ul.appendChild(e[i]);
}
</script>
</head>
<body>
<ul id="test">
<li>あああ</li>
<li>いいい</li>
<li>ううう</li>
<li>えええ</li>
<li>おおお</li>
</ul>
</body>
</html>
この回答への補足
ご回答ありがとうございます!!
初心者なので、すごく感謝・助かりました!
さっそく設置し、ランダムできたのですが、
更新ボタンを一回押しますと
パッパッと二回ランダムしてしまいます・・
どうしたら直りますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- PHP 共通の処理をまとめる方法がわからないのでアドバイスお願いします。 1 2022/12/19 20:20
- HTML・CSS htmlについて質問です! 写真のように写真の部分が?になってしまいます。 ファイルもしっかり選べて 1 2023/07/09 21:17
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS htmltとcssの連携をして画像縮小について 1 2022/11/15 20:32
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字と数字が混在する要素のsor...
-
ホームページビルダー15 メニュ...
-
プルダウンメニュー連動後の処...
-
jqueryアコーディオンのマウス...
-
JQueryで、liタグの背景に色を...
-
ツリーメニューについて
-
jqueryプルダウンメニュー個別着色
-
javascript テキストエリアを1...
-
MAX関数を使ってからLEFT JOIN...
-
htmlの記述で link rel=styles...
-
画像の上に画像リンクを貼る方法
-
スライダーを実装した場合、ペ...
-
背景色を一定時間ごとにランダ...
-
文字を固定したいのですが…
-
javascriptでURLにマウスオーバー
-
[急ぎ] videoタグで埋め込んだm...
-
離れた場所にマウスオーバーで...
-
c++std::string型をTCHARに変換...
-
タブで開いてさらにタブ内をア...
-
1行で左寄せと右寄せと中央揃え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
javascriptでEnterキーをtabキ...
-
クリックした<a>タグのみにClas...
-
チェックボックスに入っている...
-
【javascript で動的に a タグ...
-
jquery ドロップダウンメニュー...
-
「jQuery」アコーディオンメニ...
-
jQueryで、リンクURLの一致を確...
-
jQueryのeqで最後からn番目以降...
-
ネストされたチェックボックス...
-
javascriptで、クリックしたら...
-
onmouseoverの表示切り替えが上...
-
文字と数字が混在する要素のsor...
-
jQueryでネスト構造の<li>がク...
-
タブメニューを上下に設置
-
<li></li>の数を制限
-
jQuery多層式アコーディオンメ...
-
どの<li><a> が押されたか判別...
-
CSSとJavaScriptを使ってドロッ...
-
複数の画像をランダム(シャッ...
おすすめ情報