trigger
type: String / default: .js-clickit
トグルボタンなど、クリックイベントのトリガーとなる要素を、querySelectorで認識できる形式で指定します。トリガーには、aria-controls
属性、もしくはa要素のアンカーが必須となります(展開される要素のIDとして扱います)。
ClickIt.js
Yo, Ho!
Click the button again to hide me!
ClickIt.js is a simple library.
Implements the process of "rewriting the class attribute when clicked".
ClickIt.js(クリックイットジェーエス)は
「クリックするとclass属性を書き換える」処理を実装できる
シンプルなライブラリです。
version 1.0.0
Setup
Upload clickit.js
in your site, or import in your webpack project
Link ClickIt.js
<script src="/path/to/js/clickit.js"></script>
Markup
<button class="js-clickit my-trigger" aria-controls="my-menu">Menu</button>
. . .
<div id="my-menu" class="my-menu">
<!-- opens and closes here -->
</div>
<a href="#my-menu" class="js-clickit my-trigger">Menu</a>
. . .
<div id="my-menu" class="my-menu">
<!-- opens and closes here -->
</div>
Make instance and Init
clickit
can be any variable name you like
<script>
const clickit = new ClickIt();
window.addEventListener('DOMContentLoaded', () => {
clickit.init();
});
</script>
... If you want to customize more, read Options and Method
<script>
const drawer = new ClickIt({
trigger: '.drawer',
sync: '.drawer-close-button'
});
window.addEventListener('DOMContentLoaded', () => {
drawer.init();
});
</script>
<script>
const accordion = new ClickIt({
trigger: '.accordion-header',
height: true,
delay: 500
});
window.addEventListener('DOMContentLoaded', () => {
accordion.init();
});
</script>
<script>
const modal = new ClickIt({
mode: 'modal',
openDelay: 1000,
closeDelay: 500
});
window.addEventListener('DOMContentLoaded', () => {
modal.init();
});
</script>
<script>
const tabs = new ClickIt({
mode: 'tab'
});
window.addEventListener('DOMContentLoaded', () => {
tabs.init();
});
</script>
Global navigation on this site, automatically closes the menu when you click on a link, when you're on the home page (because it's an anchor that scroll in page).
<script>
const drawer = new ClickIt({
trigger: '.js-drawer',
delay: 500,
sync: '.js-drawer-close'
});
window.addEventListener('DOMContentLoaded', () => {
drawer.init();
const navs = document.querySelectorAll('.drawer .echo-nav-label');
if( navs ) {
navs.forEach( nav => {
nav.addEventListener( 'click', () => {
if( (window.location.pathname === '/')||(window.location.pathname.indexOf('/index.html')) ) {
drawer.close();
}
});
})
}
});
</script>
Decorate with CSS
Here is the minimal CSS. the rest is your choice
.my-menu.js-clickit-ready {
/* After initialization */
overflow: hidden;
height: 0;
opacity: 0;
transition: opacity 0.5s;
}
.my-menu[aria-hidden="false"] {
/* open */
height: auto;
opacity: 1;
}
.my-menu[aria-hidden="true"] {
/* close */
}
.my-menu.js-clickit-opening {
/* while open (require delay property) */
}
.my-menu.js-clickit-closing {
/* while close (require delay property) */
}
.my-trigger[aria-expanded="true"] {
/* open */
color: white;
background-color: blue;
}
.my-trigger[aria-expanded="false"] {
/* close */
color: blue;
background-color: silver;
}
Sorry, the rest content is only in Japanese.
parameter = (none)
インスタンスを作成したあと、すべてのクリックイベントが有効になるようセットアップします。複数回の実行や、再起動は想定していません。
parameter = type: Number / default: 0
(指定した数値)番目の要素を開きます。引数は0から数えるため、0がドキュメント内で最初に出現した要素となります。
parameter = type: Number / default: 0
(指定した数値)番目の要素を閉じます。引数は0から数えるため、0がドキュメント内で最初に出現した要素となります。
parameter = type: Number / default: 0
(指定した数値)番目以外の要素を閉じます。引数は0から数えるため、0がドキュメント内で最初に出現した要素となります。
parameter = (none)
すべての要素を開きます。
parameter = (none)
すべての要素を閉じます。
parameter = type: Number / default: 0
(指定した数値)番目以外の高さを再計算し、data属性を更新します。引数は0から数えるため、0がドキュメント内で最初に出現した要素となります。