这是我想要的,但纯CSS. http://www.webdevdoor.com/demos/html5-pendulum-demo/
但我更喜欢根据它的位置看起来更像自然的速度变化.
Fiddle
.bellimg { height: 20px; wIDth: 20px; position: absolute; right: 10px; top: 18px; -webkit-animation-name: rotate; animation-delay: 3s; -webkit-animation-duration: 2s; -webkit-animation-iteration-count: infinite; -webkit-animation-direction: linear; -webkit-transform-origin: 50% 0%; -webkit-animation-timing-function: ease-in-out;}@-webkit-keyframes rotate { 0% { -webkit-transform: rotate(0deg); } 10% { -webkit-transform: rotate(10deg); } 20% { -webkit-transform: rotate(20deg); } 30% { -webkit-transform: rotate(10deg); } 40% { -webkit-transform: rotate(5deg); } 50% { -webkit-transform: rotate(0deg); } 60% { -webkit-transform: rotate(-5deg); } 70% { -webkit-transform: rotate(-10deg); } 80% { -webkit-transform: rotate(-20deg); } 90% { -webkit-transform: rotate(-10deg); } 100% { -webkit-transform: rotate(0deg); }}
<img src="img/bell.png">解决方法 您的代码中存在一些问题:
> animation-timing-function
被指定为easy-in-out.这表示动画开始和结束缓慢,但两者之间的速度更快.为了优雅和平等的移动,这应该设置为线性.
This is what 07001:
This keyword represents the timing function cubic-bezIEr(0.42,0.0,0.58,1.0). With this timing function,the animation starts slowly,accelerates then slows down when approaching its final state. At the beginning,it behaves similarly to the ease-in function; at the end,it is similar to the ease-out function.
> animation-direction
没有名为linear的值.
>分裂不相等.也就是说,对于大约10%的间隙,它旋转10度,而对于其他间隙,它仅旋转5度.使分裂相等.
完成所有更正的以下片段可生成平滑的动画.
.bellimg { height: 20px; wIDth: 20px; position: absolute; right: 10px; top: 18px; -webkit-animation-name: rotate; animation-delay: 3s; -webkit-animation-duration: 2s; -webkit-animation-iteration-count: infinite; -webkit-animation-direction: normal; -webkit-transform-origin: 50% 0%; -webkit-animation-timing-function: linear; /* or make your custom easing */}@-webkit-keyframes rotate { 0% { -webkit-transform: rotate(0deg); } 25% { -webkit-transform: rotate(20deg); } 75% { -webkit-transform: rotate(-20deg); } 100% { -webkit-transform: rotate(0deg); }}
<img src="https://cdn1.iconfinder.com/data/icons/freeline/32/bell_sound_notification_remind_reminder_ring_ringing_schedule-48.png">
设置动画的速度取决于位置(即,当它到达极端时减速并在中间加速)是不可能用纯CSS实现的(即使我们添加了额外的元素).
要根据其位置设置动画的速度,可以选择执行以下 *** 作:
>将图像添加到容器元素中.对其进行动画处理,使其从20deg旋转到-40deg.
>使父项上的动画早于子项的动画持续时间的1/3.也就是说,减少父母的延迟0.66秒.这样做是为了让父母偏移孩子的初始轮换.差异是动画持续时间的1/3,因为它是父母到达0deg所花费的时间.
>更改图像动画的关键帧,使旋转从-20deg到40deg.
>将动画方向设置为两者的替代,以便它们在前向进行第一次迭代,反向进行下一次,依此类推.
>将animation-timing-function设置为easy-in-out,以便在接近极限时减慢速度.当动画持续时间增加时,效果更明显.
.container { position: absolute; height: 20px; wIDth: 20px; /* right: 10px; commented for demo */ top: 18px; transform: rotate(20deg); animation-name: rotate-container; animation-delay: 2.33s; animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; transform-origin: 50% 0%; animation-timing-function: ease-in-out;}.bellimg { height: 100%; wIDth: 100%; transform: rotate(-20deg); animation-name: rotate; animation-delay: 3s; animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; transform-origin: 50% 0%; animation-timing-function: ease-in-out;}@keyframes rotate { 0% { transform: rotate(-20deg); } 100% { transform: rotate(40deg); }}@keyframes rotate-container { 0% { transform: rotate(20deg); } 100% { transform: rotate(-40deg); }}
<script src="https://cdnjs.cloudflare.com/AJAX/libs/prefixfree/1.0.7/prefixfree.min.Js"></script><div class='container'> <img src="https://cdn1.iconfinder.com/data/icons/freeline/32/bell_sound_notification_remind_reminder_ring_ringing_schedule-48.png"></div>
代码段中仅使用无前缀库来避免浏览器前缀.
总结以上是内存溢出为你收集整理的html – CSS3动画钟摆效果全部内容,希望文章能够帮你解决html – CSS3动画钟摆效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)