Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。
サムネールからオリジナル画像を参照する方法は幾つかあって、今のところ流行ってるのがLightbox。ただ、Lightboxは確かにクールなんだけど、演出過多ってことで飽きて嫌になる人もいる。とゆ~声が職場であったので、作ってみたのがコレ。
今回はオブジェクト指向をちょこっと取り込んでみました。ほんとにちょこっとだけですけどね。ソースの参照と解説は、以下から。
HTML
<p class="thumbOri">
<a href="./M1.jpg"><img src="./S1.jpg" alt="画像1"></a>
<a href="./M2.jpg"><img src="./S2.jpg" alt="画像2"></a>
<a href="./M3.jpg"><img src="./S3.jpg" alt="画像3"></a>
</p>
Script
window.onload = getSrc;
function getSrc() {
if (!document.getElementsByTagName){ return; }
x = document.getElementsByTagName('a');
for(i=0;i<x.length;i++)
{
if (x[i].parentNode.getAttribute('className') == 'thumbOri' || x[i].parentNode.getAttribute('class') == 'thumbOri')
{
preLoadImg(x[i].href);
x[i].onclick = function() { return thumbOri(this, this.href) };
x[i].onkeypress = function() { return thumbOri(this, this.href) };
}
}
}
Sig.の中では既に定番となっている、onloadイベント組み込み部分。ページ中の<a>タグを探し、親ノードの属性に「class=“thumbOri”」があれば、preLoadImg関数を起動。そしてthumbOri関数をonclickイベントに設定しています。
function thumbOri(self,imgSrc) {
var already = document.getElementById("originalImg");
var sameImg;
if(already)
{
imgContainer.removeChild(already);
sameImg = already.src;
if(sameImg == imgSrc) return false;
}
insertImg = new Image();
insertImg.src = imgSrc;
insertImg.id = 'originalImg';
insertImg.onclick = function () { imgContainer.removeChild(this); }
insertImg.style.display = 'block';
insertImg.style.cursor = 'pointer';
insertImg.style.padding = '5px 0 0 0 ';
insertImg.style.cursor = 'pointer ';
imgContainer = self.parentNode;
imgContainer.appendChild(insertImg);
return false;
}
Thumbnail to Origineスクリプト。略してサムオリ(ぁ
ここで書いていることは、3つ。サムネール・クリックでオリジナル画像を展開する。同じサムネールを再びクリックすると、オリジナル画像が消える。オリジナル画像をクリックしても、消える。
function preLoadImg(href) {
img = new Image();
img.src = href;
return img;
}
事前に画像を読み込んでおく、プリロードイメージ部分。これに関しては、特に言うことはないかな。
Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。