html要素にオンマウスするとアニメーションつきで背景色を変更する処理、について質問です。
下記のソースは、オンマウスした要素のbackground-colorを取得し、配列color内のfromと一致すれば、
同じく配列colorのtoに変更するという処理です。このオンマウスし取得したときの色が透明(transparent)だと、
初回のみ色を変更してくれるのですが、再度オンマウスすると全く色が変更されないのです。
コンソールで再度オンマウスしたときに何色を取得しているのか見てみると、何故か変更後の色(to)であるrgb(0,102,51)を取得していたのです。しかし要素の背景色は、rgb(0,102,51)ではなく透明です。
色が変更されないのは、再度オンマウスすると透明時のみ"変更後"の色が取得されてしまい、
from内に一致する色がないからだと思うのです。なぜ、透明にすると"変更後"色が取得されてしまうのでしょうか。
javascript
1var animation_el = [ 2 '#gnavi li a', 3 '#language li a', 4 '.gnavi_contents p a', 5 '#katugyoArea p'//問題の透明部分 6 ]; 7 var colors = [ 8 {from: 'rgb(0, 153, 51)', to: 'rgb(0, 133, 44)'}, 9 {from: 'rgb(230, 230, 230)', to: 'rgb(191, 191, 191)'}, 10 //▼何故か、再度オンマウスすると色が変更してくれない。最初にオンマウスした際に取得した色は、透明(transparent)なのだが、何故か再度取得すると変更後の色(to)であるrgb0,102,51が取得できてしまうのだ。 11 {from: 'transparent', to: 'rgb(0, 102, 51)'}//fromが透明、toが濃い緑(#006633)。 12 ]; 13 var baseColor; 14 $.each(animation_el, function(index,value) { 15 $(value).on({ 16 'mouseenter':function() { 17 baseColor = $(this).css('background-color'); 18 console.log('初期背景色',baseColor); 19 for(var i = 0; i<colors.length; i++) { 20 if(colors[i].from == baseColor) { 21 $(this).animate({'background-color': colors[i].to}, 400); 22 console.log('colors',colors[i].to) 23 break; 24 } 25 } 26 }, 27 'mouseleave':function() { 28 $(this).animate({'background-color': baseColor}, 400);//#006622 #093より濃い緑 29 } 30 });//on 31 });
html
1<section id="katugyoArea"> 2<h1>題名</h1> 3<img src="./image/.png" alt="円形の画像"> 4<p><span>ここに文字列</span></p> 5 6</section>
css
1#katugyoArea p { 2 height: 64px; 3 width: 420px; 4 font-weight: bold; 5 border: solid 5px #fff; 6 margin: 0 auto; 7 background: url(../image/yazirusi.png) no-repeat right; 8}
回答2件
あなたの回答
tips
プレビュー