質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

0回答

1162閲覧

Drawer.jsをID等で振り分けて複数表示させたい。

Riko

総合スコア15

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/04/13 09:38

Drawer.jsを使って3カ所のリンクからそれぞれ別のものを表示させたいと思っています。
通常1つ表示させるものだとはわかっているのですが、3カ所でクリックさせてそれぞれ表示を切り替える方法を教えていただけないでしょうか?

ドロワーを1つ表示させる時のソースです。

js

1<script> 2$(function() { 3 $('.drawer').drawer(); 4 // .close-linkクリック時、ドロワーを閉じる 5 $('.close-link').click(function(){ 6 $('.drawer').drawer('close'); 7 }); 8}); 9</script>

html

1<body class="drawer drawer--left"> 2 3<button type="button" class="drawer-toggle drawer-hamburger"> 4<span class="sr-only">toggle navigation</span> 5<span class="drawer-hamburger-icon"></span> 6</button> 7 8<nav class="drawer-nav"> 9<ul class="drawer-menu"> 10<li class="mtitle">MENU01</li> 11<li><a class="close-link" href="/">表示させたいもの01</a></li> 12</ul> 13</nav>

以下実装したいソースです。
変更の仕方で思い浮かぶのが、<button>にIDを追加して、表示する方にもIDを追加して対応させ内容を切り替えるという方法なのですが、
実装方法がわからず質問させていただきました。

そもそも見当違いな質問だったら申し訳ありません。
その際には他の方法があればどうかご教授お願いいたします。どうぞよろしくお願いいたします。

html

1<body class="drawer drawer--left"> 2<!-- buttonを3つ --> 3<button type="button" id="cont01" class="drawer-toggle drawer-hamburger"> 4<span class="sr-only">toggle navigation</span> 5<span class="drawer-hamburger-icon"></span> 6</button> 7<button type="button" id="cont02" class="drawer-toggle drawer-hamburger"> 8<span class="sr-only">toggle navigation</span> 9<span class="drawer-hamburger-icon"></span> 10</button> 11<button type="button" id="cont03" class="drawer-toggle drawer-hamburger"> 12<span class="sr-only">toggle navigation</span> 13<span class="drawer-hamburger-icon"></span> 14</button> 15 16<nav class="drawer-nav"> 17<!-- ulを3つ --> 18<ul id="cont01" class="drawer-menu"> 19<li class="mtitle">MENU01</li> 20<li><a class="close-link" href="/">表示させたいもの01</a></li> 21</ul> 22<ul id="cont02" class="drawer-menu"> 23<li class="mtitle">MENU02</li> 24<li><a class="close-link" href="/">表示させたいもの02</a></li> 25</ul> 26<ul id="cont03" class="drawer-menu"> 27<li class="mtitle">MENU03</li> 28<li><a class="close-link" href="/">表示させたいもの03</a></li> 29</ul> 30</nav>

JSの本体

js

1/*! 2 * jquery-drawer v3.2.2 3 * Flexible drawer menu using jQuery, iScroll and CSS. 4 * http://git.blivesta.com/drawer 5 * License : MIT 6 * Author : blivesta <design@blivesta.com> (http://blivesta.com/) 7 */ 8 9;(function umd(factory) { 10 'use strict'; 11 if (typeof define === 'function' && define.amd) { 12 define(['jquery'], factory); 13 } else if (typeof exports === 'object') { 14 module.exports = factory(require('jquery')); 15 } else { 16 factory(jQuery); 17 } 18}(function Drawer($) { 19 'use strict'; 20 var namespace = 'drawer'; 21 var touches = typeof document.ontouchstart != 'undefined'; 22 var __ = { 23 init: function init(options) { 24 options = $.extend({ 25 iscroll: { 26 mouseWheel: true, 27 preventDefault: false 28 }, 29 showOverlay: true 30 }, options); 31 32 __.settings = { 33 state: false, 34 events: { 35 opened: 'drawer.opened', 36 closed: 'drawer.closed' 37 }, 38 dropdownEvents: { 39 opened: 'shown.bs.dropdown', 40 closed: 'hidden.bs.dropdown' 41 } 42 }; 43 44 __.settings.class = $.extend({ 45 nav: 'drawer-nav', 46 toggle: 'drawer-toggle', 47 overlay: 'drawer-overlay', 48 open: 'drawer-open', 49 close: 'drawer-close', 50 dropdown: 'drawer-dropdown' 51 }, options.class); 52 53 return this.each(function instantiateDrawer() { 54 var _this = this; 55 var $this = $(this); 56 var data = $this.data(namespace); 57 58 if (!data) { 59 options = $.extend({}, options); 60 $this.data(namespace, { options: options }); 61 62 __.refresh.call(_this); 63 64 if (options.showOverlay) { 65 __.addOverlay.call(_this); 66 } 67 68 $('.' + __.settings.class.toggle).on('click.' + namespace, function toggle() { 69 __.toggle.call(_this); 70 return _this.iScroll.refresh(); 71 }); 72 73 $(window).on('resize.' + namespace, function close() { 74 __.close.call(_this); 75 return _this.iScroll.refresh(); 76 }); 77 78 $('.' + __.settings.class.dropdown) 79 .on(__.settings.dropdownEvents.opened + ' ' + __.settings.dropdownEvents.closed, function onOpenedOrClosed() { 80 return _this.iScroll.refresh(); 81 }); 82 } 83 84 }); // end each 85 }, 86 87 refresh: function refresh() { 88 this.iScroll = new IScroll( 89 '.' + __.settings.class.nav, 90 $(this).data(namespace).options.iscroll 91 ); 92 }, 93 94 addOverlay: function addOverlay() { 95 var $this = $(this); 96 var $overlay = $('<div>').addClass(__.settings.class.overlay + ' ' + __.settings.class.toggle); 97 98 return $this.append($overlay); 99 }, 100 101 toggle: function toggle() { 102 var _this = this; 103 104 if (__.settings.state) { 105 return __.close.call(_this); 106 } else { 107 return __.open.call(_this); 108 } 109 }, 110 111 open: function open() { 112 var $this = $(this); 113 114 if (touches) { 115 $this.on('touchmove.' + namespace, function disableTouch(event) { 116 event.preventDefault(); 117 }); 118 } 119 120 return $this 121 .removeClass(__.settings.class.close) 122 .addClass(__.settings.class.open) 123 .drawerCallback(function triggerOpenedListeners() { 124 __.settings.state = true; 125 $this.trigger(__.settings.events.opened); 126 }); 127 }, 128 129 close: function close() { 130 var $this = $(this); 131 132 if (touches) $this.off('touchmove.' + namespace); 133 134 return $this 135 .removeClass(__.settings.class.open) 136 .addClass(__.settings.class.close) 137 .drawerCallback(function triggerClosedListeners() { 138 __.settings.state = false; 139 $this.trigger(__.settings.events.closed); 140 }); 141 }, 142 143 destroy: function destroy() { 144 return this.each(function destroyEach() { 145 var _this = this; 146 var $this = $(this); 147 $('.' + __.settings.class.toggle).off('click.' + namespace); 148 $(window).off('resize.' + namespace); 149 $('.' + __.settings.class.dropdown).off(__.settings.dropdownEvents.opened + ' ' + __.settings.dropdownEvents.closed); 150 _this.iScroll.destroy(); 151 $this 152 .removeData(namespace) 153 .find('.' + __.settings.class.overlay) 154 .remove(); 155 }); 156 } 157 158 }; 159 160 $.fn.drawerCallback = function drawerCallback(callback) { 161 var end = 'transitionend webkitTransitionEnd'; 162 return this.each(function setAnimationEndHandler() { 163 var $this = $(this); 164 $this.on(end, function invokeCallbackOnAnimationEnd() { 165 $this.off(end); 166 return callback.call(this); 167 }); 168 }); 169 }; 170 171 $.fn.drawer = function drawer(method) { 172 if (__[method]) { 173 return __[method].apply(this, Array.prototype.slice.call(arguments, 1)); 174 } else if (typeof method === 'object' || !method) { 175 return __.init.apply(this, arguments); 176 } else { 177 $.error('Method ' + method + ' does not exist on jQuery.' + namespace); 178 } 179 }; 180 181})); 182

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問