zoukankan      html  css  js  c++  java
  • css3动画 --- Transition

    CSS transitions 提供了一种在更改CSS属性时控制动画速度的方法。 

    其可以让属性变化成为一个持续一段时间的过程,而不是立即生效的。比如,将一个元素的颜色从白色改为黑色,通常这个改变是立即生效的,使用 CSS transitions 后该元素的颜色将逐渐从白色变为黑色,按照一定的曲线速率变化。这个过程可以自定义。

    CSS transitions 可以决定哪些属性发生动画效果 (明确地列出这些属性),何时开始 (设置 delay),持续多久 (设置 duration) 以及如何动画 (定义timing funtion,比如匀速地或先快后慢)。

    可动画属性的列表是:

    -moz-outline-radius
    -moz-outline-radius-bottomleft
    -moz-outline-radius-bottomright
    -moz-outline-radius-topleft
    -moz-outline-radius-topright
    -webkit-text-fill-color
    -webkit-text-stroke
    -webkit-text-stroke-color
    all
    backdrop-filter
    background
    background-color
    background-position
    background-size
    border
    border-bottom
    border-bottom-color
    border-bottom-left-radius
    border-bottom-right-radius
    border-bottom-width
    border-color
    border-end-end-radius
    border-end-start-radius
    border-left
    border-left-color
    border-left-width
    border-radius
    border-right
    border-right-color
    border-right-width
    border-start-end-radius
    border-start-start-radius
    border-top
    border-top-color
    border-top-left-radius
    border-top-right-radius
    border-top-width
    border-width
    bottom
    box-shadow
    caret-color
    clip
    clip-path
    color
    column-count
    column-gap
    column-rule
    column-rule-color
    column-rule-width
    column-width
    columns
    filter
    flex
    flex-basis
    flex-grow
    flex-shrink
    font
    font-size
    font-size-adjust
    font-stretch
    font-variation-settings
    font-weight
    gap
    grid-column-gap
    grid-gap
    grid-row-gap
    grid-template-columns
    grid-template-rows
    height
    inset
    inset-block
    inset-block-end
    inset-block-start
    inset-inline
    inset-inline-end
    inset-inline-start
    left
    letter-spacing
    line-clamp
    line-height
    margin
    margin-bottom
    margin-left
    margin-right
    margin-top
    mask
    mask-border
    mask-position
    mask-size
    max-height
    max-lines
    max-width
    min-height
    min-width
    object-position
    offset
    offset-anchor
    offset-distance
    offset-path
    offset-position
    offset-rotate
    opacity
    order
    outline
    outline-color
    outline-offset
    outline-width
    padding
    padding-bottom
    padding-left
    padding-right
    padding-top
    perspective
    perspective-origin
    right
    rotate
    row-gap
    scale
    scroll-margin
    scroll-margin-block
    scroll-margin-block-end
    scroll-margin-block-start
    scroll-margin-bottom
    scroll-margin-inline
    scroll-margin-inline-end
    scroll-margin-inline-start
    scroll-margin-left
    scroll-margin-right
    scroll-margin-top
    scroll-padding
    scroll-padding-block
    scroll-padding-block-end
    scroll-padding-block-start
    scroll-padding-bottom
    scroll-padding-inline
    scroll-padding-inline-end
    scroll-padding-inline-start
    scroll-padding-left
    scroll-padding-right
    scroll-padding-top
    scroll-snap-coordinate
    scroll-snap-destination
    scrollbar-color
    shape-image-threshold
    shape-margin
    shape-outside
    tab-size
    text-decoration
    text-decoration-color
    text-emphasis
    text-emphasis-color
    text-indent
    text-shadow
    top
    transform
    transform-origin
    translate
    vertical-align
    visibility
    width
    word-spacing
    z-index
    zoom

    属性详情请参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_animated_properties

    例子:

    <body>
        <p>盒子的多个属性一起动画: width, height, background-color, transform. 将光标悬停在盒子上查看动画。</p>
        <div class="box"></div>
    </body>
    
    .box {
        border-style: solid;
        border-width: 1px;
        display: block;
        width: 100px;  /*初始值*/
        height: 100px;  /*初始值*/
        background-color: #0000FF;  /*初始值*/
        -webkit-transition:width 2s, height 2s, 
            background-color 2s, -webkit-transform 2s;
        transition:width 2s, height 2s, background-color 2s, transform 2s;
    }
    /*鼠标悬浮的时候触发动画样式*/
    .box:hover {
        background-color: #FFCCCC;  /*在2s内变成#FFCCCC*/
        width:200px;  /*在2s内变成200*/
        height:200px;  /*在2s内变成200*/
        -webkit-transform:rotate(180deg);
        transform:rotate(180deg);  /*在2s内旋转180度*/
    }

    transition没有无限循环。

    transition是由多个属性值组成的简写属性。依次包括:

    transition-property指定哪个或哪些 CSS 属性用于过渡。只有指定的属性才会在过渡中发生动画,其它属性仍如通常那样瞬间变化。

    transition-duration指定过渡的时长。可以指定多个时长,每个时长会被应用到由transition-property指定的对应属性上。如果指定的时长个数小于属性个数,那么时长列表会重复。如果时长列表更长,那么该列表会被裁减。

    transition-timing-function CSS属性受到transition的影响,会产生不断变化的中间值,而transition-timing-function 属性用来描述这个中间值是怎样计算的。实质上,通过这个函数会建立一条加速度曲线,因此在整个transition变化过程中,变化速度可以不断改变。这条加速度曲线被transition-timing-function所定义,之后作用到每个CSS属性的过渡。可以规定多个timing function,根据transition property的列表给每个CSS属性应用相应的timing function。如果timing function的个数比transition property中数量少,缺少的值被设置为初始值(ease) 。如果timing function比transition property要多,timing function函数列表会被截断至合适的大小。

    transition-timing-function的取值:

    transition-timing-function: ease
    transition-timing-function: ease-in
    transition-timing-function: ease-out
    transition-timing-function: ease-in-out
    transition-timing-function: linear
    transition-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1)
    transition-timing-function: step-start
    transition-timing-function: step-end
    transition-timing-function: steps(4, end)

    transition-delay规定了在过渡效果开始作用之前需要等待的时间。值以秒(s)或毫秒(ms)为单位。值为正时会延迟一段时间来响应过渡效果;取值为负时会导致过渡立即开始。可以指定多个延迟时间,每个延迟将会分别作用于所指定的相符合的transition-property。

    检测过渡是否完成

    当过渡完成时触发一个事件。在符合标准的浏览器下,这个事件是 transitionend,在 WebKit 下是 webkitTransitionEnd。这个事件提供两个属性:

    propertyName:字符串,表示已完成过渡的属性。

    elapsedTime:浮点数,指示当触发这个事件时过渡已运行的时间(秒)。这个值不受transition-delay影响。

    可以使用element.addEventListener()方法来监听这个事件:

    el.addEventListener("transitionend", updateTransition, true);

    当属性值列表长度不一致时

    以transition-property的值列表长度为标准,如果某个属性值列表长度短于它的,则重复其值以长度一致。例如:

    div {
      transition-property: opacity, left, top, height;
      transition-duration: 3s, 5s;
    }

    将按照下面这样处理:

    div {
      transition-property: opacity, left, top, height;
      transition-duration: 3s, 5s, 3s, 5s;
    }

    如果某个属性的值列表长于transition-property,将被截断。例如:

    div {
      transition-property: opacity, left;
      transition-duration: 3s, 5s, 2s, 1s;
    }

    将按照下面这样处理:

    div {
      transition-property: opacity, left;
      transition-duration: 3s, 5s;
    }

    以下例子设置了菜单的外观,在鼠标悬浮时,菜单里的元素的文字、颜色及背景色都发生了变化:

    <div class="sidebar">
      <p><a class="menuButton" href="home">Home</a></p>
      <p><a class="menuButton" href="about">About</a></p>
      <p><a class="menuButton" href="contact">Contact Us</a></p>
      <p><a class="menuButton" href="links">Links</a></p>
    </div>
    .menuButton {
      position: relative;
      transition-property: background-color, color;
      transition-duration: 1s;
      transition-timing-function: ease-out;
      text-align: left;
      background-color: grey;
      left: 5px;
      top: 5px;
      height: 26px;
      color: white;
      border-color: black;
      font-family: sans-serif;
      font-size: 20px;
      text-decoration: none;
      box-shadow: 2px 2px 1px black;
      padding: 2px 4px;
      border: solid 1px black;
    }
    
    .menuButton:hover {
      position: relative;
      transition-property: background-color, color;
      transition-duration: 1s;
      transition-timing-function: ease-out;
      background-color:white;
      color:black;
      box-shadow: 2px 2px 1px black;
    }

    原文:https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions

  • 相关阅读:
    Android实现多个词汇连续输入的提示
    android 中使用AutoCompleteTextView 可以实现自动提示功能
    关于android中搜索功能的实现
    重复弹出Toast 解决方案
    Android显示不重复通知的Notification
    个人项目经历
    使用Google 官方的控件SwipeRefreshLayout实现下拉刷新功能
    安卓左滑实现返回上一个页面
    初学hadoop
    浅谈nodejs和php
  • 原文地址:https://www.cnblogs.com/xjy20170907/p/11599713.html
Copyright © 2011-2022 走看看