html - CSS 在 Y 轴上平移和缩放?

标签 html css css-animations

我正在参加一个学习 CSS 的在线类(class),我们只介绍 CSS 动画。我正在尝试通过创建一个男人沿着一条小路走向屏幕的小动画来练习我学到的一些东西(现在只是基本的变换)。

基本上,我想同时平移和缩放图像。我得到了这个工作正常,但现在我还想添加一些小的旋转,这样看起来这个人在左右移动。这是我在 jsfiddle 中的代码,我不知道如何更改变换原点,以便该人在 Y 轴上沿直线行走,比例尺使他沿对 Angular 线行走。我希望这是有道理的...

代码中被注释掉的部分包括刻度,一旦把它加回来,没有刻度的部分被注释掉,这很有趣,我认为这与起源有关?

https://jsfiddle.net/qLLqdxbm/

HTML:

<div class="man-scale">
  <img class="man-walk" src="http://clipart-library.com/img/1184697.png">
</div>

CSS:

.man-walk {
    width: 100px;
    height: 125px;
    position: absolute;
    top: 0;
    left: 50px;

    animation-name: man-walk;
    animation-duration: 0.45s;
    animation-iteration-count: infinite;
}

@keyframes man-walk {
    0% {
        transform: rotate(0deg);
    }

    25% {
        transform: rotate(1.5deg);
    }

    50% {
        transform: rotate(0deg);
    }

    75% {
        transform: rotate(-1.5deg);
    }

    100% {
        transform: rotate(0deg);
    }
}

.man-scale {
    width: 100px;
    height: 125px;

    animation-name: man-scale;
    animation-duration: 2s;
    animation-timing-function: linear;
    animation-iteration-count: infinite;
}

/* define the animation */
@keyframes man-scale {
/*     0% {
        transform: translate(0px, 5px) scale(1.1);
    }

    25% {
        transform: translate(0px, 15px) scale(1.5);
    }

    50% {
        transform: translate(0px, 25px) scale(1.7);
    }

    75% {
        transform: translate(0px, 35px) scale(2.0);
    }

    100% {
        transform: translate(0px, 45px) scale(2.3);
    } */

    0% {
        transform: translate(0px, 5px);
    }

    25% {
        transform: translate(0px, 15px);
    }

    50% {
        transform: translate(0px, 25px);
    }

    75% {
        transform: translate(0px, 35px);
    }

    100% {
        transform: translate(0px, 45px);
    }
}

感谢您的帮助!

最佳答案

每次您沿 X 和 Y 缩放图像时,原点都会在两个维度上移动一个特定的偏移量。如果您可以补偿 X 维度中的偏移量,则可以实现垂直动画。

在这种情况下,在第一个关键帧中,比例增加了 0.1,即 100 * 0.1 = 10px现在原点被 5px 抵消了在 X 维度上,根据 translateX(-5px) 进行补偿.对于所有其他关键帧也是如此。

如果您想要在 Y 维度上获得更快的动画,只需增加 Y 平移值而不影响 X 平移值即可。

.man-walk {
    width: 100px;
    height: 125px;
    position: absolute;
    top: 0;
    left: 50px;

    animation-name: man-walk;
    animation-duration: 0.45s;
    animation-iteration-count: infinite;
}

@keyframes man-walk {
    0% {
        transform: rotate(0deg);
    }

    25% {
        transform: rotate(1.5deg);
    }

    50% {
        transform: rotate(0deg);
    }

    75% {
        transform: rotate(-1.5deg);
    }

    100% {
        transform: rotate(0deg);
    }
}

.man-scale {
    width: 100px;
    height: 125px;

    animation-name: man-scale;
    animation-duration: 2s;
    animation-timing-function: linear;
    animation-iteration-count: infinite;
}

/* define the animation */
@keyframes man-scale {
     0% {
        transform: translate(-5px, 30px) scale(1.1);
    }

    25% {
        transform: translate(-20px, 70px) scale(1.4);
    }

    50% {
        transform: translate(-35px, 120px) scale(1.7);
    }

    75% {
        transform: translate(-50px, 180px) scale(2.0);
    }

    100% {
        transform: translate(-65px, 250px) scale(2.3);
    } 
}
<div class="man-scale">
  <img class="man-walk" src="http://clipart-library.com/img/1184697.png">
</div>

可能有一些高级 CSS 技术可以自动计算偏移量。

关于html - CSS 在 Y 轴上平移和缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299038/

相关文章:

html - 使用 css 显示 3 个带有彼此相邻的标题的图形

javascript - 如何使用 XMLHttpRequest ajax 将值从 cgi Cpp 返回到 HTML?

css - 如何防止不支持的浏览器的 css 动画并在停用 js 时允许支持

javascript - 流畅的 CSS 向下滑动动画

css - 尝试使用隐藏属性对显示/隐藏定义列表进行动画处理(隐藏属性导致动画不起作用)

html - 重叠 div 上的悬停事件不起作用

c# - AjaxControlToolkit ModelPopupExtender 显示屏幕左侧而不是中心

javascript - 从外部 js 文件返回样式表

html - 如何制作高度不随屏幕尺寸变化的导航栏?

javascript - 从 Javascript 创建视频时无法应用 video-js 皮肤