当前位置:首页 » 网页前端 » 前端过渡与动画的区别
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

前端过渡与动画的区别

发布时间: 2022-10-09 06:34:35

❶ CSS animation 与 CSS transition 有何区别

一、指代不同

1、animation :属性是一个简写属性,用于设置六个动画属性。

2、transition:属性是一个简写属性,用于设置四个过渡属性。

二、特点不同

1、animation :animation: name ration timing-function delay iteration-count direction;规定需要绑定到选择器的 keyframe 名称。规定完成动画所花费的时间,以秒或毫秒计。

2、transition:transition: property ration timing-function delay;规定设置过渡效果的 CSS 属性的名称。规定完成过渡效果需要多少秒或毫秒。


三、要求不同

1、animation :请始终规定 animation-ration 属性,否则时长为 0,就不会播放动画了。

2、transition:始终设置transition-ration属性,否则时长为 0,就不会产生过渡效果。


❷ 简述过渡特效与视频特效的区别

过度特效
就是只镜头之间一个转换,过渡到下一个镜头是用的一些特效,如飞入,溶解,百叶窗
视频特效
就是指
镜头里面的特殊效果,
如三维动画里面的
水,火,云,烟,一些粒子效果。车撞飞的爆炸
原子弹爆炸
楼房的倒塌
都是视频(影视)特效
小学过一点点影视特效
嘿嘿

❸ CSS animation 与 CSS transition 有何区别

transition和animation的一些区别。
transition是过渡效果,animation是动画。
transition只能指定起始状态(from)和结束状态(to),animation可以有多个关键帧设置。
transition需要有动作(hover等)来触发才能执行,animation可以自己执行。
两者支持的属性不同,animation多出iteration-count,direction,play-state等属性,增加可控性。
transition的作用就是“平滑改变CSS值”
(资料来源:HTML5学堂)

❹ css3中的动画功能transition和animation两种的区别是什么

css中动画功能分为transition和animation两种,这个两种方法都可以通过改变css中的属性值来产生动画效果
transition:只能实现两个简单值之间的过渡
animation:通过引用keyframes关键帧来实现复杂动画。by三人行慕课

❺ 简述过渡特效与视频特效的区别

过度特效 就是只镜头之间一个转换,过渡到下一个镜头是用的一些特效,如飞入,溶解,百叶窗

视频特效 就是指 镜头里面的特殊效果, 如三维动画里面的 水,火,云,烟,一些粒子效果。车撞飞的爆炸 原子弹爆炸 楼房的倒塌 都是视频(影视)特效

小学过一点点影视特效 嘿嘿

❻ CSS animation 与 CSS transition 有何区别

animation(动画)是可以循环运行的,transition(过渡)只能单次运行;
前者可以主动运行(意思就是网页一打开动画就可以自己自动运行),后者则是被动运行(比如需要鼠标移到元素上才会产生过渡效果);
前者可以利用任何css属性来产生动画,而后者则只能利用可量化的css属性(比如width、height等)来产生过渡效果;
暂时就想到这么多了,有没有其他欢迎大家补充。
其实从名字你就能看到区别了啊,“过渡”就是在两种状态之间产生一系列中间状态,比方说一个元素由小变大,如果是瞬间变化,会给人一种生硬的感觉,而如果在这个过程中添加一个由小逐渐变大的短暂效果,就会变得柔和许多。而“动画”,这个就不用多说了吧,大家都是童年过来的,动画片啊,这怎么能是区区“过渡”所能比拟的呢?

❼ 开发者选项窗口动画和过渡动画区别

窗口动画和过渡动画是指在窗口(activity或dialog)切换时的显示动画,窗口动画的范围相对较广,包括activity和dialog,而过渡动画只包括activity。

? 第一种方法是调用overridePendingTransition的方法,记得要在startActivity之前调用,还可以用startActivity(Intent, Bundle)设置Bundle来实现,这种可以跨Context,而overridePendingTransition只能在当前app内实现,具体做法是ActivityOptions.makeCustomAnimation(context, enterResId, exitResId).toBundle(),这种方法要求系统是4.1以后的。这两种方法实现的都是过渡动画。

? 前面这些方法都只能做activity的动画,要做dialog的动画,就必须用窗口动画。方法是设置style,然后dialog.getWindow().setWindowAnimations(R.style.MyStyle)或者dialog.getWindow().getAttributes().windowAnimations = R.style.MyStyle;这样就可以在弹出dialog的时候播放动画了。窗口动画也可以作用在activity上,style的设置一样,代码也差不多,直接在activity内就可以调用getWindow这条方法。style还有另外一种做法:

? 这种设置的是过渡动画,只对activity有用,对dialog没用。(除了用getWindow来设置动画资源外,还可以在你的Theme里添加一个item,item的name是android:windowAnimationStyle,然后指定上面的一种style)。

? 从原理上看,窗口动画和过渡动画其实就是系统在切换窗口时读取相应的动画资源,上面的所有做法本质上就是在替换那些资源。开发者需要处理的是如何选择,是窗口动画还是过渡动画。如果是dialog,只有窗口动画可选,也只能通过style来完成。如果是activity,就两种动画都可以,但大多情况下还是用过渡动画,因为通过像overridePendingTransition这些api可以很简单的实现,而如果想把动画应用到整个Activity,用style就更方便,至于用上面哪种style,其实没什么影响。

? 在实际的开发中,其实并不提倡用上面这些方法,因为手机的设置可以关闭这两种动画(在开发者选项那里),你没法保证app一定能显示动画。对于activity动画来说,可以在新的activity初始化结束后启动常规的动画,但这种方法要求你必须等到窗口的相关view初始化结束,但什么时候结束是无法预测的,这和手机性能有关,所以你可以设置定时器来播放,而对于dialog就没有其他解决的方法了。

❽ CSS animation 与 CSS transition 有何区别

Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画。但只有两个关键贞。开始,结束。

Animation:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画。可以设置多个关键贞。

Transition与Animation区别:

transition需要触发一个事件,而animation在不需要触发任何事件的情况下也可以显式的随着时间变化来改变元素css的属性值,从而达到一种动画的效果。


Transition:

transition属性是一个简单的动画属性,非常简单非常容易用。可以说它是animation的简化版本,是给普通做简单网页特效用的。比如你有如下两个样式:

.position{

left:100px;

top:100px;

}

.animate{

-webkit-transition:left0.5sease-out;

left:500px;

top:500px;

}

其中animate的transition的属性的意思说:当left属性发生变化的时候,执行动画效果(仅仅基于left的属性变化,其他的属性不会加入到动画变化里面去);

首先css为position。当cssList增加animate或者替换position为animate的时候,元素的属性变化,触发webkit-transition,以指定属性变化前的值为起始值,变化后的属性为结束值,执行动画效果。这是一个简单的两点变化过程,大大简化了animation属性的复杂程度。

同时,如果在transition的动画当中,属性值有了新的变化,则会中断当前的动画执行,并将中断时的属性值提供给新的动画作为起始值来计算新的动画效果。

Animation:

在官方的Introction上介绍这个属性是transition属性的扩展。但是这个简单的介绍里面包含了不简单的东西:keyframes。

做过Flash动画的人都会知道,Flash里面有两个基础武器:时间轴和关键帧。而csskeyframes的出现,则是提供了flash世界里面的这两个属性的合集。看一个简单的keyframes的示例:

@keyframes'wobble'{

0%{

left:100px

}

30%{

left:300px;

}

100%{

left:500px;

}

}

.animate{

left:100px;

-webkit-animation:wobble0.5sease-out;

-webkit-animation-fill-mode:backwards;

}

上面这个代码展示了一个keyframes'wobble',其中0%代表在变化中不同时间点的属性值,可以较精确的控制动画变化中任何一个时间点的属性效果。而animation则根据这个keyframes提供的属性变化方式去计算元素动画当中的属性。与transition不同的是,keyframes提供更多的控制,尤其是时间轴的控制,这点让cssanimation更加强大,使得flash的部分动画效果可以由css直接控制完成,而这一切,仅仅只需要几行代码,也因此诞生了大量(比起flash来说算是大量了)基于css的animationtools,用来取代flash的动画部分。关于动画工具,可以参考Webstandards-basedAnimationTools.

另外在animation属性里面还有一个最重要的就是:animation-fill-mode,这个属性标示是以(from/0%)指定的样式还是以(to/100%)指定的样式为动画完成之后的样式。这个很方便我们控制动画的结尾样式,保证动画的整体连贯。

❾ Web前端知识体系简介

今天小编要跟大家分享的文章是关于Web前端知识体系简介。Web前端技术由html、css和javascript三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言。而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体系的脉络结构。本文将对Web前端知识体系进行简单的梳理,对应的每个知识点点到为止,不作详细介绍。目的是帮助大家审查自己的知识结构是否完善,如有遗漏或不正确的地方,希望共勉。下面来和小编一起看一看吧!

一、JAVASCRIPT篇


0、基础语法


Javascript基础语法包括:变量定义、数据类型、循环、选择、内置对象等。


数据类型有string,number,boolean,null,undefined,object等。其中,string,number和boolean是基础类型,null和undefined是JS中的两个特殊类型,object是引用类型。
Javascript可以通过typeof来判断基础数据类型,但不能够准确判断引用类型,
因此需要用到另外一个方法,那就是Object的toString,关于数据类型及其判断可以参考以下博客:数据类型详解和判断JS数据类型的四种方法


JS常用的内置对象有Date、Array、RegExp等。一般来讲,Date和Array用的最频繁,正则表达式RegExp是处理字符串的利器。
关于数据和正则表达式的用法可以参考博客:ES5对数组增强的9个API和JS正则表达式精简


1、函数原型链


Javascript虽然没有继承概念,但Javascript在函数Function对象中建立了原型对象prototype,并以Function对象为主线,从上至下,在内部构建了一条原型链。


简单来说就是建立了变量查找机制,当访问一个对象的属性时,先查找对象本身是否存在,如果不存在就去该对象所在的原型连上去找,直到Object对象为止,如果都没有找到该属性才会返回undefined。因此我们经常会利用函数的原型机制来实现JS继承。关于函数原型链可参考博客:JS原型对象和原型链


2、函数作用域


函数作用域就是变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。在JS中没有会块级作用域,只有函数作用域,因此JS中还存在着另外一种怪异现象,那就是变量提升。关于作用域的介绍请参考博客:函数的作用域和作用域链


3、函数指针this


this存在于函数中,它指向的是该函数在运行时被调用的那个对象。在实际项目中,遇到this的坑比较多,因此需要对this作深入的理解。


Function对象还提供了call、apply和bind等方法来改变函数的this指向,其中call和apply主动执行函数,bind一般在事件回调中使用,而call和apply的区别只是参数的传递方式不同。关于call,apply和bind的用户请参考博客:详解JS的call,apply和bind


4、构造函数new


JS中的函数即可以是构造函数又可以当作普通函数来调用,当使用new来创建对象时,对应的函数就是构造函数,通过对象来调用时就是普通函数。


普通函数的创建有:显式声明、匿名定义、newFunction()等三种方式。


当通过new来创建一个新对象时,JS底层将新对象的原型链指向了构造函数的原型对象,于是就在新对象和函数对象之间建立了一条原型链,通过新对象可以访问到函数对象原型prototype中的方法和属性。new的详细介绍请参考博客:理解JS中的new运算符


5、闭包


闭包其实是一个主动执行的代码块,这个代码块的特殊之处是可以永久保存局部变量,但又不污染全局变量,可以形成一个独立的执行过程,因此我们经常用闭包来定义组件。


关于闭包的介绍请参考:干货分享:让你分分钟学会JS闭包


6、单线程和异步队列


setTimeout和setInterval是JS内置的两个定时器,使用很简单,但这两个方法背后的原理却不简单。


我们知道,JS是单线程语言,在浏览器中,当JS代码被加载时,浏览器会为其分配一个主线程来执行任务(函数),主线程会形成一个全局执行环境,执行环境采用栈的方式将待执行任务按顺序依次来执行。


但在浏览器中有一些任务是非常耗时的,比如http请求、定时器、事件回调等,为了保证其他任务的执行效率不被影响,JS在执行环境中维护了一个异步队列(也叫工作线程),并将这些任务放入队列中进行等待,这些任务的执行时机并不确定,只有当主线程的任务执行完成以后,才会去检查异步队列中的任务是否需要开始执行。


这就是为什么setTimeout(fn,0)始终要等到最后执行的原因。关于单线程和异步队列问题请参考:setTimeout(0)


7、异步通讯Ajax技术


Ajax是浏览器专门用来和服务器进行交互的异步通讯技术,其核心对象是XMLHttpRequest,通过该对象可以创建一个Ajax请求。为了防止XSS攻击,浏览器对Ajax做了限制,不允许Ajax跨域请求服务器,就是只能访问当前域名下的url。


当然,如果确信你的站点不存在跨域的风险,可以在服务端主动开启跨域请求,也可以通过CORS或JSONP来实现。


JSONP是利用脚本(script)跨域能力来模拟Ajax请求。


CORS是一个W3C标准,全称是"跨域资源共享"(Cross-originresource
sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。关于CORS的介绍请参考:跨域资源共享
CORS详解


8、DOM对象document


document对象里保存着整个Web页面dom结构,在页面上所有的元素最终都会映射为一个dom对象。
document也提供了很多api来查找特定的dom对象,比如getElementById,querySelector等等。


9、事件系统Event


事件是用户与页面交互的基础,到目前为止,DOM事件从PC端的鼠标事件(mouse)发展到移动端的触摸事件(touch)
和手势事件(guesture)


由于DOM结构可能会多层嵌套,因此也衍生出了两种事件流:事件捕获和事件冒泡,后者最常用。利用事件冒泡机制可以实现很多功能,比如页面点击统计。关于两种事件流的介绍请参考:事件冒泡和捕获


除此之外,在页面初始化、滚动、隐藏、返回等操作时分别内置了onload/onDOMContentLoaded、onscroll、onvisibility和onhashchange等事件,如果想要捕获这些事件,需要通过addEventLisener/attachEvent来进行绑定。


10、全局对象window


在JS中,当一段JS代码在浏览器中被加载执行,JS引擎会在内容中构建一个全局执行环境,执行环境的作用是保证所有的函数能按照正确的顺序被执行,而window对象则是这个执行环境中的一个全局对象,window对象中内置了很多操作api和对象,document对象就是其中一个。关于JS执行环境的介绍请参考博客:深入理解JS执行细节


二、CSS篇


css是用来对html进行修饰的一门语言。


1、选择器


css的选择器有很多种,常用的有类选择器、标签选择器、ID选择器、后代选择器、群组选择器、伪类选择器(before/after)、兄弟选择器(+~)、属性选择器等等。


2、定位


定位一般有相对定位(relative)、绝对定位(absolute)、固定定位(fixed),
relative和absolute在移动端用的最多,fixed在移动端的兼容性有问题,因此不推荐使用,在移动端替代fixed的方案是
absolute+内部滚动。


3、浮动


设置float为left或right,就能使该元素脱离文档流,向左或向右浮动。一般在做宫格模式布局时会用到,如果子元素全部设置为浮动,则父元素是塌陷的,这时就需要清除浮动,清除浮动的方法也很多,常用的方法是在元素末尾加空元素设置clear:both,
更高级一点的就给父容器设置before/after来模拟一个空元素,还可以直接设置overflow:auto/hidden。除过浮动可以实现宫格模式,行内盒子(inline-block)和table也可以。


4、盒子模型


盒子模型是css最重要的一个概念,也是css布局的基石。
常见的盒子模型有块级盒子(block)和行内盒子(inline-block),盒子最关键的几个属性包括margin、border、padding和content,这几个元素可以设置盒子和盒子之间的关系以及盒子和内容之间的关系。还有一个问题是计算盒子的大小,需要注意的是,box-sizing属性的设置会影响盒子的width和height。只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。


5、Flex布局


Flex布局的容器是一个伸缩容器,首先容器本身会更具容器中的元素动态设置自身大小;然后当Flex容器被应用一个大小时(width和height),将会自动调整容器中的元素适应新大小。Flex容器也可以设置伸缩比例和固定宽度,还可以设置容器中元素的排列方向(横向和纵向)和是否支持元素的自动换行。有了这个神器,做页面布局的可以方便很多了。注意,设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。


6、transition(过渡)和transform(旋转)


应用transform可以对元素进行平移(translate)、旋转(rotate)、放大缩小(scale)、倾斜(skew)等处理,而transition使css属性值(包括transform)在一段时间内平滑的过渡。使用transition和transform就可以实现页面的滑动切换效果。


7、动画Animation


Animation首先需要设置一个动画函数,然后以这个动画的方式来改变元素的css属性之的变化,动画可以被设置为永久循环演示。
和transition相比,animation设置动画效果更灵活更丰富,二者还有一个区别是:transition只能通过主动改变元素的css值才能触发动画效果,而animation一旦被应用,就开始执行动画。


8、Sprite图


对于大型站点,为了减少http请求的次数,一般会将常用的小图标排到一个大图中,页面加载时只需请求一次网络,然后在css中通过设置background-position来控制显示所需要的小图标。


9、字体图标iconfont


所谓字体图标就是将常用的图标转化为字体资源存在文件中,通过在CSS中引用该字体文件,然后可以直接通过控制字体的css属性来设置图标的样式。


三、HTML篇


1、Web语义化和SEO


html
常规标签有html,head,body,div,span,table,ul,ol,dl,p,b,h1~h6,strong,form,input,img,em,i
等等,另外html5还新增了很多语义化的标签,比如header,acticle,aside,section,footer,audio,radio
等等。


Web语义化是指使用语义恰当的标签,使页面有良好的结构,页面元素有含义,能够让人和搜索引擎都容易理解。


SEO是指在了解搜索引擎自然排名机制的基础之上,对网站进行内部及外部的调整优化,改进网站在搜索引擎中关键词的自然排名,获得更多的展现量,吸引更多目标客户点击访问网站,从而达到互联网营销及品牌建设的目标。


搜索引擎通过爬虫技术获取的页面就是由一堆html标签组成的代码,,人可以通过可视化的方式来判断页面上哪些内容是重点,而机器做不到。但搜索引擎会根据标签的含义来判断内容的权重,因此,在合适的位置使用恰当的标签,使整个页面的语义明确,结构清晰,搜索引擎才能正确识别页面中的重要内容,并予以较高的权值。比如h1~h6这几个标签在SEO中的权值非常高,用它们作页面的标题就是一个简单的SEO优化。


2、本地存储


本地存储最原始的方式就是cookie,cookie是存放在本地浏览器的一段文本,数据以键值对的形式保存,可以设置过期时间。但是cookie
不适合大量数据的存储,因为每次请求一次页面,cookie都会发送给服务器,这使得cookie
速度很慢而且效率也不高。因此cookie的大小被限制为4k左右(不同浏览器可能不同,分HOST),如下所示:


·Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。


·Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。


·InternetExplorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。


在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。


html5提供了两种在客户端存储数据的新方法:localStorage和sessionStorage,它们都是以key/value
的形式来存储数据,前者是永久存储,后者的存储期限仅限于浏览器会话(session),即当浏览器窗口关闭后,sessionStorage中的数据被清除。


localStorage的存储空间大约5M左右(不同浏览器可能不同,分
HOST),这个相当于一个5M大小的前端页面的数据库,相比于cookie可以节约带宽,但localStorage在浏览器隐私模式下是不可读取的,当存储数据超过了localStorage的存储空间后会抛出异常。


此外,H5还提供了逆天的Websql和indexedDB,允许前端以关系型数据库的方式来存储本地数据,相对来说,这个功能目前应用的场景比较少,此处不作介绍。


3、浏览器缓存机制


浏览器缓存机制是指通过HTTP协议头里的Cache-Control(或Expires)和Last-Modified(或
Etag)等字段来控制文件缓存的机制。


Cache-Control用于控制文件在本地缓存有效时长。最常见的,比如服务器回包:Cache-Control:max-age=600
表示文件在本地应该缓存,且有效时长是600秒(从发出请求算起)。在接下来600秒内,如果有请求这个资源,浏览器不会发出HTTP
请求,而是直接使用本地缓存的文件。


Last-Modified是标识文件在服务器上的最新更新时间。下次请求时,如果文件缓存过期,浏览器通过If-Modified-Since
字段带上这个时间,发送给服务器,由服务器比较时间戳来判断文件是否有修改。如果没有修改,服务器返回304告诉浏览器继续使用缓存;如果有修改,则返回200,同时返回最新的文件。


Cache-Control通常与Last-Modified一起使用。一个用于控制缓存有效时间,一个在缓存失效后,向服务查询是否有更新。


Cache-Control还有一个同功能的字段:Expires。Expires的值一个绝对的时间点,如:Expires:Thu,10Nov
201508:45:11GMT,表示在这个时间点之前,缓存都是有效的。


Expires是HTTP1.0标准中的字段,Cache-Control是HTTP1.1
标准中新加的字段,功能一样,都是控制缓存的有效时间。当这两个字段同时出现时,Cache-Control是高优化级的。


Etag也是和Last-Modified一样,对文件进行标识的字段。不同的是,Etag
的取值是一个对文件进行标识的特征字串。在向服务器查询文件是否有更新时,浏览器通过If-None-Match
字段把特征字串发送给服务器,由服务器和文件最新特征字串进行匹配,来判断文件是否有更新。没有更新回包304,有更新回包200。Etag和
Last-Modified可根据需求使用一个或两个同时使用。两个同时使用时,只要满足基中一个条件,就认为文件没有更新。


另外有两种特殊的情况:


·
手动刷新页面(F5),浏览器会直接认为缓存已经过期(可能缓存还没有过期),在请求中加上字段:Cache-Control:max-age=0,发包向服务器查询是否有文件是否有更新。


·
强制刷新页面(Ctrl+F5),浏览器会直接忽略本地的缓存(有缓存也会认为本地没有缓存),在请求中加上字段:Cache-Control:no-cache(或
Pragma:no-cache),发包向服务重新拉取文件。


4、HTML5离线缓存


HTML5离线缓存又叫Application
Cache,是从浏览器的缓存中分出来的一块缓存区,如果要在这个缓存中保存数据,可以使用一个描述文件(manifest
file),列出要下载和缓存的资源。


manifest文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。manifest文件可分为三个部分:


-CACHEMANIFEST-在此标题下列出的文件将在首次下载后进行缓存


-NETWORK-在此标题下列出的文件需要与服务器的连接,且不会被缓存


-FALLBACK-在此标题下列出的文件规定当页面无法访问时的回退页面(比如404页面)


离线缓存为应用带来三个优势:


·离线浏览-用户可在应用离线时使用它们


·速度-已缓存资源加载得更快


·减少服务器负载-浏览器将只从服务器下载更新过或更改过的资源。


5、Canvas和SVG


Canvas通过Javascript来绘制2D图形。Canvas是逐像素进行渲染的。在Canvas
中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。


SVG是一种使用XML描述2D图形的语言。SVG基于XML,这意味着SVGDOM中的每个元素都是可用的。你可以为某个元素附加
JavaScript事件处理器。在SVG中,每个被绘制的图形均被视为对象。如果SVG对象的属性发生变化,那么浏览器能够自动重现图形。


Canvas和SVG相比,canvas更依赖于分辨率,不支持事件处理器,文本渲染能力弱,比较适合密集型游戏,其中的许多对象会被频繁绘制,而svg则比较适用于类似谷歌地图带有大型渲染区域的应用程序。


以上就是小编今天为大家分享的Web前端知识体系简介的文章,希望本篇文章能够对正在从事Web工作和学习Web前端知识的小伙伴们有所帮助。想要了解更多Web前端知识记得关注北大青鸟Web培训官网。最后祝愿小伙伴们工作顺利!


原文地址:#/onepixel/p/7021506.html