GHWEB06.GRASSHOPPER

jQuery+CSSで可変メニューの作成

  • Category:Web関連
  • Web関連の備忘録

kahenjQueryとCSSを使って可変メニューを作成してみました。ウィンドウのサイズが670pxより小さい時は、クリックで表示するプルダウンメニューに、ウィンドウのサイズが670pxより大きい場合は横並びのメニューになります。JavaScriptがオフの場合、プルダウンメニューはせずにメニューは最初から表示されます。

スクリプトとサンプル①

jQueryは、Google Hosted Libraries の バージョン1.11.1 を使用。★バージョン2.1.1でも動作確認。

$(function(){
$("#nav ul").prepend("<li class=\"navi\"><a href=\"#\">メニューを選択</a></li>");
$("#nav li:first").click(function(){
$("#nav li:first").siblings().slideToggle("fast"); 
});
function kahen(){
var haba = $(window).width();
if (haba < 670){
$("#nav li").hide();
$("#nav li:first").show();
}
else{
$("#nav li").show();
$("#nav li:first").hide();
}
}
$(window).on("load", function() {
kahen()
});
$(window).resize(function(){
kahen()
});
});

サンプル①

スクリプトの処理内容①

$(function(){
/* コンテンツを #nav ul の先頭に挿入する。*/
$("#nav ul").prepend("<li class=\"navi\"><a href=\"#\">メニューを選択</a></li>");

/* #nav li:first がクリックされた際の処理 */
$("#nav li:first").click(function(){

/* #nav li:first 要素以外を slideToggle */
$("#nav li:first").siblings().slideToggle("fast"); 
});

function kahen(){

/* ページ表示領域(横幅)をピクセル単位で取得して変数 haba に代入 */
var haba = $(window).width();
 
/* 変数 haba が 670より小さい場合、以下の処理 */
if (haba < 670){
 
/* #nav li を非表示 */
$("#nav li").hide();
 
/* #nav li:first を表示 */
$("#nav li:first").show();
 
/* 変数 haba が 670より大きい場合、以下の処理 */
} else {

/* #nav li を表示 */
$("#nav li").show();

/* #nav li:first を非表示 */
$("#nav li:first").hide();
}
}

/* ウィンドウが読み込まれた時、kahen() を実行  */
$(window).on("load", function() {
  kahen()
});

/* ウィンドウの大きさが変更された時、kahen() を実行  */
$(window).resize(function(){
  kahen()
});
});

追記:スクリプトとサンプル②

上記①の使い辛い箇所を改良をしてみました。改良箇所は以下になります。
jQueryは、Google Hosted Libraries の バージョン2.1.1 を使用。※IE8非対応。

  1. 選択中のメニューの背景色を指定
  2. プルダウンメニューの項目を選択すると閉じるように変更
  3. プルダウンメニューのタイトル部分に選択中のメニュー名を表示
$(function(){
$("#nav ul").prepend("<li class=\"navitop\">ページ1を選択中</li>");
var nav = $("#nav li");
var navfst = $("#nav li:first");
nav.click(function(){
if ($(this).hasClass("navi")) {
navfst.siblings().slideToggle("fast");
}
if ($(this).hasClass("hit")) {
} else if ($(this).hasClass("navitop")){
} else {
nav.removeClass("hit");
$(this).addClass("hit");
navfst.text($(this).text()+"を選択中")}
});

function kahen(){
var haba = $(window).width();
if (haba < 670){
nav.hide().siblings().addClass("navi");
navfst.show();
}
else{
nav.show().siblings().removeClass("navi");
navfst.hide();
}
}
$(window).on("load", function() {
kahen()
});
$(window).resize(function(){
kahen()
});
});

サンプル②

  • 掲載: