首页 > 编程知识 正文

ae马赛克跟踪运动,js文字跑马灯效果展示

时间:2023-05-05 21:02:40 阅读:11004 作者:58

我们写奔跑的走马灯一般是通过js控制计时器不断循环发生的,但是计时器的消耗量很大,特别是在程序中经常使用计时器的时候,有时会感觉到卡。 但是,css3风格一般做不到。 这里的主要想法是用css3代替js计时器来实现简单的走马灯。

1、基本思路

这次的demo主要通过css3的动画来实现,通过变换的变换y属性的增减来实现dom位置的变化,并将其驱动。

------------------------html------------------请参阅

我流泪的不仅仅是昨晚的酒

舍不得离别的不仅仅是你的温柔

你还握着我的手多久了

让我为难的是挣扎自由

离别总是在9月想起的是思念的悲伤

秋天深绿色的垂柳亲吻着我的额头

在那个下雨的小镇上我从没忘记过你

成都不会带你去的只有你

走在成都的街道上吧

所有的灯都灭了也停不下来

你拽我的袖子,我把手放进裤袋里

走到玉林路尽头坐在居酒屋门口

我是最后一个

--------------CSS-------- marqueer

显示: block;

width: 100%;

文本对齐3360中心;

位置: absolute;

Overflow :隐藏;

- WebKit-animation 3360 marquee 15 slinearinfinite;

animation : marquee 15 slinearinfinite;

}

@keyframes marquee {

0% {

变换:变换y (0;

}

百分之百{

变换:变换y (-650 px; //每行高度为50

}

}

容易理解,该代码在进行状况为0时位移为0,在进行状况为100%时位移为100%。 根据css3动画原理,当100%时,在无限循环状态下,动画会自动叠加到进度为0的状态,从而实现循环动画。

但是,实际观察后发现,迁移效果非常差,100%-0%时会出现闪光跳跃的状态。 因此,重新计算0%和100%状态下的位置,在进度0之前添加末尾的项。 如下所示

------------------------html------------------请参阅

我是最后一个

我流泪的不仅仅是昨晚的酒

舍不得离别的不仅仅是你的温柔

你还握着我的手多久了

让我为难的是挣扎自由

离别总是在9月想起的是思念的悲伤

秋天深绿色的垂柳亲吻着我的额头

在那个下雨的小镇上我从没忘记过你

成都不会带你去的只有你

走在成都的街道上吧

所有的灯都灭了也停不下来

你拽我的袖子,我把手放进裤袋里

走到玉林路尽头坐在居酒屋门口

我是最后一个

--------------CSS-------- marqueer

显示: block;

width: 100%;

文本对齐3360中心;

位置: absolute;

Overflow :隐藏;

- WebKit-animation 3360 marquee 15 slinearinfinite;

animation : marquee 15 slinearinfinite;

}

@keyframes marquee {

0% {

变换:变换y (-25;

}

百分之百{

变换:变换y (-675 px; //每行高度为50

}

}

实际观察的话,就会发现这样有效果。 原理的根本是让闪烁跳跃

的前一帧和后一帧的位置重合,而此时下一条文本还没有完全露出,视觉上基本

达到无缝连接状态。如果容器内会同时出现两条或以上文本内容时,可以在class="label_txt"位置再添加首尾项,实现动画的链接。综上我们就实现了完全由css3达成的跑马灯效果。

------------------------------------分割线------------------------------------------

虽然我们达到了这个目的,但是代码中还有不少问题。由于css3无法获取dom节点数量,因此100%进度时的位移量只能写死。

less在部分插件中可以实现获取dom相关内容,但是还是需要引入js,本质上还是通过js获取dom数量

另一种思路就是保留固定长度,通过js填充或打乱重选保证dom数量。比如我们设置一个的位移量等于14个dom节点的高度,在配置内容不足时,通过js循环一下补充到14个。而一旦大于就只能删除一部分了或者随机填充。

-----------------------------------峰回路转分割线----------------------------------

js可以直接操作keyframe内部的属性!!!!666,这样的话就简单啦。页面初始化的时候

varcssRule;

//Returns a reference to the specified CSS rule(s).

functiongetRule() {

varrule;

var ss =document.styleSheets;

for (var i = 0; i < ss.length; ++i) {

//loop through all the rules!

for (var x = 0; x < ss[i].cssRules.length; ++x) {

rule =ss[i].cssRules[x];

if (rule.name == "marquee" && rule.type ==CSSRule.KEYFRAMES_RULE) {

cssRule =rule;

}

}

}

}

cssRule.deleteRule("0");

cssRule.deleteRule("1");

cssRule.appendRule("0% { transform: translateY(-150px); opacity: 0; }");

cssRule.appendRule("100% { transform: translateY(0px); opacity: 1; }");

通过cssRule对象更新不同进度的状态即可。但值得注意的是仅仅是删除的时候动画效果并不会改变,要在添加上替换的才会其效果哦~~

测试:

CSS3实现跑马灯效果

}@keyframes marquee{0% {

transform:translateX(195);

}100%{transform:translateX(-100%);// 每行高50}}

让我掉下眼泪的 不止昨夜的酒

让我依依不舍的 不止你的温柔

余路还要走多久 你攥着我的手

让我感到为难的 是挣扎的自由

分别总是在九月 回忆是思念的愁

深秋嫩绿的垂柳 亲吻着我额头

在那座阴雨的小城里 我从未忘记你

成都 带不走的 只有你

和我在成都的街头走一走

直到所有的灯都熄灭了也不停留

你会挽着我的衣袖 我会把手揣进裤兜

走到玉林路的尽头 坐在(走过)小酒馆的门口

我是最后一个

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。

  • 相关阅读