ぼくはまちちゃん!(Hatena)

  • ライブドアリーダーで読む → Subscribe with livedoor Reader
ぼくはまちちゃん!のRSSフィード

2012/08/20

ライブドアみたいにスクロールしたらサイドバーの広告を固定する

こんにちはこんにちは!!
夏ですね! 真夏ですね!!

ところで最近、ライブドアの一部の人気ブログで、サイドバーの挙動に「んん?」って思ったことありませんか!
…百聞は一見にしかずってことで、実際の例をみてみましょう!

※PC版のみです
ハムスター速報 (左のサイドバーを見ながら、下にスクロールしてください)
痛いニュース(ノ∀`) (右のサイドバーを見ながら、下にスクロールしてください)

ある程度スクロールすると、サイドバーの広告がぴたっと固定されますね!
これって流行りなんでしょうか…!

そんなわけで、もしかしたら同じことをやりたい人が他にもいるのかも?と思って、
コピペで使えるJavaScriptにしてみました!

↓ 動作サンプルです!

スクロールしたらサイドバーの広告を固定するスクリプトの動作サンプル

↓ コードはこれです! 適当にコピペしてブログに貼り付けてね!

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script type="text/javascript">
(function($) {
	$(document).ready(function() {
		/*
		Ads Sidewinder
		by Hamachiya2. http://d.hatena.ne.jp/Hamachiya2/20120820/adsense_sidewinder
		*/
		var main = $('#main'); // メインカラムのID
		var side = $('#side'); // サイドバーのID
		var wrapper = $('#ad1'); // 広告を包む要素のID

		var w = $(window);
		var wrapperHeight = wrapper.outerHeight();
		var wrapperTop = wrapper.offset().top;
		var sideLeft = side.offset().left;

		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() {
			sideHeight = side.outerHeight();
			mainHeight = main.outerHeight();
			mainAbs = main.offset().top + mainHeight;
			var winTop = w.scrollTop();
			winLeft = w.scrollLeft();
			var winHeight = w.height();
			var nf = (winTop > wrapperTop) && (mainHeight > sideHeight) ? true : false;
			pos = !nf ? 'static' : (winTop + wrapperHeight) > mainAbs ? 'absolute' : 'fixed';
			if (pos === 'fixed') {
				side.css({
					position: pos,
					top: '',
					bottom: winHeight - wrapperHeight,
					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
				});
			}
		};

		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);
</script>

ただし、この方法は、今のところライブドアの一部の特別な契約(?)をしているブログがやっているだけなので、
他の人がマネするとAdsenseポリシー違反になるかもしれません><
やるなら自己責任でね!

(普通の人がやってもokなのかどうかは、一応Googleに問い合わせ中です)


(追記)
と思ったら、さっそくGoogleから返事がきたので共有しますね!

大変恐れ入りますが、いかなる方法でもお客様が Google 広告の動作を変更することは許可しておりません。
スクロールしても広告が表示されるような設定はご遠慮くださいませ。
お問い合わせのウェブ サイトがプログラム ポリシーに違反している場合は、Google で該当のアカウントに対して所定の措置を取らせていただきます。

ざんねん…><

トラックバック - http://d.hatena.ne.jp/Hamachiya2/20120820/adsense_sidewinder