这是一个 CSS 变量(正式称为“CSS 自定义属性”)
:root {
--mouse-x: 0px;
--mouse-y: 0px;
}
也许您用它们来设置位置
.mover {
left: var(--mouse-x);
top: var(--mouse-y);
}
要从 JavaScript 更新这些值,您将
let root = document.documentElement;
root.addEventListener("mousemove", e => {
root.style.setProperty('--mouse-x', e.clientX + "px");
root.style.setProperty('--mouse-y', e.clientY + "px");
});
就这样。
查看 CodePen 上 Chris Coyier (@chriscoyier) 的 使用 JavaScript 设置 CSS 变量。
你开玩笑吧,这就像 JS/CSS 的婚礼。
相关,使用 React 通过 CSS 变量来交错动画
我会添加
* { cursor: none; }
用于演示目的。它比直接设置元素的
top
和left
样式更强大吗?我看到了至少两个优势。一个是 CSS 可读性:如果您想将元素固定到光标的位置,
left: var(--mouse-x)
对我来说非常合理。并且如果有多个元素对鼠标的移动做出反应,您无需在 JS 中逐个更新它们 - 您只需更新 CSS 变量一次。与其他一些 CSS 技术结合起来,这几乎打开了大量新的机会。我刚试着这样创建一些 自定义滚动条,我相信还有很多其他用例!:-)是的,我实际上每天都在使用这些功能!太棒了……直到您的客户要求 IE 兼容性。无论如何,我决定放弃所有 IE 项目,因为我真的非常喜欢 CSS 变量!
我的问题更多是关于性能:设置 CSS 变量比直接设置
top
和left
样式更有效率吗?