【发布时间】:2022-08-18 18:21:15
【问题描述】:
我正在使用 mask-image 重新创建此径向动画焦点效果:Codepen 我知道我可以将 CSS 复制并粘贴到 .css 文件中,但我想使用样式组件来实现相同的结果。为此,我在样式化组件中声明了 CSS 并应用它。但我不确定为什么什么都没有发生。
应用程序.tsx
import React from \"react\";
import styled from \"styled-components\";
const Property = styled.div`
@property --focal-size {
syntax: \"<length-percentage>\";
initial-value: 100%;
inherits: false;
}
`;
const FocusZoom = styled.div`
--mouse-x: center;
--mouse-y: center;
--backdrop-color: hsl(200 50% 0% / 50%); /* can\'t be opaque */
--backdrop-blur-strength: 10px;
position: fixed;
touch-action: none;
inset: 0;
background-color: var(--backdrop-color);
backdrop-filter: blur(var(--backdrop-blur-strength));
mask-image: radial-gradient(
circle at var(--mouse-x) var(--mouse-y),
transparent var(--focal-size),
black 0%
);
transition: --focal-size .3s ease;
/* debug/grok the gradient mask image here */
/* background-image: radial-gradient(
circle,
transparent 100px,
black 0%
); */
}
`;
function App(bool: boolean) {
const zoom: Element = document.querySelector(\"focus-zoom\");
const toggleSpotlight = (bool) =>
zoom.style.setProperty(\"--focal-size\", bool ? \"15vmax\" : \"100%\");
window.addEventListener(\"pointermove\", (e) => {
zoom.style.setProperty(\"--mouse-x\", e.clientX + \"px\");
zoom.style.setProperty(\"--mouse-y\", e.clientY + \"px\");
});
window.addEventListener(\"keydown\", (e) => toggleSpotlight(e.altKey));
window.addEventListener(\"keyup\", (e) => toggleSpotlight(e.altKey));
window.addEventListener(\"touchstart\", (e) => toggleSpotlight(true));
window.addEventListener(\"touchend\", (e) => toggleSpotlight(false));
return (
<>
<h1>
Press <kbd>Opt/Alt</kbd> or touch for a spotlight effect
</h1>
<FocusZoom></FocusZoom>
</>
);
}
export default App;
标签: javascript css reactjs typescript styled-components