jQuery:ロールオーバー画像をクリックで固定させる
jQueryを使うとロールオーバーとかも楽に設定できるし、
先日のように、クリックで背景を変更することも可能だ。
今日はロールオーバー部分でクリックしたとき、
クリックした部分の画像は、ロールオーバー時のままにしておきたい、
そのままの状態にしておくようにするスクリプトにしてみた。
クリックで背景画像を入れ替える その2
先日の背景画像を入れ替えるで作ったのを改良してみた。
■スクリプト
(function($) { $(function() { $.ham.bglink(); $.ham.rollover(); }); $.ham = { 画像&背景切り替え部分 bglink: function(options) { var c = $.extend({ imgSelector: 'ul li a img', linkSelector: 'ul li a', bgSelecter: 'div#content', postfix: '_on', selectImg:'' }, options); //ノードの初期化 A $(c.imgSelector).each(function(){ this.imgSrc = $(this).attr('src'); this.onimgSrc = this.imgSrc.replace(/(\.gif|\.jpg|\.png)$/, c.postfix+"$1"); }); //ノードの初期化 B $(c.linkSelector).each(function(){ this.bgimgSrc = $(this).attr('href'); }); //画像置換 $(c.imgSelector).click(function(){ if (c.selectImg != '') { $('.selected').attr('src', c.selectImg); $('.selected').removeClass('selected'); }; $(this).attr('src',this.onimgSrc).addClass('selected'); c.selectImg = this.imgSrc; }); //背景画像置換 $(c.linkSelector).click(function(){ $(c.bgSelecter) .css("background-image","url("+this.bgimgSrc+")"); return false; }); }, //ロールオーバー部分 rollover: function(options){ var c = $.extend({ hoverSelector: 'ul li a img', notHoverSelector: 'ul li a img.selected', postfix: '_on' }, options); //ノードの初期化 $(c.hoverSelector).each(function(){ this.originalSrc = $(this).attr('src'); this.rolloverSrc = this.originalSrc.replace(/(\.gif|\.jpg|\.png)$/, c.postfix+"$1"); }); //ロールオーバー $(c.hoverSelector).hover(function(){ $(this).not('.selected').attr('src',this.rolloverSrc); },function(){ $(this).not('.selected').attr('src',this.originalSrc); }); } }; })(jQuery);
■ デモを見る
今回もプラグインの作り方で作ってみた。
ロールオーバー部分はyuga.jsとほぼ同じ作りです。
ソースだけを見るとなんともないのですけど、
実は結構作るのが大変だったりする。
クリックして画像をロールオーバー画像に変更するのは簡単だったのですが、
その後の処理を考えるのに苦労した。
単に技術がないだけなのですけどね・・・
その後の処理というのは、クリックして変更された画像を
他の画像がクリックされたときに元に戻すという処理。
クリックした箇所とかの変更などは、
thisを使って勘単に指定できるのですが、
そうじゃない部分はthisが使えないので、
それ用の指定が必要だったりする。
クリックした箇所にclassをつけるのはすぐに浮かんだのですが、
その後他の画像をクリックした時に
そのclassをつけた部分のurlを元に戻すのにどうするのか悩んだ。
最初はロールオーバー画像の_onになっている部分を削除しようとしたのですが、
それの指定の仕方がよくわからず断念。
結局クリックした部分の変更前のsrcを変数に格納しておいて、
他をクリックしたときに、まずその変数を変更後のsrcと入れ替えることにした。
そうすることで画像を元に戻すことに成功。
処理を考えるってのは結構大変かなとか思った。
・・・単に発想力がないのかもしれないですけどね。
とりあえず今回は完成ということで!