javascript - 使用 useEffect 在 Scroll 上移动图像不起作用
问题描述
目前我正在尝试使用 useEffect 创建视差效果来操作我的 DOM 元素。我想要实现的是:
其中图像垂直固定在屏幕中间,可以水平移动,第一个文本垂直向上移动,第二个文本从图像下方从左到右水平移动。但是现在我的图像没有左右移动,第二个窗口中的文本也没有按照我想要的方式移动。
CodeSandbox:https ://codesandbox.io/s/fixedscroll-n952b?file=/src/App.js
代码:
useEffect(function onFirstMount() {
const changeBackground = () => {
let value = window.scrollY;
let img = document.getElementById("moveLeft");
let text = document.getElementById("moveUp");
let text2 = document.getElementById("text2");
img.style.left = value * 0.5 + "px";
text.style.marginTop = "-" + value * 0.5 + "px";
text2.style.left = value * 1 + "px";
};
window.addEventListener("scroll", changeBackground);
return () => window.removeEventListener("scroll", changeBackground);
}, []);
return (
<>
<div className="App">
<div class="inflow">
<div class="positioner">
<div class="fixed">
<div
id="moveUp"
style={{
position: "absolute",
color: "#fff",
fontSize: "40px"
}}
>
VANATAU
</div>
<div id="moveLeft">
<img
alt="passport"
src="https://cdn.britannica.com/87/122087-050-1C269E8D/Cover-passport.jpg"
/>
</div>
</div>
</div>
</div>
</div>
<div className="App2">
<div className="half">
<div className="text2" id="text2">
MINIMUM INVESTMENT
</div>
</div>
</div>
<div className="App2"></div>
解决方案
您正在设置property
元素position: static
(div)。您应该添加position: absolute
或#moveLeft
使用translateX
:
img.style.transform = `translateX(${value * 0.5}px)`
推荐阅读
- html - 为什么 div 的背景颜色不能按照一般的 css 规则工作?
- binary - 将 APNS 二进制协议升级到增强的基于 HTTP/2 的 API
- python - Pandas:替换字符串列值
- oracle - 使用 Oracle ChatBot 在 google 上构建操作
- c# - 提交和构建 CI
- java - 在 VSCode 中使用 Kotlin
- python - 烧瓶分页查询示例?
- file - 使用 Perl 在多个文件中搜索字符串
- tensorflow - 尝试在pycharm上使用python运行卷积神经网络时为什么会出现类型错误
- json - “本应解码字符串,但找到了字典。”