基于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
以及有针对性 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不支持 getElementsByClassName。
我希望有人可以为这个相对简单的问题提供并解释最佳解决方案。
这是一个CodePen(不是我的)。