åå¦è åºè¯¥å¦ä½å¦ä¹ ç½ç«å¼åï¼
ä¸å¼å§ä¸å®è¦åæ¸ å端å¼ååå端å¼åï¼æ们æ¥åå«ä»ç»ä¸ä¸ã
å端
Webåºç¨è¢«åç±»å½ä¸ºåå¸å¼åºç¨ï¼ä¸è¬æ¯å®¢æ·ç«¯ââæå¡å¨ç»æï¼æ以æ们æä¸é¨åç代ç è¿è¡å¨å®¢æ·ç«¯ï¼å¦ä¸é¨å代ç è¿è¡å¨æå¡å¨ãé£äºå¨å®¢æ·ç«¯ä¸çåºç¨å°±æ¯å端ï¼é常æçå°±æ¯æ们çæµè§å¨ãæ常ç¨äºå端å¼åçææ¯æ¯HTML+CSS+JavaScriptï¼é«çº§çå端å¼å人åé常使ç¨è¿äºææ¯çç»åå¼ååºç¨çå端ï¼å¦ä¸ä¸ªå端ç常ç¨ææ¯å°±æ¯ä½¿ç¨Photoshop设计ï¼é åå ¶ä»ææ¯å ±åå®æWeb页é¢çå¶ä½ã
å端
å端å¼åè ç¼åé£äºè¿è¡å¨æå¡å¨ä¸ç代ç ï¼é常æ¥è¯´ï¼è¿é¨åçå·¥ä½éè¦åæ°æ®åºæ交éï¼æ¯å¦è¯»åæ°æ®ã读åæ件ãå®ç°ä¸å¡é»è¾çãæäºæ¶åï¼ä¸å¡é»è¾åå¨å¨å®¢æ·ç«¯ï¼è¿æ¶åå°å°±æ¯ç¨æ¥ä»¥Webæå¡çå½¢å¼æä¾æ°æ®åºä¸çæ°æ®ãå端å¼åè ä¸è¬éè¦ææ¡ä¸ç§Webç¼ç¨è¯è¨åä¸ä¸ªæ°æ®åºç®¡çç³»ç»ã
ä½ å¯ä»¥åæ¶ææ¡å端åå端çææ¯ï¼ä½å¤§å¤æ°Webå¼åè é½è¿æ¯æä¸å®çå好ååï¼çè³åªå¨æä¸æ¹é¢æ·±å ¥ç 究ã尽管åå端æ¯æåºåçï¼ä½å¹¶æ²¡æè§å®å®ä»¬åèªçå ·ä½ä»»å¡ãææ¶å端åªæ¯å®ææ°æ®çæ¾ç¤ºï¼èå ¶ä»ä¸»è¦å·¥ä½é½å¨å端å®æãä½ä¹ææ¶ï¼å端åªæ¯æä¾æ°æ®ï¼èææç计ç®åå ·ä½åè½é½å¨å端å®æãåå端工ä½çåé ï¼é常é½æ¯ç±é¡¹ç®ç设计åæ¶ææ¥å³å®çã
ç¼ç¨è¯è¨
ä¸å¼å§ä¸å®è¦åæ¸ å端å¼ååå端å¼åï¼æ们æ¥åå«ä»ç»ä¸ä¸ã å端 Webåºç¨è¢«åç±»å½ä¸ºåå¸å¼åºç¨ï¼ä¸è¬æ¯å®¢æ·ç«¯ââæå¡å¨ç»æï¼æ以æ们æä¸é¨åç代ç è¿è¡å¨å®¢æ·ç«¯ï¼å¦ä¸é¨å代ç è¿è¡å¨æå¡å¨ãé£äºå¨å®¢æ·ç«¯ä¸çåºç¨å°±æ¯å端ï¼é常æçå°±æ¯æ们çæµè§å¨ãæ常ç¨äºå端å¼åçææ¯æ¯HTML+CSS+JavaScriptï¼é«çº§çå端å¼å人åé常使ç¨è¿äºææ¯çç»åå¼ååºç¨çå端ï¼å¦ä¸ä¸ªå端ç常ç¨ææ¯å°±æ¯ä½¿ç¨Photoshop设计ï¼é åå ¶ä»ææ¯å ±åå®æWeb页é¢çå¶ä½
è¿å ¶å®ä¹æ²¡æä¸ä¸ªæç¡®çæ¸ åï¼ä»¥ä¸åªæ¯å¼åè é常ä¼æ³å°å使ç¨çè¯è¨ãé£åºè¯¥å¦ä½éæ©å¢ï¼ä½ çéæ©åºè¯¥åºäºä»¥ä¸å 个æ¹é¢ï¼å·¥ä½å¸åºï¼æ±èæºä¼ï¼ãæ管æå¡ãå¯ç¨çå¦ä¹ èµæºãå¯ç¨çå¦ä¹ æ¶é´ãå¨å´çå¼åç¯å¢çã
å¦æä½ ççæ³ä»äºå¼åè¡ä¸ï¼æ¾å°ä¸ä¸ªWebå¼åçå·¥ä½ï¼é£æéè¦çéæ©å ç´ å°±æ¯å·¥ä½å¸åºï¼æ±èæºä¼ï¼ï¼ä½ è¦åæè¡ä¸æ åµï¼éæ©åºä¸é¨è¦å¦ä¹ çç¼ç¨è¯è¨ãå¦ä¸ä¸ªéè¦å ç´ å°±æ¯æ管æå¡ï¼æ¯å¦PHPçæ管就è¦æ¯Javaæ管便å®å¾å¤ãèå¦æä½ è¦å¼åä¼ä¸å åºç¨ï¼Java EEæ许就æ¯ä¸ä¸ªä¸éçéæ©ãä½å¦æä½ è¦å°ä½ çåºç¨ä¸çº¿ï¼Java EEå°±è¦æ¯å ¶å®è¯è¨æè´µå¾å¤ã
éçNode.jsçæµè¡ï¼JavaScriptä¹åå¾å¨å端å¼åä¸æµè¡èµ·æ¥ï¼ä½å®æ¯ç«è¿æ¯ä¸ä¸ªæ°çãä¸å¤æççææ¯ï¼ä¸æ¨èç»åå¦Webå¼åç人å¦ä¹ å使ç¨ã
å¨æçæ¥ï¼PHPæçæç®åçå¦ä¹ æ²çº¿ã便å®çæ管æå¡ãå 足çå¦ä¹ èµæºï¼PHPå°±æ¯ä¸ä¸ªå¾å¥½çéæ©å¦ï¼åç¸å¯¹ç®åçå¼åç¯å¢ï¼æ以ææ¨èå级Webå¼åè å¦ä¹ 使ç¨PHPãå½ç¶ï¼ASP.NETä¹æ¯ä¸ä¸ªä¸éçéæ©ï¼Microsoftæä¾äºå¾å¤ASP.NETç¸å ³çå¦ä¹ èµæºåå è´¹çå¼åå·¥å ·ï¼å¦æä½ å欢Microsoftçç¯å¢ï¼å°±å¼å¾èèASP.NETã
web前端自学要多久?
主要看你之前是雪碧否有接触过前端,是图源否有些前端基础,另外还要看你的码雪接受能力以及是否喜欢这个专业。如果接受对力尚佳,碧图或者有些前端基础,代码天到1个月就差不多能够入门。雪碧灰灰歪歪源码如果慢一些的图源,三个月也差不多了。码雪但是碧图这只能说是一个基础部分,找工作是代码找不到的。
接下来就是雪碧需要再深入系统地学习,再学习一些前端自动化,图源一些流行的码雪框架,还要稍微懂些node知识等,碧图如果学习能力强并且自制力强的代码话,大概一共需要5个月的时间。当然这期间需要做大量的实践与练习,来巩固基础知识。
如果是零基础,并且自控力不强,还是xcode 导入c 源码建议报一个培训班,系统学习一下前端知识,把基础知识打扎实了,将来的学习会很简单。不管框架如何改变,都万变不离其宗的。如果基础知识不扎实,框架日新月异,会感到很吃力。
Lottie-前端实现AE动效
阅读时间 ~min 本文转载自:TAFE - 腾讯动漫前端开发团队,原文链接: 人类身份验证 - SegmentFault
项目背景
为了提升用户体验,项目加入了微交互动画。之前动画流程是通过设计输出合成的雪碧图,前端通过序列帧实现动画效果,如图:
序列帧:
动画效果:
帧动画的缺点和局限性明显,合成的雪碧图文件大,且在不同屏幕分辨率下可能会失真。调研发现,Lottie是个简单、高效且性能高的动画方案。
Lottie是jeecms 2012 源码分析可应用于Android, iOS, Web和Windows的库,通过Bodymovin解析AE动画,并导出可在移动端和web端渲染动画的json文件。设计师用AE制作动画,再用Bodymovin导出相应json文件,前端使用Lottie库实现动画效果。
Bodymovin插件的安装与使用
打开输出目录会看到生成的JSON文件,若动画里导入了外部,则会在images中存放JSON中引用的。
前端使用lottie
静态URL cdnjs.com/libraries/lot...
NPM
调用loadAnimation
vue-lottie
也可以在vue中使用lottie
loadAnimation参数
container
用于渲染动画的HTML元素,需确保在调用loadAnimation时该元素已存在
renderer
渲染器,可选值为'svg'(默认值)/'canvas'/'html'。svg支持的功能最多,但html的性能更好且支持3d图层。各选项值支持的功能列表在此
loop
默认值为true。可传递需要循环的特定次数
autoplay
自动播放
path
JSON文件路径
animationData
JSON数据,与path互斥
name
传递该参数后,可在之后通过lottie引用该动画实例
rendererSettings
可传递给renderer实例的特定设置,具体可看
Lottie动画监听
Lottie提供了用于监听动画执行情况的事件:可使用addEventListener监听事件
控制动画播放速度和进度
可使用anm.pause和anm.play暂停和播放动画,调用anm.stop则会停止动画播放并回到动画第一帧的画面。
使用anm.setSpeed(speed)可调节动画速度,yy情侣头像源码而anm.goToAndStop(value, isFrame)和anm.goToAndPlay可控制播放特定帧数,也可结合anm.totalFrames控制进度百分比,比如可传anm.totalFrames - 1跳到最后一帧。
这样的好处是可以把相关联的JSON文件合并,通过anm.goToAndPlay控制动画状态的切换,如下图中一个JSON文件包含了2个动画状态的数据:
资源
JSON文件里assets设置了对的引用:
若想统一修改静态资源路径或者设置成绝对路径,可在调用loadAnimation时传入assetsPath参数:
功能支持列表
即使用bodymovin成功输出了JSON文件(没有报错),也会出现动效不如预期的情况,比如这是在AE中构建的形象图:
但在页面中渲染效果是这样的:
这是因为使用了不支持的Merge Paths功能
因此对设计师而言,创建Lottie动画和往常制作AE动画有所不同,此文档记录了Bodymovin支持输出的AE功能列表,动画制作前需跟设计师沟通好,根据动画加载平台来确认可使用的AE功能。
尽量遵循官方文档里对设计过程的指导和建议:预览效果
由于以上所说的功能支持问题会导致输出动画效果不确定性,设计师和前端之间有个动画效果联调的过程,为了提高联调效率,设计师可先进行初步的效果预览,再把文件交付给前端。
方法1:输出预览HTML文件
渲染前设置所要渲染的文件
勾选☑️Demo选项
在输出的文件目录中就可找到可预览的demo.html文件
方法2:LottieFiles分享平台
把生成的JSON文件传到LottieFiles平台,可播放、竞价留言系统源码暂停生成文件的动画效果,可设置图层颜色、动画速度,也可以下载lottie preview客户端在iOS或Android机子上预览。
LottieFiles平台还提供了很多线上公开的Lottie动画效果,可直接下载JSON文件使用
交互hack
Lottie的不足之处是没有对应的API操纵动画层,若想做更细化的动画处理,只能直接操作节点来实现。比如当播放完左图动画进入惊讶状态后,若想实现右图随鼠标移动而控制动画层的简单效果:
开启调试面板可以看到,lottie-web通过使用标签的transform属性来控制动画:
当元素已添加到DOM节点,找到想要控制的标签,提取其transform属性的矩阵值,并使用 rematrix解析矩阵值。
监听鼠标移动,设置新的transform属性值。
进一步优化
看到一个方法,在AE中将图层命名为#id格式,生成的SVG相应的图层id会被设置为id,命名为.class格式,相应的图层class会被设置为class
试了下的确可以,如下图,因此可通过这个方法快速找到需要操作的动画层,进一步简化代码:
小结
Lottie的缺点在于若在AE动画制作的过程不注意规范,会导致数据文件大、耗内存和性能的问题;Lottie-web的官方文档不够详尽,例如assetsPath参数是在看源码的时候发现的;开放的API不够齐全,无法很灵活地控制动画层。
而优点也很明显,Lottie能帮助提高开发效率,精简代码,易于调试和维护;资源文件小,输出动画效果保真;跨平台——Android, iOS, Web和Windows通用。
总的来说,Lottie的引用可以替代传统的GIF和帧动画,灵活利用好提供的属性和方法可以控制动画的播放,但需注意规范设计和开发的流程,才可以更高效地完成动画的制作与调试。
前端实战:从零到一实现H5拼图小游戏(附源码)
去年,我开发了一个基于H5、JavaScript和CSS3的拼图小游戏。这款游戏利用了我自己封装的类Jquery框架Xuery,融合了许多经典的JavaScript算法和CSS3特性,对提升大家的编程能力大有裨益。文章末尾将提供源码获取方式,供大家学习体验。
由于这款应用属于H5游戏,为了使项目更轻量,我没有使用第三方UI库。如果大家想使用基于Vue的第三方移动端UI库,我可以推荐几个我之前使用过的靠谱组件库:[此处省略推荐内容]。以上推荐的都是社区完善、bug较少的组件库,大家可以试试看。
回到我们的小游戏开发,主要考验大家对JavaScript和CSS3的掌握程度。学习完这篇文章后,相信大家对JavaScript和CSS3的编程能力都会有极大的提升。之后,我还会介绍如何使用canvas实现生成战绩海报图的功能。
我们先来看看游戏的预览界面:
本文的算法实现方式在之前的拼拼乐文章中已有说明,这里主要介绍核心算法,至于vue-cli的使用方法,我之前也写过对应的文章,大家可以研究学习一下。vue-cli搭建项目方式如下:[此处省略搭建方法]。
关于vue-cli3配置实战,可以参考《一张图教你快速玩转vue-cli3》。
目前,我主要整理了以下核心功能,接下来我会一一为大家实现:实现纯JavaScript上传预览、实现拼图分割功能、实现洗牌算法、实现生成战绩海报功能。
1. 实现纯JavaScript上传预览:文件上传预览主要采用FileReader API实现,原理是将file对象传给FileReader的readAsDataURL,然后转化为data:URL格式的字符串(base编码)以表示所读取文件的内容。具体代码如下:[此处省略代码]。
2. 实现拼图分割功能:一般处理拼图游戏时,我们会采用以下方案:使用canvas分割、采用n张不同的切好的切片(方法简单,但会造成多次请求)、动态背景分割。经过权衡,我选择了一种自认为比较优雅的方法——动态背景分割,只需使用1张,然后利用CSS切割,有点像经典的雪碧图。具体实现如下:[此处省略实现方法]。
3. 实现洗牌算法:洗牌逻辑依托于随机算法,结合坐标系,实现一个随机生成二维坐标系的逻辑,然后通过改变每个切片的translate位置,配合过渡动画,即可实现洗牌功能和洗牌动画。具体实现如下:[此处省略实现方法]。
4. 实现生成战绩海报功能:生成战绩海报我采用canvas来实现,对于canvas的api不熟悉的可以查看MDN,讲得比较详细。这里我简单实现一个供大家参考:[此处省略实现方法]。
H5拼图小游戏我已在github开源,感兴趣的朋友可以在我github上学习参考。以上逻辑部分的代码可以直接整合到vue项目中,由于实现比较简单,这里我就不详细介绍了。
如果想学习更多H5游戏、webpack、node、gulp、css3、javascript、nodeJS、canvas数据可视化等前端知识和实战,欢迎在《趣谈前端》一起学习讨论,共同探索前端的边界。
2024-12-23 06:49
2024-12-23 05:52
2024-12-23 05:44
2024-12-23 05:35
2024-12-23 04:53