方式实现,3d变换和动画

风趣的CSS标题(14卡塔尔国: 纯 CSS 方式达成 CSS 动漫的中止与播音!

2017/04/20 · CSS · 动画

正文我: 伯乐在线 - chokcoco 。未经作者许可,防止转发!
应接插手伯乐在线 专栏撰稿者。

动用纯 CSS 的法子,能不可能暂停、播放 CSS 动漫?看起来不也许,最少很麻烦。

作者们精通,在 CSS3 animation 中,有那样贰本性质能够暂停、播放动漫:

{ animation-play-state: paused | running; }

1
2
3
{
    animation-play-state: paused | running;
}

animation-play-state: 属性定义一个动漫是还是不是运转依旧暂停。能够经过查询它来规定动漫是不是正在运作。其它,它的值能够被设置为暂停和复苏的动漫片的重播。

大器晚成旦凭仗 Javascript,我们能够完结调控 CSS 动漫的运维和播音,上面列出部分主要代码:

XHTML

<div class="btn">stop</div> <div class="animation"></div> <style> .animation { animation: move 2s linear infinite alternate; } @keyframes move { 0% { transform: translate(-100px, 0); } 100% { transform: translate(100px, 0); } } </style>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div class="btn">stop</div>
<div class="animation"></div>
<style>
.animation {
    animation: move 2s linear infinite alternate;
}
@keyframes move {
    0% {
        transform: translate(-100px, 0);
    }
    100% {
        transform: translate(100px, 0);
    }
}
</style>

document.querySelector('.btn').addEventListener('click', function() { let btn = document.querySelector('.btn'); let elem = document.querySelector('.animation'); let state = elem.style['animationPlayState']; if(state === 'paused') { elem.style['animationPlayState'] = 'running'; btn.innerText = 'stop'; } else { elem.style['animationPlayState'] = 'paused'; btn.innerText = 'play'; } });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
document.querySelector('.btn').addEventListener('click', function() {
    let btn = document.querySelector('.btn');
    let elem = document.querySelector('.animation');
    let state = elem.style['animationPlayState'];
    
    if(state === 'paused') {
        elem.style['animationPlayState'] = 'running';
        btn.innerText = 'stop';
    } else {
        elem.style['animationPlayState'] = 'paused';
        btn.innerText = 'play';
    }
    
});

Demo — pause CSS Animation

1.transform-style 属性钦命嵌套原始是怎么样在三个维度空间中表现。
  语法:transform-style: flat | preserve-3d
      flat 表示具备子成分在2D平面显示。
      preserve-3d 表示所在成分在3D空间中显示。
2.perspective  定义3D成分距视图的相距,以像素计,当为成分定义perspective 属性时,其子成分别拿到得透视效果,实际不是因素自己
  语法:perspective: number | none;
      number 成分间隔视图的间距,以像素计。
      none 私下认可值,与0 相通,不安装透明。
3.perspective-origin   属性定义3D成分所依据的X轴和Y轴,该属性允许你改动3D 成分的底层地点,定义的这几个天性,它是八个成分的子成分,透视图,实际不是因素自个儿。

纯 CSS 实现

上边大家探求下,使用纯 CSS 的方法是或不是完毕。

  语法:perspective-origin: x-axis y-axis
    x-axis 定义该视图在x轴上的职分。
    y-axis 定义该视图在y轴上的岗位。

hover 伪类完结

动用 hover 伪类,在鼠标悬停在开关上面时,调控动漫样式的中断。

重大代码如下:

XHTML

<div class="btn stop">stop</div> <div class="animation"></div> <style> .stop:hover ~ .animation { animation-play-state: paused; } </style>

1
2
3
4
5
6
7
8
<div class="btn stop">stop</div>
<div class="animation"></div>
<style>
.stop:hover ~ .animation {
    animation-play-state: paused;
}
</style>

Demo — 纯 CSS 格局完毕 CSS 动漫的中止与播放 (Hover):

本来,那几个办法非常不足智能,假诺释放鼠标的恣意,点击一下抛锚、再点击一下广播就好了。还应该有别的形式吧?

示例:
  <style>
    .box{width:60px;height:60px;padding:40px;border:2px solid #000;margin:30px auto; -webkit-transform-style:preserve-3d;-webkit-
        perspective:100px;}
    .div{width:60px;height:60px;background:red; transition:1s;}
    .box:hover .div{-webkit-transform:rotateX(180deg);}
  </style>
  <div class="box">
     <div class="div">111</div>
  </div>
  结果:如图

checked 伪类实现

早前的篇章《风趣的CSS题目(8卡塔尔:纯CSS的导航栏Tab切换方案》也谈过,使用 radio 标签的 checked 伪类,加上 `` 实现纯 CSS 捕获点击事务。

同临时间使用被点击的因素得以调节一些 CSS 样式。实现如下:

XHTML

<input id="stop" type="radio" name="playAnimation" /> <input id="play" type="radio" name="playAnimation" /> <div class="box"> <label for="stop"> <div class="btn">stop</div> </label> <label for="play"> <div class="btn">play</div> </label> </div> <div class="animation"></div>

1
2
3
4
5
6
7
8
9
10
11
12
13
<input id="stop" type="radio" name="playAnimation" />
<input id="play" type="radio" name="playAnimation" />
<div class="box">
    <label for="stop">
        <div class="btn">stop</div>
    </label>
    <label for="play">
        <div class="btn">play</div>
    </label>
</div>
<div class="animation"></div>

一些注重 CSS 代码:

.animation { animation: move 2s linear infinite alternate; } #stop:checked ~ .animation { animation-play-state: paused; } #play:checked ~ .animation { animation-play-state: running; }

1
2
3
4
5
6
7
8
9
10
11
.animation {
    animation: move 2s linear infinite alternate;
}
 
#stop:checked ~ .animation {
    animation-play-state: paused;
}
 
#play:checked ~ .animation {
    animation-play-state: running;
}

我们希望当 #stop 和 #play 四个 radio 被点击时,给 .animation 成分分别赋予 animation-play-state: paused 或是 animation-play-state: running 。而且彼此只可以生效其后生可畏,所以需求给五个radio 标签付与相近的 name 属性。

DEMO — 纯 CSS 方式得以完毕 CSS 动漫的中断与广播:

地点的演示 德姆o 中,完毕了纯 CSS 格局实现 CSS 动漫的暂停与广播。

道理当然是这样的,还恐怕有后生可畏都部队分其余艺术,举个例子 radio 替换来 checkbox ,或然选拔 :target 伪类接受器也能达成地点相同的作用,感兴趣的能够品味一下。

到此本文甘休,如若还也许有哪些难题仍旧建议,能够多多交换,原创文章,文笔有限,才薄智浅,文中若有不正之处,万望告知。

开本连串,谈谈一些风趣的 CSS 题目,标题类型南征北战,想到怎么着说什么样,不止为了推广一下消除难点的笔触,更关乎一些便于忽略的 CSS 细节。

解题不构思包容性,标题驰骋驰骋,想到什么说什么样,固然解题中有您感觉到生僻的 CSS 属性,赶紧去补习一下呢。

不断更新,不断更新,不断更新,主要的事情说一遍。

所有难点汇总在自家的 Github 。

  • 有趣的CSS标题(1卡塔尔国: 左侧竖条的落到实处方式
  • 风趣的CSS标题(2卡塔尔国: 从条纹边框的贯彻谈盒子模型
  • 幽默的CSS标题(3卡塔尔国: 层叠顺序与货仓上下文知多少
  • 幽默的CSS题目(4卡塔尔国: 从倒影说到,谈谈 CSS 继承inherit
  • 幽默的CSS标题(5卡塔 尔(英语:State of Qatar): 单行居中,两行居左,超越两行省略
  • 有趣的CSS标题(6卡塔 尔(英语:State of Qatar): 全宽容的多列均匀布局难题
  • 风趣的CSS标题(7卡塔尔:消失的边界线难题
  • 风趣的CSS标题(8卡塔 尔(阿拉伯语:قطر‎:纯CSS的导航栏Tab切换方案
  • 风趣的CSS标题(9卡塔尔国:美妙实现 CSS 斜线
  • 风趣的CSS题目(10卡塔 尔(阿拉伯语:قطر‎:结构性伪类选取器
  • 有趣的CSS题目(11):reset.css 知多少?
  • 风趣的CSS标题(12卡塔 尔(英语:State of Qatar):你该知道的书体 font-family
  • 风趣的CSS标题(13卡塔尔:美妙地创建背景象渐变动漫!

打赏扶助小编写出更加多好小说,感谢!

打赏作者

    图片 1

打赏协助自身写出更加多好散文,多谢!

任选意气风发种支付方式

图片 2 图片 3

1 赞 收藏 评论

示例:
  <style>
    .box{width:60px;height:60px;padding:40px;border:2px solid #000;margin:30px auto; -webkit-
        transform-style:preserve-3d;-webkit-perspective:100px;}
    .div{width:60px;height:60px;background:red; transition:1s;}
    .box:hover .div{-webkit-transform:rotateY(180deg);}
  </style>
  <div class="box">
    <div class="div">111</div>
  </div>
结果:如图

关于作者:chokcoco

图片 4

经不住光阴似箭,逃可是此间少年。 个人主页 · 作者的篇章 · 63 ·    

图片 5

    图片 6

示例:
  <style>
    .box{width:60px;height:60px;padding:40px;border:2px solid #000;margin:30px auto; -webkit-
        transform-style:preserve-3d;-webkit-perspective:100px;}
    .div{width:60px;height:60px;background:red; transition:1s;}
    .box:hover .div{-webkit-transform:rotateZ(180deg);}
  </style>
  <div class="box">
    <div class="div">111</div>
  </div>
结果:如图

    图片 7

示例:(正方形)
  <style>
    .wrap{width:60px;height:60px;padding:20px; border:2px solid #000; margin:100px auto;
        -webkit-perspective:200px; -webkit-transform:scale(2);-webkit-perspective-origin:center center;}
    .box{width:60px;height:60px;background:red; position:relative; -webkit-transform-style:preserve-3d; transition:2s;
        -webkit-transform-origin:center center -50px;}
    .box div{width:60px;height:60px; position:absolute; color:#fff;font-size:50px; text-align:center;line-height:60px;}
    .box div:nth-of-type(1){left:0;top:-60px;background:#9C0; -webkit-transform-origin:bottom; -webkit-transform:rotateX(90deg);}
    .box div:nth-of-type(2){left:-60px;top:0px;background:#CF3; -webkit-transform-origin:right; -webkit-transform:rotateY(-90deg);}
    .box div:nth-of-type(3){left:0px;top:0px;background:#CCF;}
    .box div:nth-of-type(4){left:60px;top:0;background:#0C9;-webkit-transform-origin:left;-webkit-transform:rotateY(90deg);}
    .box div:nth-of-type(5){left:0px;top:60px;background:#69C;-webkit-transform-origin:top;-webkit-transform:rotateX(-90deg);}
    .box div:nth-of-type(6){left:0;top:0;background:#F0C;-webkit-transform:translateZ(-60px) rotateX(180deg);}
    .wrap:hover .box{ -webkit-transform:rotateX(180deg);}
  </style>
  <div class="wrap">
    <div class="box">
      <div>1</div>
      <div>2</div>
      <div>3</div>
      <div>4</div>
      <div>5</div>
      <div>6</div>
    </div>
  </div>
结果:如图

  图片 8

4.animation
    Keyframes 具备其和煦的语准则则 ,他的命名是由”@keyframes“ 开端,前边随着这几个动漫的称号 加上一批花括号。
    对于叁个"@keyframes"中的样式准则是由三个百分比构成的,如“0%”到"百分之百"之间
       @keyframes IDENT {
            from {
                Properties:Properties value;
            }
            Percentage {
                Properties:Properties value;
            }
            to {
                Properties:Properties value;
            }
        }
    可能全体写成百分比的样式:
     @keyframes IDENT {
          0% {
           Properties:Properties value;
        }
        Percentage {
          Properties:Properties value;
        }
        100% {
          Properties:Properties value;
        }
      }
    此中IDENT是贰个动漫片名称,你能够随意取,当然语义化一点越来越好,
      @-webkit-keyframes 'wobble' {
          0% {
            margin-left: 100px;
            background: green;
          }
          40% {
            margin-left: 150px;
            background: orange;
          }
          60% {
            margin-left: 75px;
            background: blue;
          }
          100% {
            margin-left: 100px;
            background: red;
            }
        }
    成分调用animation属性
       如:
          .demo1 {
              width: 50px;
              height: 50px;
              margin-left: 100px;
              background: blue;
              -webkit-animation-name:'wobble';/*动漫片属性名,也就是咱们日前keyframes定义的动漫名*/
              -webkit-animation-duration: 10s;/*动漫片持续时间*/
              -webkit-animation-timing-function: ease-in-out; /*动漫频率,和transition-timing-function是肖似的*/
              -webkit-animation-delay: 2s;/*卡通延迟时间*/
              -webkit-animation-iteration-count: 10;/*概念循环资料,infinite为极端次*/
              -webkit-animation-direction: alternate;/*概念动漫方式*/
          }

属性:
1.animation-name:
        语法:animation-name: none | IDENT[,none | IDENT]*;
        animation-name:是用来定义二个动画片的名目,其首要性有四个值:IDENT是由Keyframes成立的动漫名,
        换句话说此处的IDENT要和Keyframes中的IDENT意气风发致,
        假诺分裂等,将不可能落到实处其余动漫效果;none为默许值,当值为none时,将还没别的动漫效果。此外我们那
        个属性前边边所讲的transition同样,大家能够並且附
        多少个animation给一个要素,我们只须要用逗号“,”隔离。
2.animation-duratiuon
        语法:animation-duration: <time>[,<time>]*
        animation-duration是用来内定成分播放动漫所持续的时光长,取值:<time>为数值,单位为s (秒.卡塔尔国其暗许值为“0”。
        那脾性子跟transition中的transition-duration使用方法是平等的。
3.animation-timing-function:
        animation-timing-function:是指成分依照时间的递进来改造属性值的调换速率,说得不难点正是动漫片的播音格局。
        他和transition中的transition-timing-function相近,具备以下多样转移方式:ease;ease-in;ease-in-out;linear;cubic-bezier。
        具体的利用办法我们可以点这里,查看里面transition-timing-function的选择方式。
4.animation-delay
        语法:animation-delay: <time>[,<time>]*
        animation-delay:是用来钦点成分动漫开端延迟时间。取值为<time>为数值,单位为s(秒),其暗中同意值也是0。
        那一个天性和transition-delayy使用格局是千篇风度翩翩律的。
 5.animation-iteration-count
        animation-iteration-count:infinite | <number> [, infinite | <number>]*
        animation-iteration-count是用来钦赐元素播放动漫的轮回次数,其得以取值<number>为数字,其私下认可值为“1”;infinite为非常次数循环。
6.animation-direction
        语法: animation-direction: normal | alternate [, normal | alternate]*
        animation-direction是用来内定成分动漫播放的趋向,其独有多个值,私下认可值为normal,假诺设置为normal时,
        动漫的历次循环都是上前播放;
        另二个值是alternate,他的效率是,动漫播放在第偶多次向前播放,第奇数次向反方向播放。
7.animation-play-state
        语法:animation-play-state:running | paused [, running | paused]*
        animation-play-state首即使用来支配元素动漫的播音状态。其首要有七个值,running和paused当中running为暗中同意值。
        他们的机能就相似于我们的音乐播放器同样,能够经过paused将正在播放的卡通片停下了,也能够通过running将中断的动漫片重新播放,
        大家那边的再次播放不确定是从成分动漫的上马广播,而是从你暂停的极度地点上马播放。

示例: 
  <style>
    @-webkit-keyframes anim
        {
         0%{
          width:100px;
       }
       100%
       {
         width:200px;
       }
    }
    .box{width:100px;height:100px;background:red; -webkit-animation:2s anim;}
  </style>
  <div class="box"></div>
结果:如图

    图片 9

 

示例: 
  <style>
    @-webkit-keyframes anim
      {
        0%{
          width:100px;
          }
        100%
          {
            width:200px;
          }
      }
    .box{width:100px;height:100px;background:red; -webkit-animation:2s anim infinite linear;}
  </style>
  <div class="box"></div>
结果:动漫原原本本的进程是均等的。

示例:
  <style>
    @-webkit-keyframes anim
      {
        0%{
            width:100px;
          }
        100%
          {
            width:200px;
          }
      }
    .box{width:100px;height:100px;background:red; -webkit-animation:2s anim ease-in infinite;}
  </style>
  <div class="box"></div>
结果:如图

  图片 10

示例:
  <style>
    @-webkit-keyframes move
            {
              0%{
                  left:0;
                 }
              100%
                {
                  left:-500px;
                }
          }
    #wrap{ width:500px;height:100px;border:1px solid #000; position:relative;margin:100px auto; overflow:hidden;}
    #list{ position:absolute;left:0;top:0;margin:0;padding:0; -webkit-animation:5s move infinite linear; width:200%;}
    #list li{ list-style:none;width:98px;height:98px;border:1px solid #fff;background:#000; color:#fff; font:50px/98px Arial; text-align:center; float:left;}
    #wrap:hover #list{ -webkit-animation-play-state:paused;}
  </style>
  <div id="wrap">
    <ul id="list">
       <li>1</li>
       <li>2</li>
       <li>3</li>
       <li>4</li>
       <li>5</li>
       <li>1</li>
       <li>2</li>
       <li>3</li>
       <li>4</li>
       <li>5</li>
    </ul>
  </div>

结果:循环运动,鼠标悬浮结束。

 5.animation-play-state     规定动漫是正值运营依然暂停

    语法:animation-play-state: paused | running

           paused 动画已中断

          running 动漫正在播放

demo下载

本文由星彩网app下载发布于前端技术,转载请注明出处:方式实现,3d变换和动画

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。