
最近关注了太多的工具,现在最好从所有 React 和 npm-install-everything 的文章中休息一下,来看看一些纯粹的 DOM 和 Web API 功能,它们可以在不依赖任何第三方库的前提下在现代浏览器中运行。
这篇文章将讲解八个鲜为人知的 DOM 功能,这些功能具有强大的浏览器支持。为了帮助你理解每个功能的工作原理,我将通过大量的测试代码为你提供演示,这些代码都放在了CodePen上。
学习这些方法和属性没有陡峭的学习曲线,并且可以与项目中所使用的任何工具集在一起使用。
addEventListener() 的新参数 options
你肯定用 addEventListener() 处理过将事件附加到 Web 文档中的元素。通常 addEventListener() 调用看起来像这样:
element.addEventListener('click', doSomething, false);
第一个参数是正在监听的事件。第二个参数是一个回调函数,它将在事件发生时执行。第三个参数是一个名为 useCapture 的布尔值,用于指示是否要使用事件冒泡或捕获
。
这些大家都知道(特别是前两个)。但也许你不知道 addEventListener() 也接受一个替换最终布尔值的参数。这个新参数是一个 options 对象,如下所示:
element.addEventListener('click', doSomething, {
capture: false,
once: true,
passive: false
});
请注意,该语法允许定义三个不同的属性。以下是每个含义的快速概述:
- capture — 与之前提到的
useCapture参数 相同的布尔值 - once — 布尔值,如果设置为
true,则表示该事件应仅在目标元素上运行一次,然后被删除 - passive — 一个最终的布尔值,如果设置为
true,表示该函数永远不会调用preventDefault(),即使它被包含在函数体中
其中最有趣的是 once 选项。这肯定会在很多情况下派上用场,并且无需用 removeEventListener() 或使用其他一些复杂的技术来强制单个事件触发器。如果你用过 jQuery,可能熟悉该库中的类似功能:.one() 方法
。
你可以试着运行以下 CodePen 项目中关于 options 对象的一些代码:
CodePen演示:https://codepen.io/impressivewebs/pen/GeJZYz/
请注意,演示页面上的按钮只会附加一次文本。如果将 once 值改为 false,则多次单击该按钮,每次单击按钮时都会附加文本。
浏览器对 options 对象的支持非常好:所有浏览器都支持它,除了 IE11 及更早版本
,因此如果你不考虑微软 Edge 之前的浏览器,那么使用起来还是非常安全的。
scrollTo() 方法用于在窗口或元素中平滑滚动
平滑滚动总是经常被用到的。当点击本地页面链接并立即跳转到指定位置时(如果你眨眼,甚至可能会错过跳转过程),这会显得很突兀。平滑滚动改进了页面的用户体验。
虽然过去用 jQuery 插件就足以完成了,但现在用 window.scrollTo() 方法只需要一行 JavaScript。
scrollTo() 方法作用于 Window 对象,告诉浏览器滚动到页面上的指定位置。这是一个最简单语法的例子:
window.scrollTo(0, 1000);
这将向右滚动窗口 0px (表示x坐标或水平滚动)并向下滚动 1000px (垂直滚动,这通常是你想要的)。但这样做的话滚动并不是一个平滑的动画效果,页面将会突然滚动。
有时确实是你想要的。但是为了能够平滑滚动,你必须加入鲜为人知的 ScrollToOptions 对象,如下所示:
window.scrollTo({
top: 0,
left: 1000,
behavior: 'smooth'
});
这段代码与前面的例子相同,但在 options 对象中添加了 behavior 属性的smooth值。
请看下面这个 CodePen 演示,允许你自定义滚动量和行为: