同ページ内にある全てのリンクを対象に行う [デモ ]
同じページ内にある全てのリンクを対象にランダムリンクを行います。
同じページ内にあるリンクを自動検出してランダムリンクを行うため、
いちいち手動で登録する手間を省けます。
function randomlink(){...} の中身を次のように書き換えます。
function randomlink() {
if(document.links.length == 0) { alert("リンクが一つもありません。"); return; }
var onlyhttp = true ; // HTTPプロトコルの付いたリンク("http://")のみリンクを行う。true/false
var exclusivelink_count = 0;
var exclusivelink = new Array();
//排他するURLの登録。これらのURLを選択しないようにします。
exclusivelink[exclusivelink_count++] = "http://www.yahoo.co.jp/";
var loopcount = 0;
var flag = false;
var url = "";
while(!flag) {
var locflag = 0;
url = document.links[Math.floor(Math.random() * document.links.length)].href;
if(url.toLowerCase().indexOf("javascript:") != -1) { locflag++; }
if(onlyhttp) { if(url.toLowerCase().indexOf("http://")==-1) locflag++; }
for(i=0; i<exclusivelink.length; i++) {
if(url == exclusivelink[i]) { locflag++; }
}
if(locflag==0) { flag = true; }
if(++loopcount>100) { url = ""; flag = true; }
}
if(url != "") {
location.href = url;
} else {
alert("対象となるリンクが見つかりません。"); //エラー
}
}
このコードを上のソースに適用する。
特殊効果をつけてみる (+fadein) [デモ ]
ランダムリンクの際フェードインの効果をつけます。
スクリプトの中に以下のコードを追加します。
function fadeinGetColor(scol, fcol, steps, count) {
scol = (scol.charAt(0)=="#") ? scol.substring(1, scol.length) : scol;
fcol = (fcol.charAt(0)=="#") ? fcol.substring(1, fcol.length) : fcol;
var scol_red = parseInt(scol.substring(0,2), 16);
var scol_green= parseInt(scol.substring(2,4), 16);
var scol_blue = parseInt(scol.substring(4,6), 16);
var fcol_red = parseInt(fcol.substring(0,2), 16);
var fcol_green= parseInt(fcol.substring(2,4), 16);
var fcol_blue = parseInt(fcol.substring(4,6), 16);
var new_red = Math.round(((fcol_red - scol_red) / steps) * count) + scol_red;
var new_green = Math.round(((fcol_green- scol_green)/ steps) * count) + scol_green;
var new_blue = Math.round(((fcol_blue - scol_blue) / steps) * count) + scol_blue;
new_red = (new_red.toString(16).length==1) ? "0"+new_red.toString(16) : new_red.toString(16);
new_green= (new_green.toString(16).length==1) ? "0"+new_green.toString(16) : new_green.toString(16);
new_blue = (new_blue.toString(16).length==1) ? "0"+new_blue.toString(16) : new_blue.toString(16);
return "#"+ new_red+new_green+new_blue;
}
function fadein(scol, fcol, steps, time, func, count) {
if(navigator.appName=="Netscape" && !document.images) { return; }
if(!count) { count = 0; }
if(!time) { time = 30; }
if(!func) { func = ""; }
document.bgColor = fadeinGetColor(scol, fcol, steps, count);
if(++count <= steps) {
setTimeout("fadein('" +scol+ "','" +fcol+ "'," +steps+ "," +time+ ",\"" +func+ "\"," +count+ ")", time);
} else { if(func) eval(func); }
}
呼び出しのボタンを以下のように書き換えます。
<form method="post">
<input type=button onClick="fadein('#ffffff','#ff0000', 30, 30, 'randomlink()');" value="ランダムにリンクします。"> (ボタンに反応)
</form><br>
このコードを上のソースに適用する。