【STINGER5】スクロールしたときスクロール広告が中途半端に固定される現象の解決方法

STINGER5 scroll 01 20141204 223833

WordPressテーマのSTINGER5は標準でサイドバーに「スクロール広告用」というウィジェットが用意されています。

ココに記載した要素は、ページをスクロールしても追従してきます。

私の環境ではこのスクロールが、どうしたものか変な動きをしてしまいます。その現象がコードのコピペで改善したので、ご紹介します。

スクロール広告の不具合

一応、スクロールした時に追従はしてくれるのですが、追従開始位置が毎回変化してウィジェットの頭からちゃんと追従してくれる時もあれば、ウィジェットの頭から大分ズレたところから追従開始したりという感じでした。

コピペで解決!

困っときのGoogle先生。調べてみたらコチラのブログに行き着きました。

【Stinger5】スクロール広告がずれるのを改善しよう【プラグイン不要】

先ず、STINGER5テーマフォルダ内に「js」フォルダがあります。その中に「scroll.js」というファイルがあるので中身を全部消します。(バックアップは忘れずに!)

そこに下記のコードを全部コピペ

[php]
/*——————————–
広告のフロート
——————————-*/
(function(jquery) {
jquery(document).ready(function() {
/*
Ads Sidewinder
by Hamachiya2. http://d.hatena.ne.jp/Hamachiya2/20120820/adsense_sidewinder
*/
var main = jQuery(‘main’); // メインカラムのID
var side = jQuery(‘aside’); // サイドバーのID
var wrapper = jQuery(‘#scrollad’); // 広告を包む要素のID
if (main.length === 0 || side.length === 0 || wrapper.length === 0) {
return;
}
var w = $(window);
var sideTop = side.offset().top;
var sideLeft = side.offset().left;
var wrapperTop = wrapper.offset().top;
var wrapperOffset = sideTop – wrapperTop;
var sideMargin = {
top: side.css(‘margin-top’) ? side.css(‘margin-top’) : 0,
right: side.css(‘margin-right’) ? side.css(‘margin-right’) : 0,
bottom: side.css(‘margin-bottom’) ? side.css(‘margin-bottom’) : 0,
left: side.css(‘margin-left’) ? side.css(‘margin-left’) : 0
};
var winLeft;
var pos;
var scrollAdjust = function() {
mainHeight = main.outerHeight();
var sideHeight = side.outerHeight();
if(wrapperOffset != side.offset().top – wrapper.offset().top){
wrapperTop += (wrapper.offset().top – wrapperTop);
wrapperOffset = side.offset().top – wrapper.offset().top;
}
var wrapperHeight = sideHeight + wrapperOffset;
mainAbs = main.offset().top + mainHeight;
var winTop = w.scrollTop();
winLeft = w.scrollLeft();
var nf = (winTop > wrapperTop) && (mainHeight > sideHeight) ? true : false;
pos = !nf ? ‘static’ : (winTop + wrapperHeight) > mainAbs ? ‘absolute’ : ‘fixed’;
if (pos === ‘fixed’) {
side.css({
position: pos,
top: wrapperOffset,
bottom: ”,
left: sideLeft – winLeft,
margin: 0
});
} else if (pos === ‘absolute’) {
side.css({
position: pos,
top: mainAbs – sideHeight,
bottom: ”,
left: sideLeft,
margin: 0
});
} else {
side.css({
position: pos,
marginTop: sideMargin.top,
marginRight: sideMargin.right,
marginBottom: sideMargin.bottom,
marginLeft: sideMargin.left
});
wrapperTop = wrapper.offset().top;
}
};
var resizeAdjust = function() {
side.css({
position:’static’,
marginTop: sideMargin.top,
marginRight: sideMargin.right,
marginBottom: sideMargin.bottom,
marginLeft: sideMargin.left
});
sideLeft = side.offset().left;
winLeft = w.scrollLeft();
if (pos === ‘fixed’) {
side.css({
position: pos,
left: sideLeft – winLeft,
margin: 0
});
} else if (pos === ‘absolute’) {
side.css({
position: pos,
left: sideLeft,
margin: 0
});
}
};
w.on(‘load’, scrollAdjust);
w.on(‘scroll’, scrollAdjust);
w.on(‘resize’, resizeAdjust);
});
})(jQuery);
[/php]

以上。

動作を確認してみてください。私の場合はこれだけで改善されました。

まとめ

調べてみると、解決方法を書いてくれている方が居るってホントありがたい事です。同じ症状でお困りの方は、コピペするだけなのでお試しください。

コメント

タイトルとURLをコピーしました