1. CSS3帧动画
animation动画除了可以实现补间动画外,还可以完成逐帧动画。
在animation的属性中,有个属性 animation-timing-function 一共具有如下这些值
CSS
贝塞尔缓动就是完成补间动画的,比如流畅的缩放、位置移动等动画。
但是逐帧动画没有补间效果的,它不是电脑根据初始和结束状态的差异自动生成中间的过渡帧,而是每一帧都是关键帧,需要自己定义每一帧的状态。
比如像下面这样的图,就只能通过逐帧动画来实现运动效果↓
这几个属性值就是用来处理逐帧动画的:
CSS
steps(number,position) ,有两个参数。
number表示动画的段数。关键帧的数量=段数+1。
position这个比较难理解,有两个值:end和start。end是默认值。
先看一个效果。
两个小球,从0px运动到400px,分为了4个动画步骤,有5个关键帧。第一个是start模式,第二个是end模式。
发现start模式是时间一开始,直接进入第二个关键帧状态,然后顺利顺利走完全程。
end模式有点傻,时间一开始,从第一个关键帧开始跑,结果时间结束了,才走完第四个关键帧,没有完成全部路程就over了。
所以start和end的名字和它所表示的含义刚好相反。
比如执行次数或者填充模式。
为上面的小球加上infinite,可以看出start模式第二次开始的运动都是从第二个关键帧开始的。
加上forwards模式则变得不一样了,forwards是向前的单词意思,但是表示的则是保留动画最后的运动状态,意思和功能也是相反的。
第二个end模式的小球终于有机会走完全程了。
所以,当为end模式设置了forwards的时候要小心,因为它其实多走了一步。
1、这头熊的原始素材一共有8个步骤。
所以使用 steps(8,end) 是最好的方式,因为如果使用 steps(8,start) ,则第一帧不能执行,最后一帧会闪白,图片消失。
因为要一直运动,所以需要加上infinite,当执行完最后一张图的时候,再返回到第一张图,形成一个连贯的完步。
通过背景图片的 background-position 的改变,形成熊的运动。
CSS
可以打开codepen编辑器,把运动时间设置更大一点,可以看到慢动作,一帧一帧是如何显示的。
2、这个logo一共有24张图片
但是logo只运动一次,并且停在结束状态,根据end模式的特征,如果加上forwards的话,会多运动一步。
所以,这里是 steps(23,end) ,为什么是23步,而不是24步,因为forwards模式对它的影响。要想最后一步还要看到图片,那么背景图片的挪动就要少挪动一个图片的宽度。图片整个宽度4800px,每一张图200px的宽高。所以背景图片只需要往左边挪动-4600px即可。
CSS
通过上面的案例可以看出,对象的运动效果由逐帧绘制的图片的间距所影响。间距一样,则速度一样。利用steps不能去改变现成的图片帧与帧之间的速度。
但是利用 step-end 或者 step-start 却是可以的。
3、 step-end 的特别用处
其实 step-end 等价于 steps(1,end) , step-start 等价于 steps(1,start) 。
只有一个步骤的逐帧动画,却可以利用好时间的改变和距离的改变做出速度不同的效果来。
熊从左边快速奔跑出来,一共跑了六步,一步比一步速度放慢。然后在原地踏步。
首先这是一个逐帧动画,但是要实现不同的速度,又没有办法改变原来素材图片与图片之间的距离,所以要使用另外的办法。
第一个完步时间间隔小,left的值间隔大,相当于速度快。背景图片往左移动一张,left的值往右改变一次,熊实现往前奔跑。
CSS
第二个完步的时间间隔稍微大点,left的间隔小了一点,速度变慢了一些。依次类推,速度逐渐放缓。第二个完步又从第一帧开始。
CSS
所以说利用step-end还是可以做出速度不一样的逐帧动画的。
在线制作雪碧图: https://www.toptal.com/developers/css/sprite-generator
2. flash如何在动画前补帧
步骤2:插入——新建元件(图形),用椭圆工具画出一个圆球(按住shift键)。步骤3:回到场景1,选择“视图——网格——显示网格”
步骤4:选择“窗口——库”,将元件库调出来。
步骤5:选择第一帧,将小球从元件库中拖到场景中。
步骤6:在第20 帧上插入关键帧。
步骤7:移动小球,使其开始位置与结束位置不同。
3. 简答题 什么是flash动画,如何理解动画中的关键帧以及帧
Flash是美国的MACROMEDIA公司于1999年6月推出的优秀网页动画设计软件。它是一种交互式动画设计工具,用它可以将音乐,声效,动画以及富有新意的界面融合在一起,以制作出高品质的网页动态效果。Flash动画设计的三大基本功能是整个Flash动画设计知识体系中最重要、也是最基础的,包括:绘图和编辑图形、补间动画和遮罩。这是三个紧密相连的逻辑功能,并且这三个功能自Flash诞生以来就存在。Flash动画说到底就是“遮罩+补间动画+逐帧动画”与元件(主要是影片剪辑)的混合物,通过这些元素的不同组合,从而可以创建千变万化的效果。
与胶片一样,Flash 文档也将时长分为帧。 在时间轴中,使用这些帧来组织和控制文档的内容。 在时间轴中放置帧的顺序将决定帧内对象在最终内容中的显示顺序。
关键帧是这样一个帧:在其中定义对动画的对象属性所做的更改,或者包含 ActionScript 代码以控制文档的某些方面。 也可以在时间轴中排列关键帧,以便编辑动画中事件的顺序。 Flash能补间,即自动填充关键帧之间的帧,以便生成流畅的动画。
通过关键帧,不用画出每个帧就可以生成动画,因此,关键帧使动画的创建更为方便。
如果有相关的FLASH或者Animate操作及代码方面的问题可以私信或留言,尽力解答!
4. 整理涵盖很全很广的前端知识点
HTML、CSS相关
html5新特性、语义化
浏览器渲染机制、重绘、重排
网页生成过程:
重排(也称回流): 当 DOM 的变化影响了元素的几何信息( DOM 对象的位置和尺寸大小),浏览器需要重新计算元素的几何属性,将其安放在界面中的正确位置,这个过程叫做重排。 触发:
重绘: 当一个元素的外观发生改变,但没有改变布局,重新把元素外观绘制出来的过程,叫做重绘。 触发:
重排优化建议:
transform 不重绘,不回流 是因为 transform 属于合成属性,对合成属性进行 transition/animate 动画时,将会创建一个合成层。这使得动画元素在一个独立的层中进行渲染。当元素的内容没有发生改变,就没有必要进行重绘。浏览器会通过重新复合来创建动画帧。
css盒子模型
所有 HTML 元素可以看作盒子,在CSS中, "box model" 这一术语是用来设计和布局时使用。 CSS 盒模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边距,边框,填充,和实际内容。 盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
css样式优先级
!important>style>id>class
什么是BFC?BFC的布局规则是什么?如何创建BFC?BFC应用?
BFC 是 Block Formatting Context 的缩写,即块格式化上下文。 BFC 是CSS布局的一个概念,是一个环境,里面的元素不会影响外面的元素。 布局规则:Box是CSS布局的对象和基本单位,页面是由若干个Box组成的。元素的类型和display属性,决定了这个Box的类型。不同类型的Box会参与不同的 Formatting Context 。 创建:浮动元素 display:inline-block position:absolute 应用: 1.分属于不同的 BFC 时,可以防止 margin 重叠 2.清除内部浮动 3.自适应多栏布局
DOM、BOM对象
BOM(Browser Object Model) 是指浏览器对象模型,可以对浏览器窗口进行访问和操作。使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。 使 JavaScript 有能力与浏览器"对话"。 DOM (Document Object Model) 是指文档对象模型,通过它,可以访问 HTML 文档的所有元素。 DOM 是 W3C (万维网联盟)的标准。 DOM 定义了访问 HTML 和 XML 文档的标准: "W3C 文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。" W3C DOM 标准被分为 3 个不同的部分:
什么是 XML DOM ? XML DOM 定义了所有 XML 元素的对象和属性,以及访问它们的方法。 什么是 HTML DOM? HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。
JS相关
js数据类型、typeof、instanceof、类型转换
闭包(高频)
闭包是指有权访问另一个函数作用域中的变量的函数 ——《JavaScript高级程序设计》
当函数可以记住并访问所在的词法作用域时,就产生了闭包,
即使函数是在当前词法作用域之外执行 ——《你不知道的JavaScript》
原型、原型链(高频)
原型: 对象中固有的 __proto__ 属性,该属性指向对象的 prototype 原型属性。
原型链: 当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么它就会去它的原型对象里找这个属性,这个原型对象又会有自己的原型,于是就这样一直找下去,也就是原型链的概念。原型链的尽头一般来说都是 Object.prototype 所以这就是我们新建的对象为什么能够使用 toString() 等方法的原因。
特点: JavaScript 对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。
this指向、new关键字
this 对象是是执行上下文中的一个属性,它指向最后一次调用这个方法的对象,在全局函数中, this 等于 window ,而当函数被作为某个对象调用时,this等于那个对象。 在实际开发中, this 的指向可以通过四种调用模式来判断。
new
作用域、作用域链、变量提升
继承(含es6)、多种继承方式
(1)第一种是以 原型链的方式来实现继承 ,但是这种实现方式存在的缺点是,在包含有引用类型的数据时,会被所有的实例对象所共享,容易造成修改的混乱。还有就是在创建子类型的时候不能向超类型传递参数。
(2)第二种方式是使用 借用构造函数 的方式,这种方式是通过在子类型的函数中调用超类型的构造函数来实现的,这一种方法解决了不能向超类型传递参数的缺点,但是它存在的一个问题就是无法实现函数方法的复用,并且超类型原型定义的方法子类型也没有办法访问到。
(3)第三种方式是 组合继承 ,组合继承是将原型链和借用构造函数组合起来使用的一种方式。通过借用构造函数的方式来实现类型的属性的继承,通过将子类型的原型设置为超类型的实例来实现方法的继承。这种方式解决了上面的两种模式单独使用时的问题,但是由于我们是以超类型的实例来作为子类型的原型,所以调用了两次超类的构造函数,造成了子类型的原型中多了很多不必要的属性。
(4)第四种方式是 原型式继承 ,原型式继承的主要思路就是基于已有的对象来创建新的对象,实现的原理是,向函数中传入一个对象,然后返回一个以这个对象为原型的对象。这种继承的思路主要不是为了实现创造一种新的类型,只是对某个对象实现一种简单继承,ES5 中定义的 Object.create() 方法就是原型式继承的实现。缺点与原型链方式相同。
(5)第五种方式是 寄生式继承 ,寄生式继承的思路是创建一个用于封装继承过程的函数,通过传入一个对象,然后复制一个对象的副本,然后对象进行扩展,最后返回这个对象。这个扩展的过程就可以理解是一种继承。这种继承的优点就是对一个简单对象实现继承,如果这个对象不是我们的自定义类型时。缺点是没有办法实现函数的复用。
(6)第六种方式是 寄生式组合继承 ,组合继承的缺点就是使用超类型的实例做为子类型的原型,导致添加了不必要的原型属性。寄生式组合继承的方式是使用超类型的原型的副本来作为子类型的原型,这样就避免了创建不必要的属性。
EventLoop
JS 是单线程的,为了防止一个函数执行时间过长阻塞后面的代码,所以会先将同步代码压入执行栈中,依次执行,将异步代码推入异步队列,异步队列又分为宏任务队列和微任务队列,因为宏任务队列的执行时间较长,所以微任务队列要优先于宏任务队列。微任务队列的代表就是, Promise.then , MutationObserver ,宏任务的话就是 setImmediate setTimeout setInterval
原生ajax
ajax 是一种异步通信的方法,从服务端获取数据,达到局部刷新页面的效果。 过程:
事件冒泡、捕获(委托)
event.stopPropagation() 或者 ie下的方法 event.cancelBubble = true; //阻止事件冒泡
ES6
Vue
简述MVVM
MVVM 是 Model-View-ViewModel 缩写,也就是把 MVC 中的 Controller 演变成 ViewModel。Model 层代表数据模型, View 代表UI组件, ViewModel 是 View 和 Model 层的桥梁,数据会绑定到 viewModel 层并自动将数据渲染到页面中,视图变化的时候会通知 viewModel 层更新数据。
谈谈对vue生命周期的理解?
每个 Vue 实例在创建时都会经过一系列的初始化过程, vue 的生命周期钩子,就是说在达到某一阶段或条件时去触发的函数,目的就是为了完成一些动作或者事件
computed与watch
watch 属性监听 是一个对象,键是需要观察的属性,值是对应回调函数,主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作,监听属性的变化,需要在数据变化时执行异步或开销较大的操作时使用
computed 计算属性 属性的结果会被缓存,当 computed 中的函数所依赖的属性没有发生改变的时候,那么调用当前函数的时候结果会从缓存中读取。除非依赖的响应式属性变化时才会重新计算,主要当做属性来使用 computed 中的函数必须用 return 返回最终的结果 computed 更高效,优先使用
使用场景 computed :当一个属性受多个属性影响的时候使用,例:购物车商品结算功能 watch :当一条数据影响多条数据的时候使用,例:搜索数据
v-for中key的作用
vue组件的通信方式
父子组件通信
父->子 props ,子->父 $on、$emit` 获取父子组件实例 parent、 parent 、children Ref 获取实例的方式调用组件的属性或者方法 Provide、inject` 官方不推荐使用,但是写组件库时很常用
兄弟组件通信
Event Bus 实现跨组件通信 Vue.prototype.$bus = new Vue() Vuex
跨级组件通信
$attrs、$listeners Provide、inject
常用指令
双向绑定实现原理
当一个 Vue 实例创建时,Vue会遍历data选项的属性,用 Object.defineProperty 将它们转为 getter/setter并且在内部追踪相关依赖,在属性被访问和修改时通知变化。每个组件实例都有相应的 watcher 程序实例,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher重新计算,从而致使它关联的组件得以更新。
v-model的实现以及它的实现原理吗?
nextTick的实现
vnode的理解,compiler和patch的过程
new Vue后整个的流程
思考:为什么先注入再提供呢??
答:1、首先来自祖辈的数据要和当前实例的data,等判重,相结合,所以注入数据的initInjections一定要在 InitState 的上面。2. 从上面注入进来的东西在当前组件中转了一下又提供给后代了,所以注入数据也一定要在上面。
vm.[Math Processing Error]mount(vm.mount(vm.options.el) :挂载实例。
keep-alive的实现
作用:实现组件缓存
钩子函数:
原理: Vue.js 内部将 DOM 节点抽象成了一个个的 VNode 节点, keep-alive 组件的缓存也是基于 VNode 节点的而不是直接存储 DOM 结构。它将满足条件 (pruneCache与pruneCache) 的组件在 cache 对象中缓存起来,在需要重新渲染的时候再将 vnode 节点从 cache 对象中取出并渲染。
配置属性:
include 字符串或正则表达式。只有名称匹配的组件会被缓存
exclude 字符串或正则表达式。任何名称匹配的组件都不会被缓存
max 数字、最多可以缓存多少组件实例
vuex、vue-router实现原理
vuex 是一个专门为vue.js应用程序开发的状态管理库。 核心概念:
你怎么理解Vue中的diff算法?
在js中,渲染真实 DOM 的开销是非常大的, 比如我们修改了某个数据,如果直接渲染到真实 DOM , 会引起整个 dom 树的重绘和重排。那么有没有可能实现只更新我们修改的那一小块dom而不要更新整个 dom 呢?此时我们就需要先根据真实 dom 生成虚拟 dom , 当虚拟 dom 某个节点的数据改变后会生成有一个新的 Vnode , 然后新的 Vnode 和旧的 Vnode 作比较,发现有不一样的地方就直接修改在真实DOM上,然后使旧的 Vnode 的值为新的 Vnode 。
diff 的过程就是调用 patch 函数,比较新旧节点,一边比较一边给真实的 DOM 打补丁。在采取 diff 算法比较新旧节点的时候,比较只会在同层级进行。 在 patch 方法中,首先进行树级别的比较 new Vnode 不存在就删除 old Vnode old Vnode 不存在就增加新的 Vnode 都存在就执行diff更新 当确定需要执行diff算法时,比较两个 Vnode ,包括三种类型操作:属性更新,文本更新,子节点更新 新老节点均有子节点,则对子节点进行 diff 操作,调用 updatechidren 如果老节点没有子节点而新节点有子节点,先清空老节点的文本内容,然后为其新增子节点 如果新节点没有子节点,而老节点有子节点的时候,则移除该节点的所有子节点 老新老节点都没有子节点的时候,进行文本的替换
updateChildren 将 Vnode 的子节点Vch和oldVnode的子节点oldCh提取出来。 oldCh和vCh 各有两个头尾的变量 StartIdx和EndIdx ,它们的2个变量相互比较,一共有4种比较方式。如果4种比较都没匹配,如果设置了 key ,就会用 key 进行比较,在比较的过程中,变量会往中间靠,一旦 StartIdx>EndIdx 表明 oldCh和vCh 至少有一个已经遍历完了,就会结束比较。
你都做过哪些Vue的性能优化?
你知道Vue3有哪些新特性吗?它们会带来什么影响?
更小巧、更快速 支持自定义渲染器 支持摇树优化:一种在打包时去除无用代码的优化手段 支持Fragments和跨组件渲染
模板语法99%保持不变 原生支持基于class的组件,并且无需借助任何编译及各种stage阶段的特性 在设计时也考虑TypeScript的类型推断特性 重写虚拟DOM 可以期待更多的编译时提示来减少运行时的开销 优化插槽生成 可以单独渲染父组件和子组件 静态树提升 降低渲染成本 基于Proxy的观察者机制 节省内存开销
检测机制 更加全面、精准、高效,更具可调试式的响应跟踪
实现双向绑定 Proxy 与 Object.defineProperty 相比优劣如何?
React
1、react中key的作用,有key没key有什么区别,比较同一层级节点什么意思?
2、你对虚拟dom和diff算法的理解,实现render函数
虚拟DOM 本质上是 JavaScript 对象,是对 真实DOM 的抽象表现。 状态变更时,记录新树和旧树的差异 最后把差异更新到真正的 dom 中 render函数:
3、React组件之间通信方式?
Context 提供了一个无需为每层组件手动添加 props ,就能在组件树间进行数据传递的方法.如果你只是想避免层层传递一些属性,组件组合( component composition )有时候是一个比 context 更好的解决方案。 5. 组件组合缺点:会使高层组件变得复杂
4、如何解析jsx
5、生命周期都有哪几种,分别是在什么阶段做哪些事情?为什么要废弃一些生命周期?
componentWillMount、componentWillReceiveProps、componentWillUpdate在16版本被废弃,在17版本将被删除,需要使用UNSAVE_前缀使用,目的是向下兼容。
6、关于react的优化方法
使用return null而不是CSS的display:none来控制节点的显示隐藏。保证同一时间页面的DOM节点尽可能的少。
不要使用数组下标作为key 利用 shouldComponentUpdate 和 PureComponent 避免过多 render function ; render 里面尽量减少新建变量和bind函数,传递参数是尽量减少传递参数的数量。 尽量将 props 和 state 扁平化,只传递 component 需要的 props (传得太多,或者层次传得太深,都会加重 shouldComponentUpdate 里面的数据比较负担),慎将 component 当作 props 传入
使用 babel-plugin-import 优化业务组件的引入,实现按需加载 使用 SplitChunksPlugin 拆分公共代码 使用动态 import ,懒加载 React 组件
7、绑定this的几种方式
8、对fiber的理解
9、setState是同步还是异步的
10、Rex、React-Rex
Rex的实现流程
用户页面行为触发一个 Action ,然后 Store 调用 Recer ,并且传入两个参数:当前 State 和收到的 Action 。 Recer 会返回新的 State 。每当 state 更新之后, view 会根据 state 触发重新渲染。
React-Rex:
Provider :从最外部封装了整个应用,并向 connect 模块传递 store 。 Connect :
11、对高阶组件的理解
高阶组件是参数为组件,返回值为新组件的函数。 HOC 是纯函数,没有副作用。 HOC 在 React 的第三方库中很常见,例如 Rex 的 connect 组件。
高阶组件的作用:
12、可以用哪些方式创建 React 组件?
React.createClass()、ES6 class 和无状态函数
13、 React 元素与组件的区别?
组件是由元素构成的。元素数据结构是普通对象,而组件数据结构是类或纯函数。
Vue与React对比?
数据流:
react 主张函数式编程,所以推崇纯组件,数据不可变,单向数据流,
vue 的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom。
监听数据变化实现原理 :
组件通信的区别:jsx和.vue模板。
性能优化
vuex 和 rex 之间的区别?
从实现原理上来说,最大的区别是两点:
Rex 使用的是不可变数据,而 Vuex 的数据是可变的。 Rex 每次都是用新的 state 替换旧的 state ,而 Vuex 是直接修改
Rex 在检测数据变化的时候,是通过 diff 的方式比较差异的,而 Vuex 其实和Vue的原理一样,是通过 getter/setter 来比较的(如果看 Vuex 源码会知道,其实他内部直接创建一个 Vue 实例用来跟踪数据变化)
浏览器从输入url到渲染页面,发生了什么?
网络安全、HTTP协议
TCP UDP 区别
Http和Https区别(高频)
GET和POST区别(高频)
理解xss,csrf,ddos攻击原理以及避免方式
XSS ( Cross-Site Scripting , 跨站脚本攻击 )是一种代码注入攻击。攻击者在目标网站上注入恶意代码,当被攻击者登陆网站时就会执行这些恶意代码,这些脚本可以读取 cookie,session tokens ,或者其它敏感的网站信息,对用户进行钓鱼欺诈,甚至发起蠕虫攻击等。
CSRF ( Cross-site request forgery ) 跨站请求伪造 :攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
XSS避免方式:
CSRF 避免方式:
DDoS 又叫分布式拒绝服务,全称 Distributed Denial of Service ,其原理就是利用大量的请求造成资源过载,导致服务不可用。
5. 在Flash中帧是制作动画的核心,请问帧的类型包括哪几种,每一种的作用是什么
● 空帧
空帧不是真正的帧,而是些矩形框,在这些矩形框里可以放入帧。在设计Flash动画时,没有内容的帧占了时间轴的大部分,所以时间轴运行到空帧时就会停止放映。
● 关键帧
关键帧是特殊的帧,用来定义动画中的变化,包括对象的运动和特点(如大小和颜色),在场景中添加或删除对象以及帧动作的添加。任何时候,当用户希望动画发生改变,或者希望发生某种动作,必须使用关键帧。
显然,逐帧动画需要许多关键帧,因为用户必须单独编辑每一帧。另一方面,一个过渡动画,只需要两个关键帧:一个是开始帧,一个是结束帧。在起始关键帧和结束关键帧之间的变化由Flash计算,不需要附加关键帧。
● 普通帧
普通帧也称为静态帧,显示同一层上最后一个关键帧的内容。在时间轴上,关键帧必须总是在普通帧的前面。前置关键帧的内容显示在随后的每个普通帧中,直到到达另一个关键帧为止。
用户希望在动画中始终保持可见的背景图像就是一个很好的例子,可以说明在哪里使用普通帧。将背景放在时间轴开始处的关键帧上,在其后放上所需数量的普通帧以延长电影的时间。将背景添加到电影的frame l上,但是不在后面加上普通帧,那么,背景将仅在frame l里可见。在已填充的关键帧后面的普通帧为银灰色,在空关键帧后的普通帧为白色。
● 过渡帧
过渡帧包含了一系列帧,其中至少有两个关键帧: 一个决定对象在起始点的外观,另一个决定对象在终止点的外观,而在这之间可以有任意多的过渡帧。在两个关键帧之间的帧表示了对象在过渡点的外观。
利用Flash可以处理两种类型的过渡:运动过渡和形状过渡。利用运动过渡来处理动画中的符号、群组或文本框的尺寸、位置、旋转等;利用形状过渡将一个简单形状变形,形状过渡仅仅对场景级对象有效,对符号或群组无效。如果在形状过渡中使用文字,首先需将文本分解。一个场景中多个对象的同时运动过渡需要为每个过渡使用一层。不能同时为同一层上的单独对象设置运动过渡。但是,用户可以同时在不同层上为它们设置过渡。
运动过渡帧至少需要用两个关键帧来标识,这两个关键帧被带有一个黑箭头和浅蓝背景的中间过渡帧分开;形状过渡帧至少需要用两个关键帧来标识,它们被带有一个黑箭头和浅绿背景的中间过渡帧分开;有问题的过渡帧,例如丢失的关键帧,需要用虚线来标识。
转----回答者: zhangnuo2004 | 六级
6. 在动画制作中,如何理解“帧”这个概念啊
帧就是每秒的图片数.比如你做一个动画.肯定是一张图片一张图片的连起来的啊. 比如24帧/秒.就是说把一秒分成了24张图片.帧数越高说明画面越流畅.. 就像电影一样.和拍照是一样的.把你一秒的动作分成几十张照片再连起来就形成了动的效果.
记得采纳啊
7. 前端(过渡动画)
css3 新增的有:过度动画阴影,圆角
transition:width(宽度产生动画)
1 在哪产生动画
2 动画消耗的时间
3 运动曲线
4 延长多长时间才开始执行动画,(不写就不执行)规定过度效果的曲线,默认是ease,多个用,(逗号)隔开,过度属性:transition
圆角: border - radius,如果不想写那么多的话就用
transition:all is ease
transition:all is linear 匀速
transition:all is ease 开始和结束 慢速 中间加速
transition :all is ease - in . 开始的时候慢,越来越快,然后停止;
transition : all is ease - out . 开始时快,越来越慢,然后停止;
transition : al is ease-in -out .开始和结束时慢速
如果子元素超出父元素时 : overflow : hidden;
rgba(0 ,0, 0,0.5 );半透明;
line-height 行高;margin : 20px,间距20px,info信息
tansfrom 变形
1.位移 , 2.缩放 , 3.旋转 , 4.斜切 ,
1.位移 transition(50px,50px) 水平和垂直;
是不会影响文档流的 ,自己动 不会影响下边的;
2.旋转 transition:rotate(30deg)沿着z 轴旋转 ;
3.缩放 transitiion :scale(0.5,0.2) 宽度 高度;
4.斜切 transition : skew(0,45deg ) x轴不动,y轴斜切45度;水平和垂直;
margin : 50px(上边距) auto 0;
元素旋转
transfrom : rotate(45deg) 默认是沿着z轴旋转;
transfrom : perspective(800px ) rotate(45deg)
perspective 设置透视距离,经验数 800px ,比较符合人眼的透视距离;
transfrom -style : perseve-3d ,设置盒子按3d空间显示;
变形中间点
div : nthchild{} ;第几个孩子;
transfrom-origin:left center, 设置变形的中心点 (左中);
transfrom-origin:left top,设置变形的中心点 (左上);
背面可见
margin : 上,右,下,左,
如果不想变的话 加过度 transfom:all 500ms ease;
800是经验值 起始角度 rotatey (0deg);
有透视效果 transfrom -style : preserve -3d;
设置盒子背面是否可见
backface - visibity : hidden; 背面不可见 (隐藏不可见);
图片翻面时另一张图片
animation 动画
多个设置用空格隔开;
animation : moving 1s ease(运动曲线) 1s(延迟) 5(动的次数 ) alternat(是否返回)
alternate 设置是否返回;
infinite 不限次数;
动画运岁动的状态 : 暂停 animation-play-state : paused;
动画运动的状态 : 运行 animation-play-state : running;
forwards 动画结束最后状态;
both 都 起始和结束都设置;
@keyframes 创建关键动画时;声明一个动画,给他后面随便起一个名字;
动画一个状态到另一个状态;
隐藏 overflow : hidden;
相对定位 :position : relative;
绝对定位 : positiion : absolute;
动画定义的关键字:
@keyframes 名字{ 起始状态 from [ left 0px]
终止状态 to [ left 0px,]}
from 开始 ,to 结束;
循环一直走 :infinte ;
transfrom : scaley;
多帧动画
位移动画 transfrom : tanslateY(Y轴) 10px;
圆角 border - ralios : 50px;
原路返回 : alternate;
缩放 transfrom : scale(0.5 0.5)
box-shadow : 17px(X轴) 13px(Y轴)12px(羽化) 14px(扩展) p
8. 逐帧动画和补间动画各自的优缺点
首先你要知道动画流程,然后再按需求来选。
这里以动画片为例。一般是绘制线稿导入电脑清稿,再用动画软件制作。
再以前一直是按照导入的关键帧来绘制补间帧。
各公司就想把补间给搞的好点,自动化,但是- -,失败了,微软是设置自动补间AI,说真的很方便,但是得不到认可,因为太过机械,2D的这种补间还不如直接3D搞然后2D输出。
至于ADOBE也是如此,元件补间,图形补间,骨骼动画,ADOBE补间,都无法达到2D动画要求。
相对的日系动画软件比较干脆,直接不搞补间,转门去搞关键帧的画面优化,补间全靠绘制,所以日系的动画软件都很小。上手也容易当然前提是能画的好。
同样动画流程里,要做动画片还是要全靠画,也就是你说的逐帧动画,一般是绘制关键帧,最好的形式是在纸上画只画线稿,然后用扫描仪或手机拍照(用手机架或者板凳等固定拍照),然后用PS处理,调整色阶调整对比度,让画面干净线条清晰(这个可以PS录制成脚本,以后直接执行脚本就可以批量处理不用自己1张张搞),然后导入动画软件,看你说的应该是FLASH类似,所以我以FLASH来说,导入图片后选位图转矢量,然后删除白色,然后点平滑,来平滑线条,颜色选黑色,这样线稿就出来了。然后用红蓝绿的线条(铅笔工具)画出高光阴影和要封闭的线。处理好关键帧后,用洋葱皮按钮开参考模式,把2个关键帧中间的动作画出来,同样是线稿,也是要红蓝绿线。画完后,用颜色上色,颜色是纯色,这个一般是先做人设,用人设的配色来,可以把颜色都点到单独一层,吸管吸取上色。最后全选,再点删除线条,这样红蓝绿线就没了。动画也就完成了。
而在网页动画里,很多都不需要自然和艺术,所以机械形式就可以,一般选用,影片剪辑,这个主要是因为网页属于前端,影片剪辑可以用代码控制,一般每个部件需要单独分层转为元件,在动画流程里很繁琐,但是对于不针对艺术也不能绘画的人来说还是很方便。
总的来说,逐帧是万能的可以很好的对画面控制,技术娴熟的可以很快制作,并且动作自然。而影片剪辑的补间,只能固定的放大缩小旋转移动等,适合对画面不需要太多追求,追求快速制作的人。
9. Canvas 全是帧动画吗,有没有没有像CSS3那种缓动动画
1,对前端来说简单易用;
2,声明式的动画,浏览器内核更容易进行优化,也避免了 JavaScript 的低性能和性能波动(GC或者JIT导致的停顿)导致掉帧;
3,部分加速的CSS动画(Transform & Opacity)可以完全由内核的合成器驱动,完全使用GPU加速,对CPU的开销很小;
4,随着内核合成器的持续演进,可加速的CSS动画有望越来越多;
10. 在Flash中,动画类型主要包括哪两种其特点是什么
在Flash中,动画类型主要包括补间动画跟逐帧动画。
补间动画需要在两个关键帧中间需要做“补间动画”,才能实现图画的运动;插入补间动画后两个关键帧之间的插补帧是由计算机自动运算而得到的。
逐帧动画是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。
Flash是美国的MACROMEDIA公司于1999年6月推出的优秀网页动画设计软件。它是一种交互式动画设计工具,用它可以将音乐,声效,动画以及富有新意的界面融合在一起,以制作出高品质的网页动态效果。
Flash动画涉及领域:
一、手机领域的开发
转向手机领域的开发将会要求你对精确的界面设计和CPU的使用分布的操控能力更高。但也意味更大更广泛的使用空间。事实上手机和Pocket PC的分界已越来越不明显,你必须为每一款手机设计一个不同的界面,因为它们的屏幕大小各有不同。
二、游戏开发
事实上,Flash中的游戏开发已经进行了多年的尝试。但至今为止仍然停留在中、小型游戏的开发上。游戏开发的很大一部份都受限于它的CPU能力和大量代码的管理。不过可喜的是,Flash Player 7 运行时性能提高了 2 至 5 倍;而且基于 Java 类的结构的类的开始也奠定了这些基础。
三、Web应用服务
很难界定Web应用服务的范围究竟有多大。似乎它拥有无限的可能。随着网络的逐渐渗透,基于客户端-服务器的应用设计也开始逐渐受到欢迎,并且一度被誉为最具前景的方式。这种方式你可能要花更多的时间在服务器的后台处理能力和架构上,并且将它们与前台保持同步。
以上内容参考网络-补间动画
以上内容参考网络-逐帧动画
以上内容参考网络-Flash动画