《CSS Secrets》是@Lea Verou最新著作,这本书讲解了有关于CSS中一些小秘密。是一本CSSer值得一读的一本书,经过一段时间的阅读,我、@南北和@彦子一起将在W3cplus发布一系列相关的读后感,与大家一起分享。

问题

动画并不总是页面加载的时候就开始。往往,我们都想通过用户的操作来触发动画,比如鼠标的悬浮(:hover)或者鼠标按下时(:active)。在这种情况之下,我们可能没办法控制动画播放的实妹次数,用户可能会迫使动画停止。例如,用户有通过悬浮(:hover)触发动画:鼠标移出元素之前动画结束。在这样的例子中会发生什么呢?

如果你的回答是“动画应该会呆其当前状态”或者“动画会顺利的过渡到前置状态”。默认情况下,动画就会停下来,突然跳到最初始状态。有时候可能会接受这种非常微妙的动画。但在大多数情况下它直接影响用户的体验。那么我们可以改变这种行为吗?

我决定拿一个简单的页面来说明这个问题(这个页面是我当作礼物送给我朋友Julian的)。注意右边圆形中的图片,当用户鼠标悬停在圆形上时,圆形中的图片慢慢开始向左滚动,显示被隐藏的那部分。默认情况,当用户鼠标移出圆形图片时,图片会立即回到原来的位置,这给人感觉体验不好。因为这是一个小网站,而这张图片又是该网站核心部分,我不能睁一眼闭一眼,必须得把这个问题给解决。

解决方案

假设我们一个很长的景观照片,如下图所示:

但我们要显示的空间只有150px X 150px的正方形。解决这个问题的一个方法就需要使用动画:默认显示图像的从图像的左边缘开始,当用户有交互行为时,图片慢慢向左滚动(例如,鼠标悬浮在图片上时)。我们使用单个元素,并且给他设置一个背景图片,通过动画修改background-position值来实现。

.panoramic {

width: 150px;

height: 150px;

background: url("img/naxos-greece.jpg");

background-size: auto 100%;

}

目前,它看起来如下图所示:

没有动画和任何交互效果。我们来实战一回,我们可以看到,原来是手动的修改background-position从0 0到0 100%来修改整个背景图像。下面我们来尝试使用keyframes来做:

@keyframes panoramic {

to {

background-position: 100% 0;

}

}

.panoramic {

width: 150px;

height: 150px;

background: url("img/naxos-greece.jpg");

background-size: auto 100%;

animation: panoramic 10s linear infinite alternate;

}

它能正常的运行。效果看起来就像一个全景,从左向右看。然而,而面加载动画就被触发,这样一来可能会分散用户的集中力,例如,旅游网页,用户可能会试着只专注于阅读有关于纳克索斯岛(Naxos)相关文本,而不是看着美丽的全景照片。当用户鼠标悬浮在图片上时,才触发动画,这样看起来更形象。所以,我们首先想的方案就是这样的。

.panoramic {

width: 150px;

height: 150px;

background: url("img/naxos-greece.jpg");

background-size: auto 100%;

}

.panoramic:hover,

.panoramic:focus {

animation: panoramic 10s linear infinite alternate;

}

当鼠标悬浮在图片上时动画被触发:初始状态显示图像的最左边的部分,慢慢滚动显示图像的其他部分。然而,当我们的鼠标移出图像时,图像又突然跳到图像的最左边,如下图所示:

我也是无意之中发现这个问题。

为了解决这个问题,我们要想个办法来解决。我们需要的是不应用动画,这意味着:hover无法记忆动画的当前位置。我们需要的是鼠标悬浮在图片是有动画,图片从左向右移动,鼠标移出图片时,动画暂停。值得庆幸的是,动画有一个属性animation-play-state可以实现这样的效果。

因此,我们把动画的暂停状态运用在.panoramic上,而鼠标悬浮状态(:hover)时又播放动画。因为它不再是播放和取消一个动画,只是暂停和恢复现有的动画,这样动画不会有突然跳跃。最后的代码和效果如下:

.panoramic {

width: 150px;

height: 150px;

background: url("http://www.w3cplus.com/sites/default/files/blogs/2015/1507/naxos-greece-big.jpg");

background-size: auto 100%;

animation: panoramic 10s linear infinite alternate;

animation-play-state: paused;

}

.panoramic:hover,

.panoramic:focus {

animation-play-state: running;

}

@keyframes panoramic {

to {

background-position: 100% 0;

}

}

html动画如何设置恢复原状态,CSS秘密花园: 动画状态相关推荐

  1. html设置花样的分界线,CSS秘密花园: 花式的符号

    <CSS Secrets>是@Lea Verou最新著作,这本书讲解了有关于CSS中一些小秘密.是一本CSSer值得一读的一本书,经过一段时间的阅读,我.@南北和@彦子一起将在W3cplu ...

  2. SVG/CSS路径动画

    <template><div class="title">路径动画</div><div class="icon-box2&quo ...

  3. html 纯css设置转圈,CSS3 转圈彩色文字动画实例及animation-play-state属性规则

    网页中的动画通常是当鼠标移到上面,动画立即停止,便于用户阅读:CSS3新增的制作动画属性也考虑到这个问题,只要作了相应的设置,鼠标移到上面,动画也会停止,移开鼠标,动画继续运动:这主要通过animat ...

  4. 恢复原厂设置,清除SD卡数据

    恢复原厂设置,清除sd卡数据. 设置--备份与重置--恢复出厂设置.清除平板电脑上的所有数据--重置平板电脑--清除全部内容--正常重启并恢复出厂设置. 设置--备份与重置--恢复出厂设置.清除平板电 ...

  5. nook2(simple touch) 恢复原厂(出厂)设置

    nook一直root着,这次恢复出厂设置了,干净~~ 1.先关闭nook 2.打开nook电源,界面启动时同时按下nook左右下面的按钮,一直不放,一会出现恢复原厂设置引导界面. 然后是更新到nook ...

  6. 1.CSS3 教程-> 多列布局 > image模块 > cssTransition 过渡 > CSS Animations 动画 > Transform二维

    CSS3 教程 多列布局 image模块 cssTransition 过渡 CSS Animations 动画 Transform二维 介绍 CSS3 是层叠样式表(Cascading Style S ...

  7. vue动画效果配置和弹层css sticky footer

    vue动画效果配置 有两种方式: 一种是css方式 需要注意 4 个(CSS)类名在 enter/leave 的过渡中切换: v-enter: 定义进入过渡的开始状态.在元素被插入时生效,在下一个帧移 ...

  8. css animation动画

    css 动画: 动画是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果. 必要元素: a.通过@keyframes指定动画序列:自动补间动画,确定两 ...

  9. CSS转换动画与移动web

    CSS转换与移动web 一.课前导学 1.阶段目标: 使用字体图标.平面转换.动画等C3属性丰富网页效果和呈现方式 2.CSS3 目标:使用平面.空间转换和动画属性,丰富网页元素 3.Flex 了解移 ...

最新文章

  1. JS数组键值,数组合并,
  2. html提现页面模板,提现记录.html
  3. win查看php 启动状态,windows上如何查看nginx是否启动
  4. hadoop中的helloword
  5. java clock计时_Java Clock类– java.time.Clock
  6. 在python不同版本下导入libvirt模块
  7. python 处理 图像和视频
  8. 大厂前端面试考什么?
  9. 松柏先生:参透五百年不遇的《求贤令》,何愁品牌不立!
  10. 【转】如何设置服务器网卡千兆变万兆
  11. 内九外七皇城四,九门八点一口钟_ywyuan_新浪博客
  12. 动态规划的应用(二):cutting stock 问题
  13. 中电海康校招面试数据存储与处理事业部
  14. 2019美团机器学习/数据挖掘算法实习生笔试 编程题修改矩阵
  15. 朋友圈广告投放优势及广告投放案例分享
  16. 精选互联网运营必读的 8 本书籍
  17. 残缺棋盘问题 C语言 算法
  18. 证书扫描件怎么压缩?如何将电子版合同资料压缩变小?
  19. 挂载虚拟机映像文件img
  20. 前端开发:艺术字体ttf资源文件

热门文章

  1. 计算机鼠标不出现在电脑屏幕上,电脑开机屏幕上看不到鼠标箭头?
  2. Prison Break中的经典台词
  3. Anaconda中出现 ImportError: No module named conda.cli
  4. matlab比例环节代码,典型环节的MATLAB仿真
  5. 8通道同步并行数据采集PCI模块的设计
  6. 重押农业,拼多多正在扛起乡村振兴大旗
  7. php+摩尔斯电码,如何在Symfony 3中使用PHP编码和解码摩尔斯电码(翻译摩尔斯电码)...
  8. 计算机丢失bdertl60,bdertl60.bpl
  9. 最新基于ThinkPHP5.0+BootStrap框架开发的自适应WAP手机端响应式界面博客系统PHP源码
  10. c:\Windows\system32\ regsvr32.exe Windows无法访问指定设备、路径或文件,你可能没有适当的权限访问该项目