指定Nodeの背景にlinear-gradientを利用した半透明なimage要素を被せて、擬似的な透明度表現をする。
background要素には透過プロパティは無いため、実際に透過させている訳ではなく、linear-gradientで生成した半透明なimage要素を最前面に被せて擬似的に透過しているような表現をしているだけなので理解して使用すること。
linear-gradientの生成の際に設定される色は、親Nodeを遡って設定されているbackground-colorを取得している。
対象Nodeの背景のみを、指定した透明度に設定するサンプル。
HTML :
<div id="sample1">
コンテンツの文字列
</div>
Sass :
#sample1 {
background:
url(cmn_bg_text.svg) no-repeat left 120px bottom 40px,
url(cmn_bg_circle.svg) no-repeat right 110px top 30px,
url(cmn_bg_2b.png) center center;
background-size:
160px auto,
180px auto,
80px auto;
}
Javascript :
$imgBgAlpha($id('sample1'),'70%');
$imgBgAlpha('sample1','40%');
$imgBgAlpha('sample1','8%');
$imgBgAlpha($id('sample1'),'100%');
この関数を応用して、指定Nodeの背景のみを透明にするアニメーション。
コンテンツの本文コンテンツの本文コンテンツの本文コンテンツの本文コンテンツの本文コンテンツの本文コンテンツの本文コンテンツの本文コンテンツの本文。
HTML :
<div id="sample2">
<div id="sample2body">
<h6>コンテンツの文字列</h6>
<p>コンテンツの本文コンテンツの本文コンテンツの本文‥‥‥コンテンツの本文。</p>
</div>
</div>
Sass :
#sample2 {
background: #c6dbde;
#sample2body {
backgrund:
linear-gradient(to top, rgba(229,238,241,0.95), rgba(229,238,241,0)),
url(cmn_pht_5.png) no-repeat center bottom;
background-size:
cover,
cover;
}
}
Javascript :
var sample2_alpha=100;
function sample2out() { //フェイドアウト 100% → 0%
if(sample2_alpha>0) {
sample2_alpha=$numFitRange(sample2_alpha-8);
$imgBgAlpha($id('sample2body'),sample2_alpha+'%');
setTimeout(sample2out,40);
}
}
function sample2in() { //フェイドイン 0% → 100%
if(sample2_alpha<100) {
sample2_alpha=$numFitRange(sample2_alpha+15);
$imgBgAlpha($id('sample2body'),sample2_alpha+'%');
setTimeout(sample2in,40);
}
}
function sample2half() { //50%へフェイド → 50%
if(sample2_alpha>50) {
sample2_alpha=$numFitRange(sample2_alpha-8,50,100);
$imgBgAlpha($id('sample2body'),sample2_alpha+'%');
setTimeout(sample2half,40);
} else if(sample2_alpha<50) {
sample2_alpha=$numFitRange(sample2_alpha+8,0,50);
$imgBgAlpha($id('sample2body'),sample2_alpha+'%');
setTimeout(sample2half,40);
}
}