自我感觉没有班味!!!每天还是快快乐乐上班哇,是愉快的一周~这周没有太多活咯,基本就是修修改改改代码+学习。真的感觉自己写的代码就是乱七八糟,只要能跑起来有效果就行(我不是合格的处女座哈哈哈怎么能这么宽容)。然后呢就把写的一个动画反复修改,有点“艰难”(我好慢哦),每次改都是不一样的问题,其实收获还蛮多的。
先来看看第一版,惨不忍睹的代码.......我自己还觉得写的挺好,其实这个连预期效果都没出来呢(好丢人)。存在的问题目前先说这几个:
那就看看怎么一步一步修改吧!
其实在第一版的class和id以及定义的变量和函数名都不太规范,在命名的时候尽量把命名更加语义化,让人看一眼就知道这个是用于哪里、做什么的。下面是常用的的三种命名方法。
小驼峰法:
大驼峰法:
所以最适合用于css的class和id命名还是BEM命名法。
由此可以将第一版不明确的class和id命名:
改为如下命名:
接下来是关于代码注释的。可以看到之前写的代码我是一点注释没写哇(除了自己知道写的什么,可能时间越久自己也忘了写的啥)。想一下当你接手某个人写的代码,一点注释也没写,那得好好吐槽咯......主要有以下几点:
/** * 设置滚动行为,根据滚动位置的百分比调整视频的播放进度 */ const setUpScrollBehavior = () => {...};
// 触发滚动行为之前,将视频状态初始化,确保视频播放与滚动行为同步 videoElement.pause(); videoElement.currentTime = 0;
在最开始使用document.getElementById和document.querySelector其实选择的都是整个项目里面具有这个类名和id的DOM节点,其实你想选择的只是这个组件里面的DOM节点。那怎么只选择到当前组件的节点呢?
onMounted(() => { const currentDocument = getCurrentInstance().ctx.$el; const textSections = Array.from(currentDocument.querySelectorAll('.index-scroll__text-section')); const videoElement = currentDocument.querySelector('#index-scroll-video'); });
经过几次修改感觉没问题了,但是还有一个很重要的没有修改!一般函数的代码行数不超过20行,但是会发现我写的onMounted钩子函数里面代码非常多,一下子看过去也不知道在干嘛!那要怎么优化呢?
将一件事情拆分细化为几件不同的事件,然后在onMounted里面按照这个顺序调用就好了。总体来说做的事情有以下几件:
(1)获取必要节点
(2)视频初始化。const setVideoInitStatus = () =>{};
(3)等待视频准备好(就读取相关数据)。const waitVideoReady = () => {};
(4)读取滚动相关数据,为计算做准备。const setUpScrollBehavior = () => {};
(5)监听滚动范围是否在动画范围内(更新视频时间)
(6)更新视频时间。const updateVideoTime = () => {};
然后将onMounted里面的事件拆分为这几个,就一目了然了。
onMounted(() => { // 获取必要节点 currentDocument = getCurrentInstance().ctx.$el; textSections = Array.from(currentDocument.querySelectorAll('.index-scroll__text-section')); videoElement = currentDocument.querySelector('#index-scroll-video'); textContainer = currentDocument.querySelector('#index-scroll-text-container'); videoLoadingDelay = navigator.connection ? Math.max(1750 / navigator.connection.downlink, 150) : 300; // 视频初始化 setVideoInitStatus(); // 等待视频准备好(就读取相关数据) waitVideoReady(setUpScrollBehavior); // 监听滚动范围是否在动画范围内(更新视频时间) window.addEventListener('scroll', () => { if (window.scrollY >= scrollStartPos && window.scrollY <= scrollEndPos) { window.requestAnimationFrame(updateVideoTime); } }); });
上一篇:Unity-Redis数据存储
下一篇:丑数 II(LeetCode)