サムネイルをクリックしたら拡大画像が表示されるというJavascriptライブラリには有名な所で'Lightbox'や'highslide'がある。
それぞれのサイトではデモも見られるし、ダウンロードして自分で使う事も出来る。
http://highslide.com/
http://www.huddletogether.com/projects/lightbox2/#download
いろんなサイトでも紹介されている。
もっと簡単なのをちょっと自分でも書いてみた。(例によってPrototype.jsを使用)
var DropPhoto = Class.create({ initialize: function(elem) { this.elem = elem; var that = this; this.timeId this.elem.observe('click', function(event) { if ($('shadowWrapper')) that.fadeOut($('shadowWrapper')); var largeSrc = event.element().src.gsub('small', 'large'); var largeImage = new Image(); largeImage.src = largeSrc; Element.addClassName(largeImage, 'large'); largeImage.setStyle({display: 'none'}); $$('body')[0].insert(largeImage); var f = function() { var container = new ShadowApply(largeImage); container = container.shadowWrapper; largeImage.setStyle({display: 'block'}); if (that.timeId) clearInterval(that.timeId); var centerX = document.viewport.getWidth() / 2 - parseInt(container.getWidth()) / 2; var centerY = document.viewport.getHeight() / 2 + document.viewport.getScrollOffsets()[1] - container.getHeight() / 2; var vy = 10; var gravitation = 3; var bounce = -0.6; var currentTop = -parseInt(container.getHeight()) + document.viewport.getScrollOffsets()[1]; var prevTop; var counter; container.setStyle({ top: currentTop + 'px', left: centerX + 'px', cursor: 'move' }); that.timeId = setInterval(function() { prevTop = currentTop; vy += gravitation; currentTop += vy; if (currentTop > centerY) { currentTop = centerY; vy *= bounce; } if (prevTop == currentTop) counter++; else counter = 0; if (counter > 10) clearInterval(that.timeId); container.setStyle({top: currentTop + 'px'}); }, 15); that.dragDrop(container); }; if (largeImage.complete) f(); else largeImage.observe('load', function(event) {f()}); }); }, fadeOut: function(elem) { var opa = 100; var timeId = setInterval(function() { elem.setOpacity(opa / 100); opa -= 10; if (opa < 0) { elem.remove(); clearInterval(timeId); } }, 15); }, dragDrop: function(elem) { var that = this; elem.observe('mousedown', function(event) { if (that.timeId) clearInterval(that.timeId); event.stop(); var dx = parseInt(elem.getStyle('left')) - event.pointerX(); var dy = parseInt(elem.getStyle('top')) - event.pointerY(); elem.setOpacity(0.7); document.observe('mousemove', function(event) { event.stop(); elem.setStyle({ left: (event.pointerX() + dx) + 'px', top: (event.pointerY() + dy) + 'px' }); }); document.observe('mouseup', function(event) { document.stopObserving('mousemove'); elem.setOpacity(1); }) }); } });
下のサムネイルをクリックして確認が出来る(ただし、現時点では『閉じる』機能が無い)
カテゴリ:
トラックバック(0)
トラックバックURL: http://blog.beanz-net.jp/beanz_mtos/mt-tb.cgi/76
コメントする