人人都能做前端去掉字符串两边的空格。前面讲 jq 的点吹木方法是我说原生 gs 没有现成的去空格的方法,其实是有的,这里纠正一下,原生 gs 去两边空格也是点吹木方法。演示一下 定义变量 a, a 的值为带空格的字符串,去空格间先显示一下 a 的值,保存查看, 可以看到 a 字符串两边的空格, 现在去掉 a 的空格,去空格用 a 加点 trim, trim 不用传参数。保存查看,看到 a 两边的空格,去掉了 空格,换成中文字符,去空格间先显示一下,保存查看。在浏览器中可以看到中文,可以显示连续的多个空格。把空格去掉,保存查看, 看到空格没有了中文空格也能去掉。点吹木方法。不仅能去中文和英文空格,也能去掉其他的空白不可见字符。 只去掉左边空格,可以用点 trim left 方法。同理,只去掉右边的空格,用点 trim right 方法。
粉丝1868获赞1.2万

去除字符串左右空格,在 pip 中实现。这个功能有内置的 tream 函数,在 javascrews 中没有现成的。要实现同样的功能,可以使用 jq 的点 tream 方法演示一下。定义变量 a。 a 的值是一个左右带空格的字符串。 先把煤气空格的值在 div 一中显示一下, 保存查看,可以看到 a 的值前后有空格。在浏览器中,多个连续的空格只显示一个。 用 j q 的 trim 方法去掉左右的空格,保存测试一下, 可以看到空格没有了。点 trim 方法在开发中是一个非常有用的功能。

在 h t m l 语言中,空格是使用 and n b s p 分号来表示的,我们来看一下,点击插入菜单,点击 h t m l 语言,点击不换行空格, 我们可以看现在他这已经有一个间距,我们切换到代码式图来看一下,是不是在刚才两个竖线之间,在代码里面已经插入了空格符号呢? n b s p 是 non breaking space 的缩写,他的前面加一个按的后面加一个分号,就是表示一个空格。 在代码里要注意这个是不换行空格,而且它有一个特点,我们输入 n 个空格之后,他只显示一个。如果你想连续输入空格怎么解决呢?可以看我的下一个视频,偶吸小哒哒再见!

就是你要实现这个需求,你是用什么样的技术方案?这要不断的对话啊,这个对话可能要持续一天的,甚至一两天的就对话。老师, web coding 怎么看? web coding 不 就是聊天写代码吗? 那有啥怎么看的,不一直都是 web coding 吗?我们从头到尾从一天出来的第一天到现在,不就是 web coding 吗?一直都是啊,对于那种小的啊,就是对于那种清量级的项目,小功能, 小 bug, 简单需求。那么我给他取个名字啊,这现在特别会取名字,那帮人,哎呀,我真的是服歪不扣顶啊,就是聊天, 聊天携带吧。啊,你给他说一句话,帮我改个 bug, 把错误一粘给他给我弄,因为他简单嘛,对吧?少跟他说一些废话。但是呢,对于那种大功能 系统或者是复杂需求,那这个东西呢,你最好使用那个 spec 口令啊,就规范驱动模式啊,也就是文档驱动,先一步一步成文,对吧?你第一步要做啥?第一步,第一步要建立啥文档?建立需求文档啊,你要干啥呀?你的目的是啥呀?你动机是啥,对吧? 然后他给你问明白没?问明白你不能动手的,他听懂了过后必须要过成文,成文过,你要审阅,审阅过后你看有没有遗漏,写的有没有问题。好,那么这是第一步,第二步是说涉及文档,就是你要实现这个需求, 你是用什么样的技术方案,只要不断的对话,这个对话可能要持续一天的,甚至一两天的。就对话啊,可以用一些聊天工具,对吧?语音识别的工具,这样子的话,你少打字,打字打起来挺累的,知道吧? 我就用的微信识别,对吧?这样稍微方便一点。跟他去聊还是要成文档?每一步都要成文档啊。然后呢?设计完了过后呢?干嘛呢?要开发对吧? 那么开发分为几步对吧?这要涉及到代理和纸代理的对不对啊?开几个纸代理去做这个事。那么开发开发的结果呢? 是不是要验证,对吧?用什么样的方式来验证?是用单测呢?还是 e to e 啊,对吧?还是集成测试啊,对不对?你总得验证吗?啊?验证完了过后,验证通不过的话,又循环这个过程啊,验证通过了过后那就完事了,完事了过后干嘛?规章?什么叫规章?就是你每一次解决这些问题的时候, 那么形成的解决结果,要合并到整个工程的一个规范文档里边去啊,这就是个规范驱动开发, 当然这个玩意消耗头衔是很快的哈,基本上你啥都没干,这个头衔就消耗光了,上下文就撑满了。当然这两这之间呢,也有中间状态是吧?比方说像那个不大不小的呢,你觉得用那个塞克定呢?太小好头衔了,太费事了啊,你整那么多文章干啥呢?就在这个上下文里边好好给我聊就行了,对吧?聊清楚就够了, 那么但是呢,也还得聊,不聊不行你就给我去整,那就乱整了,那么就可以中间状态。中间状态你们自己取舍吧 啊?自己给他提示词取舍,或者是看推理里边不是一个 plan 模式吗? plan 模式一个中间状态对吧?他不成文啊,那么就简单的去聊一聊就可以了, 简单做个计划就可以了,就是这个东西是很灵活的哈,就简单来说的话,越简单呢就少跟他逼逼对吧,赶紧干活,越复杂呢就多跟他逼逼一会,多聊一会,聊清楚了过后再干。 就这个意思。老师讲什么呢?我不知道在讲啥。别怕,你是中级的,你是高级就会。 你还真是这样子。还真是这样子,就你让他自己举手的话,因为他是靠那个你的提示词的,你提示词不清不楚的话,他就看到自己感觉来了,然后就完全不可控了,不知道他可以玩出什么样的花样出来。我们公司不支持这么玩。内网部署没能力。内网部署可以啊,你用 dbc 这种模型的话,其实 普通的家用的 gpu 就 够了,因为你不做训练对吧?你训练它干啥呀?别说训练好的,你就是推力嘛。推力的对算力的要求呢?没有训练那么高啊。 所以呢,家用 gpu 就 够了,你买一个什么五零八零,五零八零都高了。五零七零泰就可以了。五零七泰都已经可以跑很牛逼的模型了,知道吧。几千块钱你们公司给不起。 是不是保密程度那么高,又不能上外网去啊,估计要么就是政府,要么就是军工啊。那肯定是能给得起的,现在不是有有那个什么算力补贴吗?对不对?他巴不得去给你整点算力出来。对,程序员就变成一个小李子了。是这样子的。哎呀,弱智,他总比没有好嘛。是不是嘛, 要么你用那个什么。那个千万不是开源了吗?那个模型是开源了吗?我记得哦。呃,九米兰。九米兰那个啥五他不是开源模型吗?还有四点七不是开源模型吗?四点五还是四点七?四点五,你看哪个舒服就整哪个呗,多整点专利补贴还挺好。 谷歌的新的芯片有 tpu 那 个是吧。不知道,我不知道他算的怎么样。把弄呗弄下来,整呗是吧?全面,现在第一梯队肯定是这个英伟达还是毫无疑问的, 垄断型的 ai 应该促使程序员越来越兴旺。但感觉现在公司是迷茫的,不敢 o 应。他迷茫是对的,为啥不敢 o 应呢?他看不到钱,你是公司宝贝,你也不敢 o 应。 真正的欧信的公司那都是喊口号的知道吧,那都是来标抬股价的,谁干欧音啊,你看那个市场上对吧,一问全有 ai 概念,一问懂利,那都是我们在探索是吧?不是我们的主营业务,你看那不都是这样子吗?谁干我也不赚钱啊。你首先得有钱再说呀。 那如果说不是上市公司的话,不是上市公司的话,那是地标更加悬了,除非是光脚不怕穿鞋的。反正我都快死了,公司都快运营不下去了。那反正我我硬一搏,万一呢,对吧,抓到一个投资还可以活几年,是不是这样子想的对不对?那些有正常经营能力的公司,他本身有正常的现金流的公司, 他谁敢我硬啊。哦,我之前的赚钱的业务我不要了,我整 ai 去了,疯了。那又不赚钱。那问题是那 ai 比方说你们觉得 ai 能写代码了对吧?一个人顶一个团队的,那你们写个东西赚钱啊。问题是 老师有搭建内网 ai 模型,模型训练啊,你不要去搞这种东西,你搞训练干啥?哥们,你训练模型干啥? 你除非你做那种深度学习的,训练点啥子人脸识别之类的,物体识别之类的。那可以对吧?那个 tenor flow 都能干,但是你要去训练大语言模型,像那种目前的多模态模型没必要。你烧那个钱干啥呀?那别的是几十亿美金,几十亿美金在砸呀,你跟他们去玩啥呀?你用千层了就完事了知道吧? 你咋那个玩意干啥呀?我们现在基本上就是做推力不做训练,百分之九十九点九九九的公司都是只做推力不做训练,叫他训练个啥个训个毛啊,直接用现成的不就完了吗, 对不对?又不搞科研,有些大学里面搞科研自己去训练一些玩吗?对吧?你搞商业化的话,就像那些大厂,他们就训练模型, 我们就用就完事了。什么是推理?什么推理?你用模型就是推理,用现成的。什么是训练?就是模型是怎么搞出来的?就是训练出来的,用余料库去训练的,没必要啊。跟你们说现在微调都没有人去微调了, 之前还微调是吧?哎,你这个模型我们公司的产品你不懂啊,对不对?你只是公共资源里边拿出来的余料,我们公司内部的情况你不懂啊。那我给你做个微调 啊,我们公司资料有多好?好调吧,调倒是挺快的,可能一上午就调完了。好,调完了过后你怎么知道调好了呢?你要花一两个月的时间去验证,你都还不一定验证的出来。唯一调最麻烦的事情就是验证, 不知道他调好了没有。有的时候你会发现本地车主挺好的呀,挺聪明的呀,对我们这个情况挺了解的,一上线一到生产环境全出问题,各种各样的问题就出来了。那为什么呢?问这个产品没问题,然后别人他是个黑盒子,你不知道为什么,然后又重新调, 这里边又复杂,然后又耗时又耗成本精力,好不容易调了半年,调出来了好,别人大模型都更新了几代了,你会发现更新了几代过后的大模型啥也不用,微调就比这个强,你调了半年是不是白调了,对吧?因为微调的问题就在于它没法无缝切换模型的,比方基于 gpt 三点五做的微调,那现在 gpt 五点二了, 不好意思,你这个模型还是低于三点五的。那你说五点二强还是三点五强,这个东西就没有人去微调了,费力不讨好。现在都在玩什么呢?现在基本上这个 ai 都在玩那个上下文,就玩上下文,玩提示词就在玩这个 啊,有些公司还玩一些 mcp, 现在 mcp 都没有什么玩的,基本都在玩这个。你像那个 skills, skills 你 可以把它就理解为提示词啊,就是个动态加载的提示词,都在玩这个东西的。那不玩微调了,玩啥微调? 老板也烦了,真的是老板烦的很,到处在说 ai, 他 也想在 ai 上去捞点,都说 ai 的是一座金山,对吧?他没看到金子在哪,他就看到卖铲子赚钱了,铲子拿过来拿,赚不到钱是不是?

在比面试环节里边,不是有什么难点亮点吗?对吧?而同学呢,平时工作有没有什么难点亮点,那这里呢,花几分钟的时间啊?给同学们送一个,你把这几分钟看完了,然后把这些难点亮点呢,到比面试环境里边叨叨叨一说, 那这一次比面试呢,就基本上十拿九稳了,什么情况呢?就是我们页面上啊,不管是工程化环境,还是我们自己写一个普通页面,不是要引入很多的 gs 吗?对不对?但是在真实的生产环境里边呢,可能有些 gs 啊,每个 gs 里面就是个打印啊,非常简单,打印一,打印二,打印三, 然后呢,运行出来过后啊,有可能某一些 gs 呢,它会运行失败,加载错误。那么现在呢,有个需求,就是说如果说这个 gs 加载失败了,我们需要给它重试啊,比方说最多重试三次,三次还失败,那就不行了。好,咱们就基于这个需求,看一下怎么把它聊出花来。那这个呢,需要解决两个问题, 第一个问题,什么时候重试,第二个问题,如何重试,对吧?就解决这两个问题,你比面试的时候聊,你按照这个顺序去聊。 首先第一个问题,什么时候重试,那当然是加载失败的时候重试,那我怎么知道它加载失败了呢?哎,这一块呢,就涉及到一个事件啊,在这元素里边都有一个事件,叫做 a 作,当这个元素的相关资源加载失败的时候呢,它会触发这个事件,在这个事件里边呢,你就可以去做任何事情啊,比方 这边再打印一下啊,好看一下啊,运行,你看是不是打印了一个一二三出来,这一二三哪来的?就是这个第二个 gs 加载失败了,打印出来的事件触发了。 当然呢,我们最好不要把事件写到这,因为像这些标签啊,在工程化环境里边,他都是自动给你生成出来的,因此呢,我们这里呢,最好呢单独去开一个 gs 来去监听事件。怎么监听呢?我们可以直接去监听整个窗口监听。 er, 事件。 好,咱们打印看一下啊。 er, 看有没有打印啊,保存,然后到这边来,你会发现呢,这个事件并没有触发。哎,这是怎么回事呢?我这涉及到第一个问题了,我问你啊, gs 这个脚本,它的加载 是同步的还是异步的?是不是同步的?你那些炫耀原理应该学过吧?这是个同步任务,他会主设页面的解析。所以说呢,当这个 gs 脚本失败的时候,运行到它了吗?还没有吧。换而言之,当你运行这个代码的时候,是不是就已经失败了,你就监听不到了呀?因为你事件的话,你只能监听未来的发生的事,是吧?过去发生的事,你肯定是监听不到了, 所以呢,这个事件它还不能注册到这个位置,你得把它放哪呢?放到最前面去啊。如果说是工程化环境的话,你可以跟他聊一聊,你可以使用一些插件,对吧?比方说 atemarking, 然后将整个模板页面里边去注入一段代码,然后写到这个位置好,保存,再看一下呢,运行,你会发现呢,它还是没有打印,说明这个事件还是没有触发,这又是为啥呢? 这是因为啊,像这个 error 事件,它是不冒泡的,你看这个脚本失败了,它触发了 error, 但这个事件它不冒泡,因此呢,通知不到这个窗体。你看,又遇到第二个问题了,那不冒泡怎么办呢?那么我们学过一个事件的传播模型是吧?我们可以在捕获阶段去处理这个事件,那这样子一来,你看一下 是不是 er 就 正常打印了,于是呢,就搞定了。第一个问题,什么时候重试?你看你面试,如果说一层一层的把你遇到了问题给他描述清楚,然后你已经你是怎么解决的?就光是第一个问题是不就可以说出很多东西了?其实像这种笔面试环节里边啊,最重要的还不是说你回答的什么对和错, 因为目前这个环境吧,已经几乎不存在什么对和错的问题了,都是对的,都卷成这个样子了,那还能不对吗?如果说目前这个环境,你回答一些核心笔面试题的时候都还要出错,那这个就业就跟你没啥关系了。哥们,对,是基本要求, 你在这个基本要求之上,你要比拼的是你回答的细不细,理解的深不深刻,准不准确,拼的是这个了。换而言之就是别人不会的我会,别人会的我会的更六,拼的就是这个。咱们这个行业也不拼别的了,还拼啥呀,来段才艺也不至于吧,所谓的竞争力就是你要比别人强,哪怕强一点,那也是强,那也是优势, 我要积累这样的优势,好好来看我的大师课,大师课完全免费啊。那您就完事了,我这么跟你说哈,看过大师课和没有看过大师课在比面试环境里边的表现天壤之别,你的用词,你说的话,那都不是一个世界的人, 他是个讲啥?讲的全是前端的核心知识,我从浏览这个进程生成模型讲到渲染管线,对吧?刚才我们说到渲染管线了,然后最后讲到框架的原理,原版优化是一条线下来的, 这里边的每一个知识都牵扯到大量的比面试题,以及呢我给予你的这些比面试题的顶级解读。而且这些比面试题啊,全是核心比面试题。什么叫核心比面试题?就是在面试官心里边占的分量是很重的,他会直接决定你去留的,你一旦把这些题 回答出来的答案超越他的预期的话,那基本上这道题过后,这个里面是都是垃圾时间了,都是过程了。所以呢,无论你是想高薪就业还是想再次提薪,大师课他都是你的必修课。关键这个课呢,目前可以免费领哈。怎么领?在咱们账号主页,点击头像进入账号主页,给你提示领取。完事了啊,好说回来啊,当我们解决到第一个问题啊,什么时候从事的问题? 这个第一个问题呢?还没有彻底解决完,还有一些细节,就这个 error 事件啊,他是比较广泛的,很多东西他会触发这个 error 事件,比方说像这个脚本加载失败了,会触发,对吧?那如果说你这个脚本里边直接抛出一个错误呢?保存你看一下,他也会触发,你看触发两次,对吧? 还有什么情况呢? a b h 啊,比如图片标签,然后随便给他写个路径,这个地方也找不到,他也会触发了三次,对吧?都是跟标签相关的错误,但是我们要处理这个吧,我们要处理这个吗?也不处理吧,我们要处理的是啥?这种情况加载不出来的情况, 所以说呢,我们要把这个范围呢给它约束一下,那我怎么来约束呢?我得知道这种情况跟这些情况它们之间的差异,那怎么来体现它的差异?就需要通过这个事件参数 e。 好, 咱们打印看一下啊,这事件参数 e 好, 打印出来过后呢,你会发现啊,首先类型不一样,如果说你是一个脚本里边抛出的错误的话,那么它的类型呢?是 error, event, 其他的标签错误的话是 event。 所以 说我们首先把这种情况给它取消掉啊,给它去掉,好判断一下啊。如果说 e is tensor, error, errors, 那 么像这种情况呢?不做任何处理,要排除掉,好保存看一下。那你看目前的 error 是 不是只有两个了,对吧?一个是脚本标签,一个是图片标签,那么现在就要区分标签了,怎么来区分呢?这个 e 里边啊,它有个 target, 表示你触发错误的元素。好,是不是简单呢?只要你不是一个脚本元素,那我也不做任何处理。 那这样子一来的话,是不是最后保留的情况就剩下这个脚本加载错误的情况了,对吧?好,那么到目前呢,第一个就算彻底搞定了,什么时候从事呢? 就是在这个地方要进行重试。好,接下来第二个问题,如何重试?那重试的方案有很多啊,比方说你就再重新请求一次呗,对吧?重新来一次,或者说你换一些别的域名啊,像一些公司里面他域名很多的,有的时候呢,可能是域名出现错误,解析不了了,那么你换一些域名再重试一下,对吧?这就看你们公司具体是啥情况了。 那比方说吧,咱们这重试呢,就是换域名重试啊,咱们给他准备个域名列表, dooms 啊,一些备用域名列表,呃,随便来一些吧。 呃,这个东西一个点 com, 然后再来一个域名这个玩意点 com, 然后再来个域名啊,再来个正儿八经的啊,能够访问的域名 back com 啊。比方说我们给他准备一些备用域名,如果说你现在失败了,那我是不是就重试就完事了?但是呢,这里呢,会知道你一个状态就是,那我重试了失败的时候,是不是也会触发这个函数啊? 重试也失败了,也会触发,那再重试再失败了,也会触发,那我得知道他目前从事完了没,对不对?那我怎么知道他目前从事完了没啊?那我这里呢,我针对这个 gs, 它重置了几次了?要重置了零次,或者重置了一次,哎。针对另一个 g s, 它又重置了几次了?重置了三次,四次。那这里我是不是可以通过这个重置的次数来判断它重置完了没,对不对?因此呢,我需要建立这么个映色关系啊,这个映色关系呢,你可以用 map, 也可以用一个对象啊,咱们就用一个对象吧,就是叫做 retri 啊, 这个空对象。因此呢,我在这里呢,是不是要首先取出它目前访问的域名是啥,对不对?把这个域名啊,这个不是域名啊,是个 pass, 给它取出来是不是这个道理 好,于是呢,我们给它取出这个 pass 啊,怎么取呢?那非常简单,把这个通过一点 target 点 s r c, 是 不是可以取?它的路径对不对? s r c 路径, s r c 打印看一下啊,保存好看一下。是把这个东西打印出来了,然后我们是不是可以利用这个东西创建一个 url 对 象,拎一个 url, 对 吧? s r c 传进去, 这样子呢,这个对象里边就有各种各样的信息了啊,打印看一下啊,对象里边是不是就各种各样的信息了?你看 python 不 就是我们想要的吗?用这个东西去干嘛?去取出这个映色是不是好?于是呢,我们利用这个 python 作为 key, 去取出什么 retry 里边的映色, 当这个映色有可能不存在啊,比方说,我们可以判断一下啊,判断 key 在 不在 retry 里边,如果说不在的话,是不是这个映色目前是不存在的?不存在说明啥?说明是不是第一次从事, 那就把它的重置次数呢?给它设为零,对吧?然后呢,我们是不是可以通过这个 retri 啊,通过这个 retrikey 能够取出它下一次需要重置的域名下标,对不对?通过这个 index 来取它的下标,然后利用这个下标是不是可以取出它的主机名字 do miss index。 大家看一下 host, 这就是我这一次要重置的域名,刷新你看一下,你看,这是我这一次要重置的域名,那么接下来是不是要用这个域名替换一下这个 u i o 地址里边的主机,对不对啊?来替换一下啊, host, 替换下主机好,替换完了过后,我们来打印一下这个 url 地址,这就是我们改动了 url 地址过后它的新的地址,你看,这就是我们第一次重试需要用到的新的地址,对吧?就取出来了,取出来过后,后续的事情是不是很简单了啊?呃,在这里呢,我们再去做一个判断啊。 呃,如果说这个 retri, 呃,如果说这个 index 大 于等于了域名的长度,说明都已经重试完了,那就不要再重试了,对吧? 从事次数超过限制好,反尔言之,就从事。那么得到一个新的域名地址啊,因为这个新的域名地址,所以我们去创建一个新的元素啊,新的 script 元素,然后呢,给他的 s r c 复制为这个地址, 好换这个脚本之后,然后把这个脚本呢加到页面上去。怎么加呢?就是找到之前的那个脚本,是吧?出错了个脚本它的复元素,然后来一个 insert p four, 把我们新建的脚本加到之前的脚本之前啊,加到相同的位置就可以了啊。然后刚才还不要忘记啊,就是你取了脚本加到之前的脚本之前啊,加到相同的位置就可以了啊。然后刚才还不要忘记啊,就是你取的脚本加到之前的脚本之前啊,加到相同的位置就可以了吧。 重试次数加一啊,好保存,咱们看一下效果啊。那你看现在效果呢?都已经初步展现出来了啊。一、这个脚本没问题。三、这个脚本也没问题。二、这个脚本出了问题,于是他重试了,是吧?他重试了几次呢?我们可以看一下这个网络通信啊,刷新,你看一下真的这个 g s 啊。 一和三没问题,不用管他,你看二点 g s 是 不是一开始加载错误了,然后重试了,第一次重试了,第二次重试了,第三次啊,第三次终于拿到结果了是吧,是不是有重试 问题吧。但是呢,目前呢,还有一些细节啊,你需要去处理啊,你看现在呢,我们就加了很多的一些元素进去了啊,就是一些加载失败的元素呢,其实我们可以在页面上把它删掉了啊,也没有意义了,因此呢,我们这里呢可以把这个一点 target 啊点入目掉, 移除掉,好保存,你看一下,这样子呢,至少保证页面上呢只保留这个从事正确的戒指。好的,一个细节啊,第二个细节呢,就删了。顺序还有问题,你看我们的引入顺序呢是一二三,结果他打印的顺序呢是一三二,这个好理解吧, 因为三运行完了过后,我们后面还在重试的,但他现在的结果呢,他的顺序是一三二。那咋办呢?那这就需要我们在往页面上加这段 gs 的 时候啊,他得是同步的才行,他得去主色当前的页面继续往后解析,得把它主色掉。就是我这里出了问题吗?不是,我现在正在处理。那你就不要再往后去解析页面了, 得把它主色掉。那怎么主色呢?朋友们,你们应该是学过的往前回忆回忆啊,往你们 gs 的 第一节课回忆回忆,有一种办法是可以主色的。 什么办法?你们在学习 g s 的 第一节课,老师是怎么教你们去在页面上打印的,怎么教你们的?应该教会你们这个 document 的 write, 对 吧?然后呢,应该很快就会告诉你们不要再去使用这个东西。为啥?因为这个函数会主色,后续的解析它有性能问题。 当时呢,我们只是呢,一开始学习的时候为了打印一些东西,对吧?能看得见,所以说我们使用它,但后来就不再使用它了。但是现在我们不就是要主色吗?既然我们就是要主色的话,那我们也不用使用这种方式了,直接用 write 的 方式给他写一个脚本进去就完事了。保存 啊,这里包错了啊,包错了,原因呢?是因为他这样子呢,他就分不清楚这个标签是啥意思啊,因为我们目前代码是写到这个元素里边的标签里边的,那么这里又出现个标签,容易造成歧义啊,因此你这里做一个转移就可以了啊, 好,保存,你看一下刷新是不是这个顺序就没问题了?一二三,对吧,不然的话,有些单页应用里边后续的介示需要用到前面介示的东西,你顺序一变的话要出问题的,所以要保存这个顺序一致。 那我这个重置功能就做完了啊,当然我只是提供了一个方向啊,你要在比面试环境里边还可以继续的去延伸,比方说像在工程化环境里边,那你这个玩意是怎么注入这个代码的?是不可以利用一些插件,对吧? atemplink 这些插件可以进行注入,然后呢,可能你还会考虑到这个什么,呃, different 啊, think 啊,对吧?这些带有一些资源标识符的这么一个脚本,你可能要做一些特殊处理啊,总之呢,呃,你自行去发挥,反正方向就是个方向啊,你只要能够在比面试至少难点亮点这一块,那就是十拿九稳了。

哎呀,我还要给你现场写一个吗?难道你不是试了吗?你试了他到底管不管他你不知道吗?你没试出来吗?就是我有一个粘性定位的一个小问题吧。嗯, 就是粘性定位,他不是就是基于就是这个最近一个可滚动元素的那个机他来定位的吗?嗯嗯嗯, 但是如果就是等于说就复元素吧,就设置了一个喷点的话,那他就滚动的时候那个文字就会透到那个喷点区域上去。对,这个情况要怎么办?就是你不希望他透到喷点上面去是吧?对,不希望他透到喷点上。呃,我理解一下那个复元素是不是可滚动元素。嗯,对, 那不就得了吗?那你定位的时候你就不要写 top 零了,因为写这个值表的是十个像素, top 值就写十个像素不就完了。 写十个像素可以吗?咋不可以啊?为啥不可以啊?告诉我。当时好像写过,但他他好像没用一样。没用的时候再调呗。那肯定是有用的呀,比方说这是个可滚动元素,你现在是刮到这的是吧?你希望往下面点是不是这个意思? 对,他会会员说他是有带了一个潘迪吗?啊啊啊,所以他自然的话就在这里了吗?不对呀,这个属性应该是无视潘迪的吧,就是我滚动的时候就是他,你上这不是有个就是你。哦,我知道这一部分是潘迪吗?你的意思?对啊,他当我滚动的时候他文字就会出现在这个地方,但是这个属性他管潘迪吗?他应该是不管潘迪的吧, 你用下来他是管潘迪吗?他会考虑到潘迪吗?因为他的定位方式是基于边框盒,边框盒里边是不带潘迪的,他不是基于这个内容吗?哎呀,我还要给你现场写一个,难道 你不是试了吗?你试了他到底管不管拍你不知道吗?你没试出来吗?我就是没试出来吧。容器,然后一个 bar 而已,然后 下边就内容吧。好,然后简单设置一下样式,容器给他一个固定高度,高三百吧,然后 overflow y o two 这样子,容器就有个滚动条了,然后那个 bar 给他一个背景颜色吧,然后文字颜色给他一个白色吧。 呃,然后往下滚动啊,然后呢?复原说给他一个盘顶吧,盘顶二烟吧。啊,有个盘顶的,然后给他一个边框吧。博德 eps 稍力的,我看一下他要会不会那个考虑盘顶啊,然后这一块设置连线定位不是 a 型,嗯,是 dk, 然后他不为零。 哎。哦,他会考虑盘顶啊他会考虑盘顶啊。那有啥问题呢?那问题在哪呢?就是我不想让他这个透过去嘛,就这样。 什么意思?我已经听过去了吗?你什么意思?没太理解。就是我不想在那个间隙里面。哦,你是说这里有个间隙是吧。嗯,就我不想蚊子戳在那里吗?就这样。好好好,我明白了我明白了明白了。嗯,我看一下啊 看一下,但是你滚动条希望放到这了是吧?对,滚动条肯定是在的,滚动条在这里不好解决。哦,我想想啊,你滚动条在这个位置不好解决啊 滚动条要在这个位置,滚动条在里边的能不能接受在这里能不能接受?就是跟这个 sticky 这个定位数平齐是吧。哎对,我看下滚动条要在外面该咋做滚动条你要在外面你要该咋做。你下边要留白吗? 嗯下面倒是没事下面又没事。那下面就不用管他主要主要是上面。哦你滚动条在那个位置你滚动条不能在这里是吧。一个只有那么一点其实也可以吧。哦对,我看看啊。我想一想啊 那你要不然这里写一个负的而已这样子行不行。不是那个就是那个间隙得留着间隙得留着。对,那这里我就要用盘锦 top 了。呃然后盘锦 top。 哦我得给他一个伪元素呃 before 一个伪元素。我现在没有细想啊我现在大概这一想高度而言背景也是白色这样子写吗? 对可以了可以了。是吧我也是加伪元素就是想问一下有没有其他方案解决一下。我这里没有细想没法细想你下来再想一想吧。我也要再想一想吧 这一块。嗯啊我还有一个就是因为我是等于说刚工作嘛然后就对这种项目就是感觉可能也是因为之前我们课程里面就是那些项目都不是很复杂嘛然后就再接下来他这个项目用的是那个摩洛瑞泡的就是感觉看起来就有点困难。你是高新科的吗? 嗯对啊高新课确实没有 model ripper model ripper 在 加购课里边儿这 model ripper 本身也不复杂呀你如果说你不看咱们加购课的话你要学习 model ripper 也可以去这个号这个里面有 model ripper。 这个里面我往哪个地方讲了一下 model ripper。 嗯 我这里这两节课摩洛里克工程管理把这两节课干了也就八九不离十了。呃,我感觉好像摩洛。我这个倒还好吧,主要是可能就跟工作嘛,就接触这种项目可能不正常吗?这第一次工作都是这样子,你两三个月过后就完事了,就上手了, 就两个月后,后来其实大部分时候都等不到两三个月就上手了。没事,那个时候你就觉得天天工作太简单了是吗?不是,哥们,你这个八 k 他 都能复杂到哪儿去啊?你到时候就天天就麻了,天天 cud cud 的 麻了早就会麻了,八 k 能复杂到哪儿去? 这,这不不是问题啊。不是问题不是问题。谢谢,因为我刚开始。因为刚接触感觉看着感觉很吃力吗?就是适应一段时间。刚第一次工作都是这样子啊。嗯,谢谢你啊。好嘞,那好,谢谢老师啊。不客气,嗯,拜拜。拜拜。

第二个问题,我前两天遇到更神奇,我突然蒙了一下啊,其实特别简单啊,这个工程呢,它是一个 react 的 ssr 的 工程啊, 呃,我把它运行起来啊,这个问题很神奇啊,你们要仔细听啊,我都是想了半天是啥玩意。首先你要知道啊,这是一个 ssr 的 一个工程啊,无论是 vivo 还是 x 都有同样的问题啊, 这是服务端渲染的工程,这个页面很简单啊,目前是首页点这个呢,可以跳转到那个关于 boss 页面啊,上面是个导航,可以跳转,没问题吧,好看。好啊,我们就就是描述一下问题这个头,他的问题是啥呢? 他说,袁老师啊,既然你这个玩意吧,他是 ssr 的, 你看现在啊,我刷新页面, 刷新页面没问题啊,那么这个时候是服务端渲染,所以说呢,我点击右键显示页面原代码的时候,你看我这里自动换行一下,显示页面原代码过后,我在这里搜索啊, home 来,你看能搜索出来,对吧?当前是 home 页面,这是服务端传递过来的 h 元素 h 标签。没问题啊,没问题啊,服务端渲染嘛,所以它可以传一个完整的标签过来。 好按照 ssr 的 原理呢,它是这样的啊,服务端呢,把整个当前的页面啊,在服务端渲染完了过后,把整个页面的 html 给传过来了,那么传过来过后,那么剩下的事情是不是被客户端接管了?那么接下来在客户端去跳转页面的时候,是不刷新页面的, 比如说我这里跳转到,而豹子,你看一下页面有没有刷新,他肯定是不刷新的,因为客户端那边就接管了呀,那么剩余的事情呢?交过来客户端渲染了,好,点击而豹子呀,你看,跳到而豹子页面了,对吧?地址栏也变了,看到没?它是不刷新的, 然后当时他奇怪的是啥呢?奇怪的是这个时候啊,如果说我点击右键查看网页原代码的话,应该显示的还是那个首页,对不对?是不应该显示? 我都想笑了,是不应该显示还是首页?因为他页面其实没有刷新啊。好,点击查看原代码,神奇的是啥呢?神奇的是他现在变成了 a box 页面了,看到没?现在变成了 a box 页面了,哪位大神能给我解释一下? 我当时看到我真的是愣了一下,有没有大神能解释一下这个?为什么现在又跑到 airbox 页面了?按理说是不应该的呀,为什么跑到 airbox 了啊? 有没有哪位大神解释一下?跟水和没啥关系,不要想多了啊,这个问题极其简单,我当时也愣了一下,发现这个问题,然后极其简单。什么问题?我再解释一遍啊,这是一个 ssr 的 这么一个站点, 现在就很简单,有两个页面,对吧?首先我们访问首页,再来一次啊,我们访问首页刷新,哎,因为他是服务端渲染嘛,所以说这个时候呢,我们点右键查看网页源代码,这个时候看到的一定是服务端渲染好的东西,是吧?他把那渲染好的标签全部传给我们了,你看,这是首页 h 一 哄,就是你看到了这个地方啊哄, 说明啥?服务端渲染好了,传递过来首页,那过来过后是不是被客户端接管了?那么后续跟取物端现在就没关系了,对不对?被客户端接管了呀?那现在我点击而豹子,你看无刷新的跳转到,而豹子那么服务端那边不会变化呀?那也就是说我现在点击右键查看网页源代码,他最初使的代码是不是还是之前的那个 home? 是不还是之前那个 home? 但是奇怪的是,我点击网页查看源代码的时候呢,它会变成的这个 about 啊,没那么复杂,特别简单。为啥呢? 因为当你点击右键查看网页源代码的话,没有什么水和不水,和跟那个东西没啥关系啊。当你去点击右键查看网页源代码的时候,它做了一个刷新,就这么简单,就是这是一个单独的页面,它会重新发送请求,然后这里你看看到没, view source local host 三千。而豹子 他重新发了一个请求到服务器,那么服务器这个肯定是对这个页面要重新进行 ssr 渲染,是不是?所以他拿到了, 实际上这个同学想的是对的啊,就这个页面,他的出示代码其实是没有任何变化的,只是查看原代码的页面,他就从服务器重新拿请求了。重新拿请求过后,由于是这个地址,因此他就看到最新的服务端渲染的结果了啊, 有接管,也就说这边查看原代码的页面跟这边的实际的网页已经没有任何关系了,也就说相当于在这里进行了一个刷新操作, ctrl r 刷新,他跟我们这个页面没关系了,知道吧?哈哈哈。当时我愣了一下,然后马上反应过来了,说原实际上是一个刷新操作,就相当于是你新开了一个地址栏, 在这边填了一个地址,写上一个 a box, 刷新了一遍,知道吧?跟原始的页面已经没关系了啊,就说这个,呃,比较神奇的一个问题啊啊对对,讲冷笑话我觉得特别有意思。

好说一个 es 二零二五的特性哈,叫做 promise try, 这啥意思呢?就是我们以前啊,比方说有这么一个函数,这个函数呢,它可能是同步的,也可能是异步的,比方说我这里就随便写了一下啊,比方看这个代码啊,如果说这么一个随机数小于零点五的话,它就是同步函数,同步抛出一个错误,但是如果说这条件不满足的话,它又是一个异步函数, 存款还是可以遇到的,是吧?这个函数他封装里面,他有可能是同步的,有可能是异步的,这个道理很简单,你可能要验证他的参数,参数如果说不正确的话,那可能就直接报错了,他是个同步错误,那这个函数我们到时候用的时候咋用的就很麻烦, 你肯定不能这样子写啊,你就比方说,你这样子来一个成功失败,这样子行吗?肯定不行啊,因为他的错误是同步的,不是异步的,你看啊,运行 啊,目前是随机数到达,是吧?成功然后再运行一次啊,你看他是无法捕获到的,是啥?捕获的是这里的 promise 的 异步错误,但是它是个同步错误,所以说过去我们得怎么写呢?过去我们得这样子写啊,踹,然后呢?把这一坨放进去,对吧?然后它有可能有同步错误,也有可能有异步错误,异步错误这样子来获取,然后同步错误呢,就得用踹开起来获取, 对吧?那这里是失败,好,我们得这样子写,好运行看一下啊,成功,对吧?点击啊,再运行啊,你看,失败过去得这样子写,很麻烦,是吧?那么现在呢,有 promise 踹之后呢,我们就可以更加简洁的来书写哈。怎么来书写呢?就是使用 promise 踹把这个函数放进去, 然后呢统一处理成功和失败。好,这样子呢,他的同步错误也会到这里,异步错误呢也会到这里,那么这样子是不是对错误可以进行统一处理,对吧?啊,不过呢,我目前漏的环境是不支持这个新函数的哈。呃,我们把它放到浏览器里边来走,你看打印出来失败是不是走到这里,对吧?这样子呢,处理起来更加简洁一些。

如果你想做网页,那这三个词你一定会经常见到。 html、 css、 javascript, 很多新手一开始会觉得它们很乱,其实不用怕这一讲,我用最简单的话告诉你,它们分别是干什么的? 你先记住一句话就够了, html 负责结构, css 负责样式, javascript 负责交互。 也就是说, html 决定网页上有什么, css 决定网页长什么样, javascript 决定网页会不会动,会不会响应你的操作。先说 html, 你 可以把 html 理解成网页的股价,它负责告诉电脑,这里有标题,这里有文字,这里有图片,这里有按钮, 他不负责好不好看,他先负责这个页面上有什么东西。所以如果没有 html, 网页就像一堆散开的零件,你连页面的基本结构都没有。第二个是 css, 如果说 html 是 股价,那 css 就是 衣服和妆容,他负责让网页变得好看。 比如文字是什么颜色,按钮多大,背景是什么颜色,内容怎么排版,间距怎么调整,这些都归 css 管。所以你可以把 css 理解成网页的外观设计。第三个是 javascript, 它负责让网页动起来。如果 html 是 股价, css 是 外观,那 javascript 就是 网页的大脑和动作, 它可以控制按钮点击后发生什么,可以让内容切换,可以读取你输入的内容,也可以让页面根据操作变化。简单说, html 管有什么, css 管长什么样, javascript 管会做什么? 我们来看一个最简单的例子,假设你想做一个按钮页面, html 负责把按钮放到页面上, css 负责把这个按钮变好看, javascript 负责让你点一下按钮后,页面弹出一句提示,你会发现它们三个不是各干各的,而是分工合作,一个负责有,一个负责美,一个负责动。 这一讲很重要,因为你后面会反复碰到这三个词,如果你一开始就知道他们分别做什么,后面学网页会轻松很多。而且你以后让 ai 写代码的时候也更容易说清楚需求,你可以直接告诉他,我要一个 html 结构,我要 css 样式,我要 javascript 交互, 这样 ai 更容易帮你写。对,今天你只要记住三句话, html 负责结构, css 负责样式, javascript 负责交互。这就是前端最基础最重要的三件事。下一讲我会继续带你进入实战,怎么让 ai 帮你生成第一个网页。

好,各位学前班同学,咱们来品尝一道非常高端的面试题哈,这个面试题是说有这么一个立即执行函数,这个函数里边呢,包了一个内部的对象, 然后返回啥呢?返回一个对象,这对象里边通过一个方法 get 可以 传入一个属性名,就可以得到一个内部对象的属性值。代码很简单,是吧?请问如何在不改变上边代码的情况下,我能够达到去修改它内部对象这个 ob 界的目的?怎么做才能做的到? 其实这个问题在考察啥呢?就考察的是一个经典的一个地包提权漏洞的问题,这个问题呢,可大可小。如果说你写的是一些业务代码的话,这个问题跟你就有价格,一辈子都没关系。但是如果说你写的是一些公共库的代码的话,那就有关系了,特别是一些运行在 log 服务器的代码,这个问题就可大可小了。 怎么说?比方说你 log 服务器上用了很多的第三方库,然后呢,其中有一个第三方库呢,是有一些恶意代码的, 那么他这个恶意的第三方库,他就可以利用这个提权漏洞去修改其他第三方库里边的内部数据。这种事情历史上不是没出现过,于是呢,你作为一个第三方库的作者,就应该尽量的去防御这种情况。好说远了哈,咱们说回来,你先搞定怎么把这个对象给他改了,你知道怎么改,你就知道怎么防了。怎么改呢? 你目前能用的是啥呀?能用的只有一个东西啊,比方说我们这里拿到这个对象,你能用的只有一个东西,就是这个对象 o, 这个 o 里边也只有一个方法,就是 get, 想啥也没有了,然后你要利用这个方法 拿到这个 o b 界对象,你能拿到这个对象,你就能改。怎么拿呢?你用普通属性肯定不行啊,你用一个属性 a 属性 b 能拿到吗?那肯定拿不到啊,拿不到任何东西啊,只能拿到它的一些值,那你能用啥呀?那普通属性搞不定的话,你就往圆形上去思考,圆形上有啥?是不是有这么一个 value of 方法对不对? 每个对象都有的,而这个方法你看能不能拿到?能拿到。哎,这个方法它的默认情况下不就是返回这个对象本身吗?那你拿到了这个 ob 界的 value of, 那 你是不是可以去调用这个方法 得到这个 ob 界本身啊?那咱们试一下呢?运行调用啊,然后运行看一下它报错了。好,现在来解决报错的问题哈。它为什么会报错?你这样的写法的话,就相当于是啥呢?先拿到方法,然后你先看一下 value of, 然后呢再去调用方法。 那你说这样子一搞的话, z 值指向会不会出问题?是不是会出问题就意味着啥呢?就意味着在这个 value 运行期间,它里边内部的 z 值指向的是谁?指向的是全局 啊。如果说在严格模式下的话,就是指向的是 now, 那 能拿到自身吗?拿不到啊,所以说这样方法呢,看上去呢,好像可行,但实际上是不可行的,因为它 z 值指向有问题。你看到目前为止都已经考察了原型 value 以及 z 值指向的问题了。那好的,面试就是这样子啊,用一个最简单最直白的问题,考察了最多的知识, 因为比面试环节,他就那么点时间,他不可能说让你写个项目来吧,哥们,咱们花一个月来面试,你先用这一个月来写个项目出来,我看你能不能干活。他不可能这样子考察,你也受不了啊,他只能浓缩,浓缩再浓缩,用最短的时间考察最多的知识。因此呢,咱们遇到了很多面试题啊,也奇形怪状的面试题, 有些呢确实是把古文,但是有些呢,还是比较正经的。以后呢,同学们,成为面试官之后啊,你也会遇到同样的问题,你就那么点时间,二三十分钟一个小时,你怎么来看出他的技术水平?就是要解决这些乱七八糟的面试题。最重要的。我先不是说什么那些框架呀,第三方库你熟不熟,最重要的是你基础够不够扎实, 只有你基础扎实了,你很多的问题呢,解析的思路才是正确的。但是呢,遗憾的是,大部分以前从线下机构出来的,或者是以前自学的同学,在这些方面都是很薄弱的。那怎么办呢?好好来看我的大师课,大师课是完全免费的。那领取完事了啊,整个大师课就是为谁准备的?第一,以前线下机构出来的,第二,以前自学的,因为你们看的教程,接触的知识我太清楚了, 哪些地方该讲的没讲到,该深入的没深入。对这些点,特别是那些能够直接影响你薪资高低和职业发展的点,在大时代里边都可以重新讲了一遍,你只有把这些核心问题搞清楚了, 以后就业啊,工作啊,包括职业发展啊,才能够事半功倍。现在难不难?难一方面呢,是环境问题,但是环境问题呢,是雨露均沾的,并不是只针对你。环境差,对所有人环境都差 这个东西没啥好抱怨的,并没有单独针对你啊。那即便是在差的情况下,薪资不也有高有低吗?不也差出了层次,差出了薪资的高低吗?所以我们职业发展真的很多时候考虑的并不是什么大环境不大环境的问题, 因为那是雨露均沾,一视同仁的。我们更多的时候是考虑的是在相同的环境下,你是排在前边的还是排在后边的。你要靠前,就必须要把一些核心知识搞清楚,领此的大师课永远是你最先应该搞明白的课程啊。关注的课程,点击头像进入账号主页,根据提示领取。完事了啊, 好,这条路走不通,因为有 z 值指向的问题。那你都考虑到了 z 值指向了,我能不能想个办法搞定这个 z 值指向呢?我们会发现,如果说这一块 是一个函数的话,那么去掉函数会有 z 值指向的问题,那这一块要不是函数呢,是一个属性呢?那就不存在 z 值指向的问题了。 比方说我读它某一个属性啊, obj 啥啥啥,哎,读这个属性的时候,它就能够返回 obj 自身,那是不是就没问题了?但是它这里边有这个属性吗?没有,没有,给他造一个,怎么造呢?我们通过 object 的 地方 property 上去加一个属性, 因为我们是给圆形加的。是不是所有的对象都有这个属性了,当然也包括这个 ob 界本身,他也有这个属性 hack, 当你去读这个属性的时候,我给你返回这个对象本身。怎么返回呢?我给他写上一个访问器,返回自身。 那你看我现在去读啥?读这个 hack 属性,这个 hack 传进去的话,就相当于是读的什么?读的是 ob 界的 hack。 那 么一读 ob 界的 hack, 是 不是就运行这个 get 方法?由于是通过这个 ob 界去读的时候,你是不是可以干任何你想干的事情,对吧? o b 键拿到,然后呢?给他 a 等于一百,改一下属性,给他加属性 c 等于一千,是不都可以改了,对吧?然后去获取一下。 嗨啊,这个是 o 啊,好运行看一下啊,你看是不是达到修改他内部数据的目的了,看上去挺安全的是吧?内部 b 包里边的东西,外边也动不了,但是呢,实际上是可以通过一些方法 得到的。好,这个题就解出来了啊,那这个题解出来过后呢?就说这个问题该怎么来防御?其实防御都很简单的,你知道它攻击的方式是通过圆形去攻击是吧?那你把圆形给它干掉呗。很多时候,像这些对象啊,它都没有啥圆形的,也用不上圆形里边东西,那就干掉呗。 set prototype, 把它的圆形设为 null, 那 还能攻击吗?就不能攻击了是吧?它就没有这个属性了,这个属性在圆形上的运行,你看一下这 ob 键,根本就拿不到啊。 打印吧,我直接打印是吧?打印出来 undefined 没有这个属性。这也是为什么很多第三方库里面喜欢写上这么一句话,它不是写着玩的,甚至呢它在创建对象的时候,它就可以通过 object 点 create now, 是 吧?来创建一个没有圆形的对象,然后给对象里边去加属性,它为什么要这样做?其中一部分原因呢?也是为了避免这种情况发生。好,就说这个问题啊。


你看 gta 的 官网上有这么一个动画啊,就是个文字呢逐渐缩小啊,我们再来一次,你看一开始呢文字很大,对吧?而且呢能够透过这个文字呢看到他背后的这个背景,然后我们文字逐渐缩小,然后背景呢逐渐变成白色,而 这个动画是怎么做的?我做了一个类似的哈,你看这边来一次,他逐渐缩小,然后呢变成白色,那效果是也差不多的,其实这个动画代码没几行啊,只要你找到思路的话,写起来还是很快的。 咱来做一下啊,我来挑战一下界面,首先我们页面上呢准备好一个 h 元素啊,一个文字,然后呢到样式里边去啊,首先我们找到这个 h 元素,让这个 h 元素呢 宽高大一点啊,宽度百分之百,高度百分之百,然后呢里边的文字居中啊,那就弹性盒居中,好文字居中了,是吧?然后把这个文字呢设置的大一点啊,比方说十二个 v w 不是 color 啊,是 font size, 我 们先把它布局布出来,然后呢再去说他动画的问题。好,那么接下来的问题就是我如何透过这个文字能够看到他背后的背景,这怎么做呢? 就这一块做法非常简单啊,我们就给这个 h e 呢去设置个背景就完事了啊。呃,设个背景图啊,这里呢我有一个图片了啊,然后 lowercase 居中,然后尺寸呢 cover 好 保存,你看这背景图不就设置进去了吗?但是呢,我们的目标效果是希望这个背景呢只在文字区域显示,那该怎么弄呢?那我就需要设置一下这背景图的显示位置啊, background clip 这个属性,把它设置为 text。 那么这样子呢,背景只在文字区显示的啊,像这个属性呢?我之前的短视频也有设计啊,有兴趣的朋友可以翻翻我之前短视频。而我更加推荐的是你直接来看我的大师课。大师课跟短视频一样,也是完全免费的,不过呢,解决的问题是不一样的哈,短视频呢,只是开拓你的眼界,讲一些小知识啊,小技巧啊,小工具啊,解决你工作当中遇到的一些小问题。 但是你要正儿八经的解决你薪资高低和职业发展大问题的话,你只有靠大时刻才能解决,你要其他手段能解决的话,你早就解决了。因为像这种职业的核心问题,只能通过成体系的核心知识才能搞定,那什么知识是核心的,他又成什么样的体系?我告诉你,这个市面上能给你讲清楚的人还真不多, 花几天时间把大师哥认认真真学完,你就知道什么样的知识是核心知识了,因为这些知识是能够直接对你薪资高低产生效果的。你把大师哥里的学到东西,不要说百分之百了,就拿个百分之六七十七八十,把他拿到平面式环节,拿到工作当中去, 你自然就能发现他的威力了。而且大师哥里说涉及到所有的原理啊,深层次的本质啊,无论是语言层面的,框架层面的,还是运行时层面的,这些东西时间越久,他威力越大。 所以说大师课可以说是一次学习,终身受益,这么好的课程,你别又错过了。关键是个客人目前可以免费领哈。怎么领?在咱们账号主页点击头像进入账号主页点击提示领就完事了啊。 好的啊,现在我们把背景呢设置到了文字区域,但是呢为什么没显示呢?因为这个文字有颜色,记住这一点啊,他很重要这个文字有颜色他把背景遮住了。所以说你现在呢要把这个颜色呢给他清空啊,或者是你写个 transparent 也行啊,都一样好保存。你看这个文字区域不就显示了吗?对不对?那这个镂空的效果不是就已经做出来了吗? 现在呢最后就是动画了啊,咱们可以写上这么一个动画。呃 gta 这边呢它是一个滚动动画啊滚动动画呢我以前短视频也说过啊它需要用到一个插件。我们这里呢就直接做动画就行了啊,因为你能做动画你就能做滚动动画啊, 无非就是个 gedit 的 插件而已。好,咱们写个动画啊。呃来个 scale 吧放大缩小。它一开始是什么情况呢?一开始其实这个字体是非常非常大的,这个好理解吧一开始字体非常大啊咱们给他设置一下 font size, 比方说来个三百倍 w。 好, 咱们先把动画写成这个样子啊,应用进去来一个 animation scale, 呃三秒钟吧,然后呢 is in 它就不写时间函数了,然后 for 好 保存,你看一下再来啊刷新, 你看是不是就有这么个效果出来了再来啊刷新文字从大变小对吧,非常舒服的一个效果。然后最后就是这边它如何慢慢变成白色呢?你看一开始这个背景呢是有颜色的,它慢慢变白了,这是咋回事呢?其实就是通过这个 color 来控制的。目前为啥能看到背景,是不是它文字没有颜色透明的?因此呢,能看到背景, 那我们逐步的让文字的颜色变成白色不就完了吗?一开始文字是透明的,然后呢,逐步的把文字变成什么白色,对吧?保存你看一下,是不是就出现这么个效果了?再来一次啊,刷新走,你看这个效果是不是就一样了?代码多吗?没记好是吧?