会社のホームページリニューアルに伴い、コーディングをやる事になったのでここ2ヶ月くらいJavascriptをよくいじっている。
もっぱら'Prototype.jsライブラリ'に依存してはいるが、それでもいろいろと勉強になっている。
CSSの"background-image"をずらしながらマウスオーバーのちょっとしたアニメーションみたいなものを以前作っていたが、今回は画像を使わずに実装してみた。
画像を使わないと何がうれしいかっていうと、いろんな色で作れるという事だ。画像の場合はその都度画像から作成しなければならない。
ソースコードは以下のような感じ(要Prototype.js)
サンプルはこちら
var FancyMenu = Class.create({ initialize: function(parents, color) { this.elem = parents.down(); this.pos = parents.cumulativeScrollOffset(); this.dim = parents.getDimensions(); this.bg = new Element('div'); this.width = 0; this.bg.setStyle({ position: 'absolute', height: this.dim.height + 'px', backgroundColor: color }); parents.insert({top: this.bg}); this.cacheMove = this.move.bindAsEventListener(this); this.cacheMoveRelease = this.moveRelease.bindAsEventListener(this); this.elem.observe('mouseover', this.cacheMove); this.elem.observe('mouseout', function(event) {this.captured = false;}.bind(this)); }, move: function(event) { this.captured = true; if (this.timeId2) clearInterval(this.timeId2); var that = this; this.timeId = setInterval(function() { that.width += 2; that.bg.setStyle({width: that.width + 'px'}); if (!that.captured) { that.cacheMoveRelease(); } else if (that.width >= that.dim.width) { clearInterval(that.timeId); that.bg.setStyle({width: that.dim.width + 'px'}); that.elem.observe('mouseout', that.cacheMoveRelease); } }, 15); }, moveRelease: function(event) { if (this.timeId) clearInterval(this.timeId); this.elem.stopObserving('mouseout', this.cacheMoveRelease); var that = this; this.timeId2 = setInterval(function() { that.width -= 2; that.bg.setStyle({width: that.width + 'px'}); if (that.width <= 0) { clearInterval(that.timeId2); that.bg.setStyle({width: '0px'}); } }, 15); } });
カテゴリ:
トラックバック(0)
トラックバックURL: http://blog.beanz-net.jp/beanz_mtos/mt-tb.cgi/50
コメントする