JavaScriptは非常に多様な用途に使える言語ですが、今回はページ上部に固定バーを表示する方法を具体的に解説します。この手法は、ユーザビリティの向上や特定の情報を常に画面に表示させたい場合に役立ちます。例えば、ナビゲーションバーや重要な通知、広告エリアを固定して表示させたい場合に便利です。本記事では、CSSとJavaScriptを組み合わせて簡単に固定バーを作成し、ページのスクロールに対応する方法を説明します。
ページ上部に固定バーを表示するCSSの設定
固定バーを表示するには、まずHTML要素のレイアウトを整えるためのCSSを設定する必要があります。ここでは、固定バー(#topbar)のスタイルを定義し、ページ全体の基本的なレイアウトも合わせて説明します。
CSSコード例
<style type="text/css">
<!--
body{
margin:0;
padding:0;
}
h1{
font-size:16px;
font-weight:normal;
line-height:2.0em;
text-align:center;
padding:70px 0 15px 0;
}
p{
font-size:14px;
font-weight:normal;
text-align:center;
}
#idWrap{
width:700px;
height:4000px;
margin:0 auto;
text-align:left;
}
#topbar{
position:absolute;
border: 1px solid black;
padding: 5px;
width: 90%;
visibility: hidden;
z-index: 100;
text-align:center;
}
#topbar a{
color:#333;
text-decoration:underline;
}
-->
</style>
CSSコードでは、bodyの余白やパディングをリセットし、ページ全体のデザインが崩れないようにしています。また、#topbarに対しては、固定表示されるためのスタイルを指定しています。この例では、position:absolute;を使ってバーを画面上部に固定し、スクロールに対応するように調整しています。
JavaScriptを使ってページ上部に固定バーを表示する方法
次に、JavaScriptを使用してページ上部に固定バーを表示する方法を説明します。バーが常に画面上部に固定され、スクロールに連動して表示されるようにします。また、ユーザーが「閉じる」リンクをクリックすることで、バーを非表示にする機能も実装します。
JavaScriptコード例
<script type="text/javascript">
var persistclose=0
var startX = 50
var startY = 70
var verticalpos="fromtop"
function iecompattest(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}
function get_cookie(Name) {
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search)
if (offset != -1) {
offset += search.length
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
//固定バーを閉じる
function closebar(){
if (persistclose)
document.cookie="remainclosed=1"
document.getElementById("topbar").style.visibility="hidden"
}
function staticbar(){
barheight=document.getElementById("topbar").offsetHeight
var ns = (navigator.appName.indexOf("Netscape") != -1) || window.opera;
var d = document;
function ml(id){
var el=d.getElementById(id);
if (!persistclose || persistclose && get_cookie("remainclosed")=="")
el.style.visibility="visible"
if(d.layers)el.style=el;
el.sP=function(x,y){this.style.left=x+"px";this.style.top=y+"px";};
el.x = startX;
if (verticalpos=="fromtop")
el.y = startY;
else{
el.y = ns ? pageYOffset + innerHeight : iecompattest().scrollTop + iecompattest().clientHeight;
el.y -= startY;
}
return el;
}
window.stayTopLeft=function(){
if (verticalpos=="fromtop"){
var pY = ns ? pageYOffset : iecompattest().scrollTop;
ftlObj.y += (pY + startY - ftlObj.y)/8;
}
else{
var pY = ns ? pageYOffset + innerHeight - barheight: iecompattest().scrollTop + iecompattest().clientHeight - barheight;
ftlObj.y += (pY - startY - ftlObj.y)/8;
}
ftlObj.sP(ftlObj.x, ftlObj.y);
setTimeout("stayTopLeft()", 10);
}
ftlObj = ml("topbar");
stayTopLeft();
}
if (window.addEventListener)
window.addEventListener("load", staticbar, false)
else if (window.attachEvent)
window.attachEvent("onload", staticbar)
else if (document.getElementById)
window.onload=staticbar
</script>
このJavaScriptコードでは、staticbar関数が固定バーの動作を制御しています。stayTopLeft関数は、ページがスクロールされるたびにバーの位置を調整し、常に画面の指定位置にバーが固定されるようにします。
また、closebar関数を使って、ユーザーが「閉じる」をクリックした際にバーを非表示にすることができます。この動作はクッキーを使用して記憶され、次回ページを再度読み込んでも、バーが表示されないように設定されます。
ページ上部に固定バーを表示するHTMLの記述
最後に、HTMLで固定バーを表示するエリアを設定します。以下のコード例では、
HTMLコード例
<div id="topbar">
固定バーエリアです。 <a href="" onClick="closebar(); return false">閉じる</a>
</div>
<div id="idWrap">
<br />
<br />
<h1>ページ上部に固定バーを常に表示します。下にスクロールしてみて下さい。<br />「閉じる」をクリックするとバーが消えます。</h1>
<p>jQueryは使用してません。</p>
</div><!--/idWrap-->
このHTMLコードでは、#topbarエリアに固定バーを表示しています。「閉じる」リンクがクリックされると、前述のJavaScriptのclosebar関数が呼び出され、バーが非表示になります。
ページ上部に固定バーを表示するデモページ
上記のコードを組み合わせると、実際に固定バーが表示されるページが完成します。以下のリンクからデモページを確認できます。
ソース元:Dynamic Drive DHTML scripts- Floating Top Bar script
ソース元:Dynamic Drive DHTML scripts- Floating Top Bar script
まとめ
今回紹介した方法を使えば、簡単にページ上部に固定バーを表示させることができます。固定バーは、ナビゲーションメニューや重要なメッセージの表示、広告エリアなどに活用できるため、ユーザビリティの向上や収益アップにもつながる可能性があります。
※流用される場合は自己責任でお願いします。
デモページheadタグ内のGoogleアナリティクスタグは流用しないで下さい。