如何在不调整浏览器大小的情况下创建 "slide-in" 动画?

How to create in "slide-in" animation without resizing the browser?

我有一个动画,在页面上加载一个 img 对象(和文本对象)从网页框架外滑入。它工作得很好,但是,唯一明显的问题是在加载的最开始,网页的大小被调整了大约。半秒钟。这是因为在那个时间点,img 对象位于框架之外,因此它会调整大小以进行补偿。这对负载产生了非常不稳定的影响。有没有办法处理它,让它就像在框架的当前边界之外一样,只有在它的一部分在框架中时才会显示在网页上。

这是动画的简单 CSS 代码以及图像的 CSS 代码(它是一个浮点数,因此我可以在其周围环绕文字)。

另外我目前使用的框架是react,所以如果有React或JS解决方案,我也很乐意听到。

@keyframes slideFromRight {
    0% {
        transform: translateX(800px) translateY(-80px);
    }
  
    100% {
        transform: translateX(0px) translateY(0px);

.img--berk {
    float: right;
    width: 335px;
    height: 213px;
    margin-top: 1%;
    margin-right: 1%;
    margin-left: 1%;
    border-radius: 9%;
    border: 4px solid var(--blue);
    animation: slideFromRight 1.2s cubic-bezier(0.35,-0.15, 0.63, 1.58);
}

你可以让img从左边进入:

.img--berk {
    float: right;
    width: 335px;
    height: 213px;
    margin-top: 1%;
    margin-right: 1%;
    margin-left: 1%;
    border-radius: 9%;
    border: 4px solid var(--blue);
    animation: slideFromRight 1.2s cubic-bezier(0.35,-0.15, 0.63, 1.58);
}
@keyframes slideFromRight {
  0% {
    transform: translateX(-800px) translateY(-80px);
  }

  100% {
    transform: translateX(0px) translateY(0px);
  }
}
<img class="img--berk" src="https://picsum.photos/200" />

如果你用的是react,我会用framer motion。

在终端中使用 npm i --save framer-motion 安装 framer motion。

    import {motion} from "framer-motion";
            
            const variants = {
            initial: { x: "100vw" },
            animate: { x: "0vw", 
            transition: { duration: 1.2 }
             }
            }
            
            export default function ImgComponent() {
return <motion.img class="img--berk" src="https://picsum.photos/200" initial="initial" animate="animate" variants={variants} />
        }

不要忘记给你的“App.js”组件“溢出:隐藏;”