GitHub の言説に基づいて、リンクがクリックされたときに MDL ドロワーが閉じられるという (うまくいけばすぐに解決される) 問題に対する実用的な解決策がいくつかあります。現時点で私は使用しています:
function close() {
var d = document.querySelector('.mdl-layout');
d.MaterialLayout.toggleDrawer();
}
document.querySelector('.mdl-layout__drawer').addEventListener('click', close);
その他のバリエーションは次のとおりです。
1.
document.querySelector('.mdl-layout__drawer').addEventListener('click', function () {
document.querySelector('.mdl-layout__obfuscator').classList.remove('is-visible');
this.classList.remove('is-visible');
}, false);
2.
function close() {
var d = document.querySelector('.mdl-layout');
d.MaterialLayout.toggleDrawer();
}
var drawer_container = document.getElementsByClassName('mdl-layout')[0];
drawer_container.querySelector('.mdl-layout__drawer').addEventListener('click', 'close');
ディスカッションの誰かが、querySelector
ドキュメント全体に目を通す必要がないように をターゲットにするというアイデアに言及し、次の 2 つのバリエーションを思いつきました。
3.
var drawer_container = document.getElementsByClassName('mdl-layout')[0];
# no IDs in the html code.
drawer_container.querySelector('.mdl-layout__drawer').addEventListener('click', function () {
var obfuscator = document.querySelector('.mdl-layout__obfuscator');
if (obfuscator.classList.contains('is-visible')) {
obfuscator.classList.remove('is-visible');
this.classList.remove('is-visible');
}
}, false);
4.
function close() {
var d = document.getElementsByClassName('mdl-layout__container')[0].querySelector('.mdl-layout');
d.MaterialLayout.toggleDrawer();
}
var drawer_container = document.getElementsByClassName('mdl-layout')[0];
drawer_container.querySelector('.mdl-layout__drawer').addEventListener('click', 'close');
私のバージョンの両方で、ブラウザーと対象を絞った呼び出しを実行document.getElementsByClassName
する必要があります。 querySelector
私の最初のバージョンにはチェックもありますclassList.contains('is-visible')
。誰かが推奨していましたが、 true の場合にのみ表示されるアイテムから関数が呼び出されているため、これは不要に思えclassList.contains('is-visible')
ます。
関数内で、各バリエーション (#3 と 4) に次の呼び出しを追加しました。
console.time("anonymous");
console.timeEnd("anonymous");
console.time("close function");
console.timeEnd("close function");
そして、if
ステートメントを持つものはで実行され.39ms
ます。if
ステートメントがなければ、両方とも で実行され.19ms
ます。しかし、私が正しく理解している場合、ページの読み込み時に実行されているgetElementsByClassName
andメソッドも測定していません。querySelector
私が最初の、そして私にとって最も美しいコードを実行したとき、その時間console.time("first");
は.console.timeEnd("first");
23ms
どうやらサポートしたいie8はgetElementsByClassName をサポートしていないようです。
この比較的単純な問題に対する最適な解決策を誰かが提供して説明できることを願っています。
これがCodePenです(私のものではありません)。