今年过年的时候和小伙伴们看到了LOL的狗年活动官网。不得不感叹,搞IT的看的和别人就是不一样,别人看活动,我看设计、看特效,看完头脑一热,决定用原生js搞一波。。。。
抽了7、8天的空闲时间,搞的差不多了,在谷歌下显示的还是可以的,其他浏览器的兼容性并没有测试。
写完之后收获了很多,对于css属性以及css3动画的进一步学习以及应用,对原生js的练习、运用,加强了对于html标签语义化的应用,避免过去对于div的魔性依赖。。。还有就是对于html布局的新理解,自己写的布局到最后总是感觉没有原版写的好(难道是因为我没有设计的原因???),最后不得不感叹有一个好的视觉设计师(美工)对于程序员是多么滴重要
官网地址
注:
- 目前只对谷歌浏览器做了测试,并且没有手机端界面,所以建议用pc端的chrom浏览
- 鉴于自己的服务器网速实在是比不起腾讯爸爸的,所以减少了很多资源(音频,明星与你同乐模块的三个视频),首次加载因为服务器网速的原因,资源等待的时间要久一点
- 纯粹个人兴趣
一些知识点的总结
1.使用浏览器的navigator对象判断当前是否是在手机端和微信端
function is_pc(){ |
2.减少if for在编程中的使用
1.三元运算符 |
3.使用background做颜色渐变字体
1.首先使用color设置hack,对于这些新的API,除了敬业的chrom,其他浏览器的支持性还不是很好。 |
4.始终让元素保持居中或者垂直居中(在知道元素大小的情况下)
1.首先使用position:absolute绝对定位。 |
5.按钮闪效果实现
1.首先画好按钮。 |
7.好看的hover效果
|
8.上下移动效果的思路以及优化
一开始直接使用的onscroll函数对滚动事件进行监听
方法体中的每个方法都对应页面中每一个模块的出现与消失的控制
后来发现这个方法问题比较大,每一次都是调用所有方法是一方面,另一方面,只要在高度之外,每次一次滚动都会removeActive,虽然界面上看没有什么变化,但是运算量一下就上来了,导致界面会有些卡顿感觉
经过一番思考,改成滚动到一定区域的高度时,在调用对应的方法
感觉应该还有不小的优化空间,后面继续优化这一块
9.第一页上下滚动效果的优化
在官网中,第一页到第二页之间触发滚动的时候会自动下滚或者上滚,本以为这一块会比较简单,没想到这里才是最费时间的地方,因为没有用JQ,所以很多方法都要自己实现
上下自动滚动的动画已经对body和nav进行样式设置
- 首先将要滚动的高度除以每次滚动的高度,得出次数
- 使用setInterval定时器每次滚动对应高度,知道循环到指定次数,清除这个定时器
- 在滚动时吧body的padding-top设置为142px,nav的定位方式改为fixed
function scrollTo945(){
disabledMouseWheel();
setTimeout(mouseWheel,500);
document.getElementsByClassName('activity-nav')[0].style.position = 'fixed'
setTimeout(function(){
document.body.style.paddingTop = '142px';
},50)
var scrollTemp = getScrollTop();
var scrollHeight = scrollDownHeigh - scrollTemp;
var len = Math.floor(scrollHeight/step),i=0;
var first_length = scrollHeight % step
clearInterval(timer)
timer = setInterval(function(){
if(i>len) return;
i==0 ? window.scrollTo(0,first_length) : window.scrollTo(0,i*step+first_length);
i === len && clearTimerDown()
i++;
},10)
}注意点
- 一开始选用的onscroll方法进行监听,后来发现这个方法和全局控制各个模块的方法相冲突,会引发比较多的BUG,所有后来换用了onmousewheel方法对滚动进行监听
- 每次触发滚动事件时,需要把onmousewheel事件解绑,否则用户再次触发该事件时,会发生BUG
- 对于body的padding-top的动画时间设置和页面滚动的动画时间设置需要反复的尝试,找到一个比较平衡的点,这样滚动的时候不会有太大的感觉