スクロールに合わせて、ヘッダー画像がぼやける効果を与えるスクリプト
スクロールに合わせてヘッダーの画像にブラー効果を掛けるスクリプト
どこかで、ヘッダー画像がスクロールに合わせてぼやけていく効果があるウェブサイトを見て。作ってみようと思っていたもので、今回作ってみました
CSSのfilterを使いますので、filterが使えるブラウザのみ対応となります。
解説
HTMLとCSSとjQueryを使って作っています
スクロールに合わせて、ボカシ効果が出るように jQuery でスクロールをトリガーにその都度現在のスクロール位置を取得して、そこからブラー効果をどの程度掛けるか調整しています。
ブラー効果は10段階で見えなくなるところで 10に達するようにします。
headerの高さの取得
jQueryで height() を使ってheaderの高さを取得します
var header = $(‘header’).height();
現在のスクロールトップの取得
現在どの程度スクロールされているかを取得します
var scrollnow = $(window).scrollTop();
ブラー効果の計算をする
計算式は適当にこのようにしました
var scrollblur = 10*scrollnow/header;
var blur = Math.floor(scrollblur);
ブラー効果の最大値を変更したい場合は 10のところを好きな数字にすればOKです。
整数になるように、Math.floor()で小数点は切り捨ててます
cssに反映する
最後に、計算した数値をCSSに反映させます
$(‘header’).css(‘-webkit-filter’,’blur(‘+blur+’px)’);
$(‘header’).css(‘filter’,’blur(‘+blur+’px)’);
プレフィックス付きのものと、そうでないもの両方作っておきます。
CSSのコード全体は参考程度にしてください。
javascriptのところで、指定するセレクタだけ変えればそれぞれに使えます。
コード全体
HTML
<body> <header></header> <div class="div"> <h2>1st</h2> </div> <div> <h2>2nd</h2> </div> </body>
javascript
<script> $(window).on('scroll load',function(e) { var header = $('header').height(); var scrollnow = $(window).scrollTop(); var scrollblur = (header+10*scrollnow)/header-1; var blur = Math.floor(scrollblur); $('h2').text( blur+'PX' ); $('header').css('-webkit-filter','blur('+blur+'px)'); $('header').css('filter','blur('+blur+'px)'); }); </script>
CSS(SCSS)
html,body { width: 100%; height: 100%; margin: 0; padding: 0; } header { position: relative; width: 100%; height: 100%; background: url(coffee-498806.jpg); background-position: center center; background-attachment: fixed; background-size: cover; filter: blur(0px); } div { position: relative; background: #a6d9ff; width: 100%; height: 100%; } .div { position: absolute; background: none; top: 0; left: 0; } h2 { font-family: impact; font-weight: normal; font-size: 10vw; text-align: center; color: #fff; position: absolute; width: 100%; top: 50%; left: 0; margin: 0; padding: 0; transform: translateY(-50%); text-shadow: 10px 10px 2px rgba(0, 0, 0, 0.37) ; }
COMMENT