后台传过来一个list数组,须要我实现一个跑马灯效果。css
我想了想,用css3吧,方便快捷。css3
然鹅,数组
我怎么知道后台给我传多少要滚动的数组呢?bash
因此list数组是动态变化的,我只有动态的去改变滚动时间。 我能想到最简单的跑马灯效果,就是用css的translateX,让一行文字平滑的一直向左滚动就OK啦。这是一组动画,那就用css3里的animation,设置滚动的时间便可。app
想得却是挺美的~~~dom
实际上代码吧:动画
css里首先要把list数组的滚动的每列横着一行排出来,动画效果就是滚动这一行。
如下是js代码:
const marqueeStyleArr = document.getElementsByClassName('marquee'); // 拿到要滚动的dom
for (let i = 0; i < marqueeStyleArr.length; i++) { // 累加出总的全部List里面的宽度,才好知道到底要滚动多长
this.translateX = this.translateX + marqueeStyleArr[i].clientWidth;
}
// 建立一个动画效果keyFrames, this.translateX就是整个一行的宽度
const keyFrames = `
@keyframes marquee1 {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-${this.translateX}px);
}
}
`;
for (let i = 0; i < marqueeStyleArr.length; i++) { // 让每数组里的每项都滚动起来,因此来了个for循环
const style = document.createElement('style'); // 建立一个style标签
style.innerHTML = keyFrames;
marqueeStyleArr[i].appendChild(style); // 把style插进dom里
marqueeStyleArr[i].style.animation = `${this.translateX / 46}s marquee linear infinite normal`; // 设置动画的各项属性
}
复制代码
微微向上的嘴角,来自小火柴的凝视~~ui
不要方~,也不要脑袋痛,其实灰常简单啦~this
就是用js建立一个keyFrames,spa
而后把它用innerHTML的方式加到要滚动的dom上,
在经过style加上animation,
里面的滚动位置和滚动时间都是根据后台返回来的list数组长度决定的。
除以46s 是我我的以为这个比较合适。你本身也能够除以其余的数字,反正就是速度不同而已。
很鸡贼~~~
其实这种直接操做DOM感受不太好,可是很是方便,若是有什么其余更好的建议或者批评,欢迎指正,谢谢啦,但愿你们喜欢~笔芯~
今天成都的雾霾真大~~,这是别人拍的环球中心