基于GitHub discourse,对于单击链接时关闭 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 为目标的想法,这样就不需要查看整个文档,我想出了以下两种变体:
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 以及 targeted querySelector 调用。
在我的第一个版本中,还有有人推荐的检查:classList.contains('is-visible'),但这似乎没有必要,因为该函数是从一个只有在 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 和 querySelector 方法,如果我理解正确的话,它们会在页面加载时运行。
当我运行console.time("first"); 和console.timeEnd("first"); 通过第一个,对我来说,最漂亮的代码时,时间是23ms。
显然是ie8,我想支持,doesn't support getElementsByClassName。
我希望有人可以为这个相对简单的问题提供和解释一个最佳解决方案。
这是CodePen(不是我的)。