精华内容
下载资源
问答
  • 在css3中,我们可以通过@keyframes创建关键帧动画效果。我们需要将@keyframes绑定到选择器中,否则不会有效果出现。同时,我们还需定义动画时长和动画名称 语法 CSS Code复制内容到剪贴板 @keyframes ...
  • 主要介绍了@keyframes规则实现多重背景的CSS动画,代码中使用的是效果图中显示的素材,仅作为脚本示例在此便不提供下载了,需要的朋友可以参考下
  • 主要介绍了详解CSS动画属性关键帧keyframes全解析的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • import keyframes from 'react-native-easing-keyframes' const easeInOut = Easing . bezier ( 0.42 , 0.0 , 0.58 , 1.0 ) const value = new Animated . Value ( 0 ) Animated . timing ( value , {
  • UX设计的3D按钮内置于React中,状态通过钩子进行管理,并通过@keyframes进行动画处理。 单击该按钮以弹出更多按钮。 再次单击以使其消失。 技术领域 HTML,SCSS(组件),@ keyframes,SVG,React,Hooks,PropTypes...
  • 问题解说: 在使用css 的animations 属性时,首次加载循环会出现白色的间隙,看着有点像页面有刷新的感觉,后面每次循环就不会再有这个问题 问题演示   ... <div class=first> //less .container { ...
  • Animate me 或多或少可帮助您生成跨浏览器且完全有效的@keyframes 和动画的 css 代码,无需黑客。 为什么? 我通常更喜欢 SCSS,但因为 wordpress( , )更好地支持并且我想简化以重新创建我虽然这样做,对我来说...
  • canvas-keyframes.min.js添加序列帧动画,动态添加,无论是横版序列图还是竖版序列图
  • keyframes

    2019-02-25 11:07:36
    @keyframes animatename { 0% { } 50% { } 100% { } } 执行动画 animation: keyframesName time reverse(“反转”); 设置动画执行的圆点 transfrom-origin:left center 使用animate.css 1,引入animate.css文件 2,在...

    定义动画
    @keyframes animatename {
    0% {
    }
    50% {
    }
    100% {
    }
    }
    执行动画
    animation: keyframesName time reverse(“反转”);
    设置动画执行的圆点
    transfrom-origin:left center
    使用animate.css
    1,引入animate.css文件
    2,在标签上自定义class enter-active-class enter-to-class
    3,在class上添加animated
    4,写上自定义的animate中的class类名

    展开全文
  • 主要介绍了CSS3 @keyframes简单动画实现的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • find-keyframes.py 用于在MPEG TS文件中查找关键帧的Python库。 旨在作为使用FFProbe的更快的替代方法。 对于为HLS创建I帧播放列表很有用。 免责声明 我对MPEG TS格式的了解非常有限。 该库仅通过少量的MPEG TS文件...
  • CSS3 中的@keyframes介绍

    2020-09-25 02:10:14
    CSS3新增动画属性“@keyframes”,从字面就可以看出其含义——关键帧,这与Flash中的含义一致。利用CSS3制作动画效果其原理与Flash一样,我们需要定义关键帧处的状态效果,由CSS3来驱动产生动画效果。
  • NULL 博文链接:https://onestopweb.iteye.com/blog/2357839
  • Android代码-Keyframes

    2019-08-07 02:59:55
    Keyframes Keyframes is a combination of (1) an ExtendScript script that extracts image animation data from an After Effects file and (2) a corresponding rendering library for Android and iOS. ...
  • #关键帧滑块 创建全高和全宽背景图像滑块的纯 css 方法。 包括 2 个演示/方法。 ##Dependencies 项目使用 scss + Bourbon。 ##了解更多 在上了解更多信息 ##Demo 当然,为什么不呢
  • 动画Keyframes

    2016-06-03 14:20:50
    控件改变大小过程中的动画效果
  • NULL 博文链接:https://onestopweb.iteye.com/blog/2314115
  • jquery绑定 css3 animation-keyframes关键帧动画,,,,,,,
  • motus - 滚动时模仿CSS关键帧(keyframes)的动画库
  • keyframes动画下滑不返回.keyframes动画下滑后返回,keyframes执行一次结束,不返回
  • tns plugin add nativescript-keyframes 演示应用 想快速潜水吗? 查看。 看起来像 。 否则,请继续阅读。 您可以通过键入npm run demo.ios.device从项目的根目录运行演示应用程序。 API 从XML使用此插件最有意义...
  • 本文讨论CSS3的过渡transition和动画animation属性。包括transition过渡属性使用说明、注意事项;animation动画属性的使用说明、注意事项,@keyframes规则定义;案例演示。

      继上篇“CSS3新特性详解(三):CSS3 2D转换和3D转换 transform 变形使用详解 ”后,本文继续CSS3剩余部分:CSS3的过渡transition和动画animation属性。曾几何时我们要在页面上实现动画只能:

    • 做个flash动画或gif图片;
    • js动画,比如要实现元素水平位移动画,可以搞个定时器,元素的left从 -1000px 开始每隔 200ms 增加 100px。

      现如今,我们只要使用CSS3的transition、animation属性及@keyframes定义,就可以轻松实现元素的动画效果。下面让我们一起看下transition、animation属性的使用详解。

    一、transition 过渡

    CSS3 过渡是元素从一种样式逐渐改变为另一种的效果。语法定义上transition有两种实现方式:

    • 使用transition简写属性
    • 使用transition-property、transition-duration、transition-timing-function和transition-delay组合属性。

    1、transition简写属性

    语法: transition: property duration timing-function delay;
    参数说明:

    • property:none|all|css属性,如height,width等;
    • duration:过渡时长,可以是秒或毫秒,1s表示1秒,500ms表示500毫秒;
    • timing-function:时间曲线函数,如:linear,ease,ease-in等;
    • delay:延迟时间,1s表示1秒后进行过渡动画。

    案例:

    transition: margin-right 2s; /* 过渡效果作用在margin-right属性上,持续2秒 */
    transition: margin-right 2s .5s;  /* 变换效果延迟0.5秒执行 */
    transition: margin-right 2s ease-in-out; /* 变换效果时间曲线函数采用 ease-in-out */
    transition: margin-right 2s ease-in-out .5s; /* 变换效果时长2秒,时间曲线函数ease-in-out,延迟0.5秒执行 */
    transition: margin-right 2s, color 1s; /*多个属性变换效果用 逗号 分隔*/
    transition: all 1s ease-out; /*所有属性都有变换效果,持续1秒*/
    

    2、使用transition-property、transition-duration、transition-timing-function和transition-delay组合属性

    div
    {
        transition-property: width;
        transition-duration: 1s;
        transition-timing-function: linear;
        transition-delay: 2s;
    }
    

    变换效果在width属性上,效果时长1秒,时间曲线函数为linear,延迟2秒执行。

    1)transition-property,应用过渡的 CSS 属性的名称

    语法: transition-property: none|all| property; 默认值all

    • none,没有属性会获得过渡效果;
    • all,所有属性都将获得过渡效果;
    • property,定义应用过渡效果的 CSS 属性名称,多个属性以逗号分隔。
    2)transition-duration,完成过渡效果需要花费的时间

    语法: transition-duration: time;
    说明: 完成过渡效果需要花费的时间(以秒或毫秒计)。默认值是 0,表示没有动画效果。

    3)transition-timing-function 过渡效果的时间曲线函数

    语法: transition-timing-function: linear|ease|ease-in|ease-out|ease-in-out|cubic-
    bezier(n,n,n,n); 默认值ease
    各曲线函数说明:

    • linear,匀速变换(等于 cubic-bezier(0,0,1,1))。
    • ease,慢–快--慢过渡效果(cubic-bezier(0.25,0.1,0.25,1))。
    • ease-in,以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))。
    • ease-out 以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))。
    • ease-in-out 规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))。
    • cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值。
    4)transition-delay 动画延迟,指定何时开始过渡效果

    语法: transition-delay: time;
    说明: transition-delay值以秒为单位(S)或毫秒(ms),默认值0,没有延迟。

    3、transition 过渡动画生效的2个必要参数

    • transition-property 不能是none,可以不设置(默认all)
    • transition-duration 必须设置,因为其默认值是0

    transition案例,请参考本文最后案例代码部分。

    二、animation 动画

    方便理解,先看个简单的案例:

    @keyframes myfirst
    {
    from {background: red;}
    to {background: yellow;}
    }
    div:hover {animation: myfirst 2s}
    

    div鼠标移上去会有背景色从红色渐变到黄色的动画过渡效果,持续2秒。我们可以看出,要实现animation 动画效果,需要2步:

    • 定义@keyframes 规则
    • 使用animation属性,animation可以采用简写方式,也可以采用animation-name、animation-duration等复合方式。

    1、@keyframes 规则定义

    @keyframes规则定义了动画是怎么动的,如上文的背景色变换,假设我们定义的是top属性变动则可以实现元素上下运动等。

    语法:@keyframes animationname {keyframes-selector {css-styles;}}

    描述
    animationname必需。定义动画的名称。
    keyframes-selector必需。动画时长的百分比。合法的值:
    0-100%
    from(与 0% 相同)
    to(与 100% 相同)
    css-styles必需。一个或多个合法的 CSS 样式属性。

    一个案例:

    @keyframes myfirst{
    	0%   {background: red; left:0px; top:0px;}
    	25%  {background: yellow; left:200px; top:0px;}
    	50%  {background: blue; left:200px; top:200px;}
    	75%  {background: green; left:0px; top:200px;}
    	100% {background: red; left:0px; top:0px;}
    }
    div:hover{animation: myfirst 4s;}
    

    案例说明,这个动画时长4s:

    • 0% 动画开始,background: red; left:0px; top:0px;
    • 25% 动画进行到4s*25% = 1s,background: yellow; left:200px; top:0px;
    • 50% 动画进行到4s*50% = 2s,background: blue; left:200px; top:200px;
    • 75% 动画进行到4s*75% = 3s,background: green; left:0px; top:200px;
    • 100% 动画结束,background: red; left:0px; top:0px;

    2、animation 属性详解

    从语法定义上来说,实现animation动画,有2种方式:

    • animation:简写方式,除了 animation-play-state 属性,其它属性都可以实现
    • animation-name,animation-duration等组合方式

    2.1 animation 简写方式

    语法: animation: name duration timing-function delay iteration-count direction;

    说明: 默认值为:none 0 ease 0 1 normal;

    • name必须指定,否则没有动画效果;
    • duration必须指定,其默认值是0;
    • 简写方式不能设置animation-play-state属性。

    一个案例:

    animation:mymove 5s infinite; /* 动画无限播放 */
    animation:mymove 5s 3; /* 动画播放3次 */
    animation:mymove 5s 3 alternate; /* 1,3次正向播放;第2次反向播放 */
    

    2.2 animation-* 复合方式

    animation-name:mymove;
    animation-duration:5s;
    

    类似上述css,每项animation-*单独设置,我们称之为复合方式,常用的共有6个属性,具体如下:

    1)animation-name, 需要绑定到选择器的 keyframe 名称

    • 语法: animation-name: keyframename|none;
    • 说明: keyframename @keyframes 名称,默认值“none”,参数必须指定,none表示无动画效果

    2)animation-duration,动画时长

    • 语法: animation-duration: time;
    • 说明: 定义动画完成一个周期所需要的时间,以秒或毫秒计,默认值"0",参数必须指定,0表示无动画效果

    3)animation-timing-function,时间曲线(速度)函数

    • 语法: animation-timing-function: value;
    • 说明: 可选参数,默认值“ease”,其值可以是linear,ease,ease-in,ease-out,ease-in-out,cubic-bezier(n,n,n,n),同transition-timing-function

    4)animation-delay,动画开始前等待的时间

    • 语法: animation-delay: time;
    • 说明: 可选参数,定义动画开始前等待的时间,以秒或毫秒计。默认值是 0

    5)animation-iteration-count,动画播放循环次数

    • 语法: animation-iteration-count: n|infinite;
    • 说明: n定义动画播放次数的数值,infinte表示无限次播放,默认值为1,只播放一次

    6)animation-direction,动画是否应该轮流反向播放

    • 语法: animation-direction: normal|alternate;
    • 说明: normal默认值,正常播放;alternate表示动画应该轮流反向播放,会在奇数次数(1、3、5 等)正常播放,而在偶数次数(2、4、6 等)反向播放;需要注意的是animation-iteration-count为1,animation-direction无效
    animation-name: myfirst;
    animation-duration: 4s;
    animation-iteration-count: 5;
    animation-direction: alternate
    

    动画@keyframs name为myfirst;完成一个周期所需时间为4妙;播放次数5次;第1,3,5次正向播放,第2,4次反向播放。

    三、一个完整的DEMO

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>CSS3-过渡和动画</title>
    	<link rel="stylesheet" href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
    <style> 
    .table {margin-top: 60px}
    .transition_box .box{position: relative; width: 100px; height: 80px; background: #e4f0f5; text-align: center; line-height: 80px;}
    .transition_box .box:hover {background: #909; color: #fff; width: 150px}
    
    @keyframes myfirst{
    	0%   {background: #e4f0f5; left:0px; top:0px;}
    	25%  {background: yellow; left:200px; top:0px;}
    	50%  {background: blue; left:200px; top:120px;}
    	75%  {background: green; left:0px; top:120px;}
    	100% {background: red; left:0px; top:0px;}
    }
    .animation_box .box{position: relative; width: 300px; height: 200px;}
    .animation_box .rect{background: #e4f0f5; position: absolute; width: 100px; height: 80px; left: 0; top: 0; text-align: center; line-height: 80px;}
    </style>
    </head>
    
    <body>
    	<div class="container">
    <table class='table table-bordered transition_box'>
    	<tr>
    		<td>
    			<div class="box" style="transition:width 2s">Box1</div>
    		</td>
    		<td>
    			<div class="box" style="transition:width 2s .5s">Box2</div>
    		</td>
    		<td>
    			<div class="box" style="transition:width 2s ease-in-out">Box3</div>
    		</td>
    		<td>
    			<div class="box" style="transition:all 2s ease-out">Box4</div>
    		</td>
    	</tr>
    	<tr>
    		<td>transition:width 2s</td>
    		<td>transition:width 2s .5s</td>
    		<td>width 2s ease-in-out</td>
    		<td>transition:all 2s ease-out</td>
    	</tr>
    </table>
    <table class='table table-bordered transition_box'>
    	<tr>
    		<td>
    			<div class="box" style="transition-property:width; transition-duration:2s">Box1</div>
    		</td>
    		<td>
    			<div class="box" style="transition-property:width; transition-duration:2s; transition-delay:0.5s">Box2</div>
    		</td>		
    		<td>
    			<div class="box" style="transition-property:width; transition-duration:2s;transition-timing-function:ease-in-out">Box3</div>
    		</td>
    		<td>
    			<div class="box" style="transition-duration:2s; transition-timing-function:ease-out">Box4</div>
    		</td>
    	</tr>
    	<tr>
    		<td>transition-property:width<br>transition-duration:2s</td>
    		<td>transition-property:width<br>transition-duration:2s<br>transition-delay:0.5s</td>
    		<td>transition-property:width; <br>transition-duration:2s<br>transition-timing-function:ease-in-out</td>
    		<td>transition-duration:2s;<br>transition-timing-function:ease-out</td>
    	</tr>
    </table>
    <table class='table table-bordered animation_box'>
    	<tr>
    		<td>
    			<div class="box box1"><div class='rect' style="animation: myfirst 4s">Box1</div></div>
    		</td>
    		<td>
    			<div class="box"><div class="rect" style="animation: myfirst 4s infinite">Box2</div></div>
    		</td>		
    		<td>
    			<div class="box"><div class="rect" style="animation: myfirst 4s 5 alternate">Box2</div></div>
    		</td>
    	</tr>
    	<tr>
    		<td>animation: myfirst 4s</td>
    		<td>animation: myfirst 4s infinte</td>
    		<td>animation: myfirst 4s 5 alternate</td>
    	</tr>
    </table>
    
    <table class='table table-bordered animation_box'>
    	<tr>
    		<td>
    			<div class="box box1"><div class='rect' style="animation-name: myfirst;animation-duration:4s">Box1</div></div>
    		</td>
    		<td>
    			<div class="box"><div class="rect" style="animation-name: myfirst;animation-duration:4s;animation-iteration-count:infinite">Box2</div></div>
    		</td>		
    		<td>
    			<div class="box"><div class="rect" style="animation-name: myfirst;animation-duration:4s;animation-iteration-count:5;animation-direction:alternate">Box3</div></div>
    		</td>
    	</tr>
    	<tr>
    		<td>animation-name: myfirst;<br>animation-duration:4s</td>
    		<td>animation-name: myfirst;<br>animation-duration:4s<br>animation-iteration-count:infinite</td>
    		<td>animation-name: myfirst;<br>animation-duration:4s<br>animation-iteration-count:infinite<br>animation-direction:alternate</td>
    	</tr>
    </table>
    </body>
    </html>
    
    展开全文
  • RULE==6 CSSKeyframesRule // CSSRule.KEYFRAMES_RULE ==7 对应于@keyframes at-rule的完整的关键帧 CSSKeyframeRule // CSSRule.KEYFRAME_RULE==8 对应于@keyframes at-rule的单个关键帧 CSSNamespaceRule //CSS...

    先看效果

    已有的css样式 动画效果是2s时间由透明变为不透明;
    在这里插入图片描述
    在这里插入图片描述
    修改后的动画效果
    在这里插入图片描述
    在这里插入图片描述

    styleSheets对象

    Document.styleSheets 只读属性,
    返回一个由 StyleSheet 对象组成的 StyleSheetList,
    每个 StyleSheet 对象都是一个文档中链接或嵌入的样式表。
    
    let styleSheetList = document.styleSheets;
    它是一个 StyleSheet 对象的有序集合。
    styleSheetList.item(index) 或 styleSheetList[index] 
    根据它的索引(索引基于0)返回一个单独的样式表对象。
    

    CSSRule 对象

    cssRule接口表示一个CSS规则。规则存在若干种类型。

    CSSStyleRule  //  CSSRule.STYLE_RULE ==1
     // CSSRule.CHARSET_RULE ==2
    CSSImportRule //CSSRule.IMPORT_RULE ==3
    CSSMediaRule  // @media 规则  CSSRule.MEDIA_RULE==4
    CSSFontFaceRule //CSSRule.FONT_FACE_RULE ==5
    CSSPageRule //CSSRule.PAGE_RULE==6
    CSSKeyframesRule // CSSRule.KEYFRAMES_RULE ==7  对应于@keyframes at-rule的完整的关键帧
    CSSKeyframeRule // CSSRule.KEYFRAME_RULE==8 对应于@keyframes at-rule的单个关键帧
    CSSNamespaceRule //CSSRule.NAMESPACE_RULE==10
    CSSCounterStyleRule
    CSSDocumentRule
    CSSSupportsRule //CSSRule.SUPPORTS_RULE ==12
    CSSFontFeatureValuesRule
    CSSViewportRule
    

    其中 CSSKeyframesRule 规则 定义了 @keyframes 动画的完整的关键帧;

    查找动画关键帧样式位置

    通过遍历 找到 document.styleSheets下的cssRules获取属性表对象

    //例如
    document.styleSheets[0].cssRules
    //返回 CSSRuleList
    

    在这里插入图片描述
    其中type代表cssRule规则类型的值,而type 等于7 代表完整的动画帧的规则CSSKeyframesRule
    所以我们要修改动画样式 需要先找到 type==7的列表;

    修改动画关键帧样式

    方法

    //样式表中插入一条规则。
    appendRule(rule, index) //Chrome  IE9及以上 FireFox
    insertRule(rule, index) // 暂未找到那个版本支持
    addRule(selector, rules, [index])// IE 特有(以下,以上被删除了)
    //样式表中插入删除条规则。
    removeRule([index]) IE // IE 特有( ie9 以下,以上被删除了)
    deleteRule(index) //Chrome  IE9及以上 FireFox
    

    注意:修改时一定要找到所有的样式表修改;如下图存在两个同名的样式表,
    在这里插入图片描述
    两个同名的样式表都要修改,否则样式不生效;
    如下图修改是只修改了最后一列样式表
    f12查看样式修改成功!
    但是会出现复用当前组件时,复用两次以上的动画不生效!

    在这里插入图片描述
    注意:由于vue需要打包,vue会把css生成的样式打包成link引入的方式,当使用link引入方式时无法通过cssRules进行查找

    在这里插入图片描述
    所以这里我们需要使用appendRule或者insertRule插入一条规则;
    在这里插入图片描述

    vue 代码参考 (细节请自行修改)

    data
        animationName: "",
          sheetsIndex: "",
          keyframeIndex: "",
          // 动画总耗时 (毫秒)
          animationDuration: "350",
          // 动画关键帧数组
          animationArr: [],
    
    methods
        // 改变窗口动画
        changeAnimation() {
          // 动画加载一定程度后再加载视图,否则性能差,出现掉帧情况
          this.viewShow = false;
          setTimeout(() => {
            this.viewShow = true;
          }, (this.animationDuration / 100) * 75);
          // 设置动画
          this.animationArr = [
            `0% {
              left: ${String(window.$clientX) ? window.$clientX + "px" : "0%"};
              top: ${String(window.$clientY) ? window.$clientY + "px" : "100%"};
              width: 0px;
              height: 0px;
              opacity: 0.5;
            }`,
            `100% {
               left: ${this.left};
               top: ${this.top};
               width: ${this.width};
               height: ${this.height};
               opacity: 1;
            }`,
          ];
          let selector = ".no_router_popup_animation";
          this.changeKeyframes(selector, "noRouterPopup", this.animationArr);
        },
        // 寻找 css不是link引入的
        findNoLinkSheet() {
          var styleSheets = document.styleSheets;
          console.log("进入了findNoLinkSheet",styleSheets);
    
          let ssLength = styleSheets.length;
          for (var i = 0; i < ssLength; i++) {
            try {
              // 谷歌、火狐浏览器空时返回错误; uc浏览器 空为null;
              styleSheets[i].cssRules || styleSheets[i].rules;
              if (!styleSheets[i].cssRules && !styleSheets[i].rules) {
                continue;
              }
            } catch {
              continue;
            }
            this.sheetsIndex = i;
            console.log("this.sheetsIndex", this.sheetsIndex);
            break;
          }
        },
        // 添加新动画
        addKeyframes(selector, animName, AnimationArr) {
          var styleSheets = document.styleSheets;
          let animationString = "";
          AnimationArr.forEach((item) => {
            // keyframesArr[k].insertRule(item);
            animationString += item;
          });
          let Keyframes = `@keyframes ${animName}{${animationString}}`;
          console.log("Keyframes");
    
          if (styleSheets[this.sheetsIndex].appendRule) {
            styleSheets[this.sheetsIndex].insertRule =
              styleSheets[this.sheetsIndex].appendRule;
          }
          styleSheets[this.sheetsIndex].insertRule(Keyframes);
          console.log(
            "styleSheets[this.sheetsIndex]",
            styleSheets[this.sheetsIndex]
          );
    
          this.animationName = animName;
          // 动画总耗时设置
          let selectorDom = document.querySelectorAll(selector);
          selectorDom[selectorDom.length - 1].style.animationDuration =
            this.animationDuration + "ms";
          // 重新指定动画名字使之生效
          selectorDom[
            selectorDom.length - 1
          ].style.animationName = this.animationName;
        },
        // 查找动画keyframe
        findKeyframesRule(animName) {
          var styleSheets = document.styleSheets;
          // console.log("styleSheets", styleSheets);
    
          let ssLength = styleSheets.length;
          for (var i = 0; i < ssLength; i++) {
            try {
              // 谷歌、火狐浏览器空时返回错误; uc浏览器 空为null;
              styleSheets[i].cssRules || styleSheets[i].rules;
              if (!styleSheets[i].cssRules && !styleSheets[i].rules) {
                continue;
              }
            } catch {
              continue;
            }
            var oRules = styleSheets[i].cssRules
              ? styleSheets[i].cssRules
              : styleSheets[i].rules;
    
            let oRulesLength = oRules.length;
            for (var x = 0; x < oRulesLength; x++) {
              // 跳过name为 undefined
              if (!oRules[x].name) {
                continue;
              }
              let rule = oRules[x];
    
              if (
                String(rule.name).indexOf(animName) != -1 &&
                (rule.type == CSSRule.KEYFRAMES_RULE ||
                  rule.type == CSSRule.WEBKIT_KEYFRAMES_RULE)
              ) {
                // console.log("rule.name", rule.name);
                // console.log("oRules", oRules);
    
                // 递归查找keyframes
                return this.findKeyframesCallBack(oRules, animName, x);
              }
            }
          }
        },
        /**
         * @name: 递归查找keyframes
         * @test: test font
         * @msg:
         * @param {*} oRules document.styleSheets[i].cssRules||document.styleSheets[i].rules
         * @param {*} animName 修改的动画名称
         * @param {*} index  cssRules或rules数组下标
         * @param {*} ruleArr  保存具有与animName的keyframes数组
         * @return {*} ruleArr
         */
        findKeyframesCallBack(oRules, animName, index, ruleArr = []) {
          let ruleItem = oRules[index];
          if (
            String(ruleItem.name).indexOf(animName) != -1 &&
            (ruleItem.type == CSSRule.KEYFRAMES_RULE ||
              ruleItem.type == CSSRule.WEBKIT_KEYFRAMES_RULE)
          ) {
            this.animationName = ruleItem.name;
            this.keyframeIndex = index;
            ruleArr.push(ruleItem);
            return this.findKeyframesCallBack(oRules, animName, index + 1, ruleArr);
          } else {
            return ruleArr;
          }
        },
        // 改变已有动画
        changeKeyframes(selector, animName, AnimationArr) {
          var keyframesArr = [];
          try {
            keyframesArr = this.findKeyframesRule(animName);
          } catch {
            return;
          }
          // 如果找不到则添加一个动画
          if (!keyframesArr) {
            console.log("!keyframesArr", !keyframesArr);
            this.findNoLinkSheet();
            this.addKeyframes(selector, animName, AnimationArr);
            return;
          }
          const keyframesArrLength = keyframesArr.length;
          // 遍历修改所有的keyframes 不全部修改会出现动画不生效 或者只生效一次
          for (var k = 0; k < keyframesArrLength; k++) {
            // 兼容ie (暂未验证)
            if (!keyframesArr[k].deleteRule) {
              keyframesArr[k].deleteRule = keyframesArr[k].removeRule;
            }
            // 删除已经存在的开始和结束帧
            keyframesArr[k].deleteRule("0%");
            keyframesArr[k].deleteRule("100%");
            // 兼容谷歌与火狐
            if (keyframesArr[k].appendRule) {
              keyframesArr[k].insertRule = keyframesArr[k].appendRule;
            }
            // // 兼容ie (暂未验证)
            // else if (keyframesArr[k].addRule) {
            //   keyframesArr[k].insertRule = function (rule, index = 0) {
            //     let selector = rule.split("{")[0];
            //     let selectorLength = selector.length;
            //     let style = rule.slice(selectorLength);
            //     return keyframesArr[k].addRule(selector, style, index);
            //   };
            // }
    
            // 添加动画
            AnimationArr.forEach((item) => {
              keyframesArr[k].insertRule(item);
            });
          }
    
          var styleSheets = document.styleSheets;
    
          // this.animationName = animName;
          // 动画总耗时设置
          let selectorDom = document.querySelectorAll(selector);
          selectorDom[selectorDom.length - 1].style.animationDuration =
            this.animationDuration + "ms";
          // 重新指定动画名字使之生效
          selectorDom[
            selectorDom.length - 1
          ].style.animationName = this.animationName;
        },
    
    展开全文
  • Keyframes . plugin ( Pathfinder ) ; 用法 简单贝塞尔曲线 Keyframes.bezierPath( rules, [startX,startY], [endX,endY], [pullX,pullY] ); 超级简单的例子: var rules = Keyframes . bezierPath ( { name : '...
  • 在@keyframes规则中指定CSS样式时,动画将在特定时间逐渐从当前样式更改为新样式。要使动画生效,必须将动画绑定到元素。以下示例将“example”动画绑定到 元素。动画将持续4秒,并且会逐渐将 元素的背景颜色从...

    CSS动画

    CSS动画允许大多数HTML元素的动画,而无需使用JavaScript或Flash!

    动画浏览器支持

    IE10+支持该属性的。其他低浏览器版本数字后跟-ms-, -webkit-,-moz-或-o-指定使用前缀的第一个版本。

    什么是CSS动画?

    动画允许元素从一种样式逐渐变为另一种样式。您可以根据需要多次更改所需的CSS属性。要使用CSS动画,必须首先为动画指定一些关键帧。关键帧保持元素在特定时间具有的样式。

    @keyframes规则

    在@keyframes规则中指定CSS样式时,动画将在特定时间逐渐从当前样式更改为新样式。要使动画生效,必须将动画绑定到元素。以下示例将“example”动画绑定到

    元素。动画将持续4秒,并且会逐渐将
    元素的背景颜色从“红色”更改为“×××”:

    web前端开发学习Q-q-u-n: 767273102 ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法(详细的前端项目实战教学视频)
    
    /* 动画代码 */
    @keyframes example {
      from {background-color: red;}
      to {background-color: yellow;}
    }
    /* 要将动画应用到的元素 */
    div {
      width: 100px;
      height: 100px;
      background-color: red;
      animation-name: example;
      animation-duration: 4s;
    }
    

    注意:该animation-duration属性定义动画完成所需的时间。如果animation-duration未指定该属性,则不会发生动画,因为默认值为0(0秒)。 在上面的示例中,我们通过使用关键字“from”和“to”(表示0%(开始)和100%(完成))指定样式何时更改。也可以使用百分比。通过使用百分比,您可以根据需要添加任意数量的样式更改。当动画完成25%,完成50%时,以及动画100%完成时,以下示例将更改

    元素的背景颜色:

    
    
    web前端开发学习Q-q-u-n: 731771211,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法(详细的前端项目实战教学视频)
    /* 动画代码 */
    @keyframes example {
      0%   {background-color: red;}
      25%  {background-color: yellow;}
      50%  {background-color: blue;}
      100% {background-color: green;}
    }
    /* 将动画应用到元素 */
    div {
      width: 100px;
      height: 100px;
      background-color: red;
      animation-name: example;
      animation-duration: 4s;
    }
    

    以下示例将在动画完成25%,完成50%时再次更改背景颜色和

    元素的位置,并在动画完成100%时再次更改:

    /* 动画代码 */
    @keyframes example {
      0%   {background-color:red; left:0px; top:0px;}
      25%  {background-color:yellow; left:200px; top:0px;}
      50%  {background-color:blue; left:200px; top:200px;}
      75%  {background-color:green; left:0px; top:200px;}
      100% {background-color:red; left:0px; top:0px;}
    }
    /* 将动画应用到元素 */
    div {
      width: 100px;
      height: 100px;
      position: relative;
      background-color: red;
      animation-name: example;
      animation-duration: 4s;
    }
    

    ##延迟动画
    animation-delay属性指定动画开始的延迟。以下示例在开始动画之前有2秒的延迟:

    div {
      width: 100px;
      height: 100px;
      position: relative;
      background-color: red;
      animation-name: example;
      animation-duration: 4s;
      animation-delay: 2s;
    }
    
    

    也允许负值。如果使用负值,动画将像已经播放N秒一样开始。在以下示例中,动画将像已经播放2秒一样开始:

    div {
      width: 100px;
      height: 100px;
      position: relative;
      background-color: red;
      animation-name: example;
      animation-duration: 4s;
      animation-delay: -2s;
    }
    

    设置动画应运行多少次

    animation-iteration-count属性指定动画应运行的次数。以下示例将在停止之前运行动画3次:

    div {
      width: 100px;
      height: 100px;
      position: relative;
      background-color: red;
      animation-name: example;
      animation-duration: 4s;
      animation-iteration-count: 3;
    }
    

    以下示例使用值“infinite”使动画永远继续:

    div {
      width: 100px;
      height: 100px;
      position: relative;
      background-color: red;
      animation-name: example;
      animation-duration: 4s;
      animation-iteration-count: infinite;
    }
    

    以反向或备用循环运行动画

    animation-direction属性指定动画是应该向前,向后还是以交替周期播放。 animation-direction属性可以具有以下值:
    normal - 动画正常播放(前进)。这是默认的
    reverse - 动画以反向播放(向后)
    alternate - 动画首先向前播放,然后向后播放
    alternate-reverse - 首先向后播放动画,然后向前播放动画
    以下示例将以反向(向后)运行动画:

    div {
      width: 100px;
      height: 100px;
      position: relative;
      background-color: red;
      animation-name: example;
      animation-duration: 4s;
      animation-direction: reverse;
    }
    

    以下示例使用值“alternate”使动画首先向前运行,然后向后运行:

    div {
      width: 100px;
      height: 100px;
      position: relative;
      background-color: red;
      animation-name: example;
      animation-duration: 4s;
      animation-iteration-count: 2;
      animation-direction: alternate;
    }
    

    以下示例使用值“alternate-reverse”使动画首先向后运行,然后向前运行:

    div {
      width: 100px;
      height: 100px;
      position: relative;
      background-color: red;
      animation-name: example;
      animation-duration: 4s;
      animation-iteration-count: 2;
      animation-direction: alternate-reverse;
    }
    

    指定动画的速度曲线

    animation-timing-function属性指定动画的速度曲线。 animation-timing-function属性可以具有以下值:
    ease - 指定慢启动的动画,然后快速,然后缓慢结束(这是默认设置)
    linear - 指定从开始到结束具有相同速度的动画
    ease-in - 指定启动慢的动画
    ease-out - 指定慢速结束的动画
    ease-in-out - 指定开始和结束较慢的动画
    cubic-bezier(n,n,n,n) - 允许您在cubic-bezier函数中定义自己的值
    以下示例显示了可以使用的一些不同速度曲线:

    web前端开发学习Q-q-u-n: 767273102 ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法(详细的前端项目实战教学视频)
    
    #div1 {animation-timing-function: linear;}
    #div2 {animation-timing-function: ease;}
    #div3 {animation-timing-function: ease-in;}
    #div4 {animation-timing-function: ease-out;}
    #div5 {animation-timing-function: ease-in-out;}
    

    为动画指定填充模式

    CSS动画在播放第一个关键帧之前或播放最后一个关键帧之后不会影响元素。animation-fill-mode属性可以覆盖此行为 animation-fill-mode动画未播放时(在开始之前,结束之后或两者都有),该属性指定目标元素的样式。 animation-fill-mode属性可以具有以下值:
    none- 默认值。动画在执行之前或之后不会对元素应用任何样式
    forwards - 元素将保留由最后一个关键帧设置的样式值(取决于animation-direction和animation-iteration-count)
    backwards - 元素将获取由第一个关键帧设置的样式值(取决于动画方向),并在动画延迟期间保留此值
    both - 动画将遵循向前和向后的规则,在两个方向上扩展动画属性
    以下示例允许

    元素在动画结束时保留最后一个关键帧的样式值:

    div {
      width: 100px;
      height: 100px;
      background: red;
      position: relative;
      animation-name: example;
      animation-duration: 3s;
      animation-fill-mode: forwards;
    }
    

    以下示例允许

    元素获取动画开始前(动画延迟期间)第一个关键帧设置的样式值:

    div {
      width: 100px;
      height: 100px;
      background: red;
      position: relative;
      animation-name: example;
      animation-duration: 3s;
      animation-delay: 2s;
      animation-fill-mode: backwards;
    }
    

    以下示例允许

    元素在动画开始之前获取由第一个关键帧设置的样式值,并在动画结束时保留最后一个关键帧的样式值:

    div {
      width: 100px;
      height: 100px;
      background: red;
      position: relative;
      animation-name: example;
      animation-duration: 3s;
      animation-delay: 2s;
      animation-fill-mode: both;
    }
    

    动画简写属性
    下面的示例使用了六个动画属性:

    div {
      animation: example 5s linear 2s infinite alternate;
    }
    

    对web前端这门技术感兴趣的小伙伴可以加入到我们的学习圈来,工作第六个年头了,与大家分享一些学习方法,实战开发需要注意的细节。767-273-102 秋裙。从零基础开始怎么样学好前端。都是一群有梦想的人,我们可能在不同的城市,但我们会一起结伴同行前端前端前端
    CSS动画属性
    下表列出了@keyframes规则和所有CSS动画属性:

    属性描述
    @keyframes指定动画代码
    animation设置所有动画属性的简写属性
    animation-delay指定动画开始的延迟
    animation-direction指定动画是向前播放、向后播放还是交替播放
    animation-duration指定动画完成一个循环需要多长时间
    animation-fill-mode指定动画不播放时元素的样式(在动画开始前、结束后或同时播放)
    animation-iteration-count指定动画播放的次数
    animation-name指定@keyframes动画的名称
    animation-play-state指定动画是运行还是暂停
    animation-timing-function指定动画的速度曲线
    展开全文
  • 现在来记录下先来讲下项目是基于Vue现要在keyframes中动态的传递高度(top)。最后的效果如下图(主要涉及到动画效果,中间部分左右两边不说): ### 主要思路 使用animation配合@keyframes来使用上下移动动画 **...
  • -moz-keyframes 之类的东西就不能识别,然后自动退出了 提示:[ERROR] parser.less: Unrecognised input [/Path/To/Less.less:65:0]</p><p>该提问来源于开源项目:fouber/static-resource-digest-...
  • } }` var rulesFalse = ` @keyframes changeWidth4 { to { background-size: ${isFalse}% 100%; } }` // 获取规则并进行改变 var sheet = document.styleSheets[0] sheet.insertRule(ruleTrue, 0) sheet.insertRule...
  • Keyframes介绍使用

    千次阅读 2019-06-26 09:04:52
    在CSS3中其主要以“@keyframes”开头,后面紧跟着是动画名称加上一对花括号“{…}”,括号中就是一些不同时间段样式规则。 @keyframes changecolor{ 0%{ background: red; } 50%{ background: red; } 100%{...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,906
精华内容 17,562
关键字:

keyframes