プログラマでありたい

おっさんになっても、プログラマでありつづけたい

リンクのマウスオーバーでサムネイムのポップアップ


 時差ぼけで眠れないので、Zimbraの様にaタグのリンク先をポップアップでサムネイル表示するのを実装してみようと思いました。ZimbraのAjaxライブラリを調べようかと思った矢先、既に実装されている方がいました。素晴らしい
memo.xight.org リンクをマウスオーバーでサムネイルをポップアップ

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">

    <script type="text/javascript">
    //<![CDATA[
    function linkthumb(){
    	var nophoto = 'http://img.simpleapi.net/img/nophoto.gif';
    	var img = document.createElement('img');
      var exemption = "^http://www\.example\.org/path/to/dir/"; //write regexp petern
    	img.src = nophoto;
    	img.onmouseout = function(){
    		img.src=nophoto;
    		img.style.display='none';
    	};
    	img.style.position = 'absolute';
    	img.style.cursor   = 'pointer';
    	img.style.display  = 'none';
    	document.body.appendChild(img);
    	var d = document.getElementsByTagName('div');
    	for (var j = 0 ; j < d.length ; j++){
    		if (d[j].className != 'thumb') continue;
    		var a = d[j].getElementsByTagName('a');
    		for (var i = 0 ; i < a.length ; i++){
    			if (!a[i].href.match(/^http:/)) continue;
    			if (a[i].href.match(exemption)) continue;
    			a[i].onmouseover=function(e){
    				var link  = this.href;
    				var thumb = 'http://img.simpleapi.net/small/'+link;
    				img.onmouseover=function(){
    					img.src=thumb;
    					img.style.display='block';
    				};
    				img.onclick = function(){
    					location.href=link;
    				};
    				if(document.all){
    					img.style.left = document.documentElement.scrollLeft + event.x + "px";
    					img.style.top  = document.documentElement.scrollTop  + event.y + "px";
    				}else{
    					img.style.left = e.pageX + "px";
    					img.style.top  = e.pageY + "px";
    				}
    				img.src = thumb;
    				img.style.display = 'block';
    			};
    			a[i].onmouseout = img.onmouseout;
    		}
    	}
    }
    if(window.addEventListener){
    	window.addEventListener('load',linkthumb,false);
    } else if(window.attachEvent){
    	window.attachEvent('onload',linkthumb);
    } else {
    	window.onload=linkthumb;
    }

    //]]>
    </script>
  </head>

  <body onload="linkthumb()">
  <div class="thumb">
      <a href="http://www.yahoo.co.jp" >yahoo!</a><br>
      <a href="http://www.example.org/path/to/dir/" >example サムネイル対象外</a>
  </div>
  </body>
</html>
<div class="thumb">
</div>

 divクラス内で記述しているaタグリンクについて、ポップアップされます。ブログで利用する場合は、JavaScriptの部分だけ切り出してロードしておけば利用できます。また

d[j].className != 'thumb'

のthumbをblogに変更すれば、ほとんどのブログサイトで意識せず利用できると思います。
onmouseoutの処理の違いのせいか、FireFoxでマウスのポインタを外しても画像が出たままになります。今後の改善ポイントですかね。