最近有个项目里面用到跑马灯,网上搜了下,虽然有人贴出来过一些实现,可是实际上都存在一些个问题。css
哎,再造个轮子吧。html
先放个效果:css3
p.s. 若是能访问jsfiddle最好:https://jsfiddle.net/650spwen/web
微信小程序如今实际上仍是用的webview,里面搞动画效率最高的莫过于使用CSS3的animation了。小程序
跑马灯无非就是一直滚动,这很容易想到使用无限循环的animation.微信小程序
而一直往左滚动的效果,经过css有不少种方式,好比经过改变left
, margin-left
, tranform: translateX()
均可以实现。可是 left
和 margin-left
通常会致使布局的从新计算。使用transform: translateX()
性能会更好一些。微信
首先,视图模板wxml中:xss
<view>css3 + animation跑马灯</view> <view class="marquee"> <view class="content"> <text>{{text}}</text> <text style="display: inline-block; width: 5em;"></text> <text>{{text}}</text> <text style="display: inline-block; width: 5em;"></text> <text>{{text}}</text> <text style="display: inline-block; width: 5em;"></text> </view> </view>
这里为了连续无限滚动,特地复制了2份跑马灯的内容(.content
)。布局
而后,样式wxss中:性能
@keyframes kf-marque-animation{ 0% { transform: translateX(0); } 100% { transform: translateX(-33.3%); } } .marquee{ width: 100%; height: 44px; line-height: 44px; background: #fff; border: none; display: block; margin: 0 auto; overflow: hidden; white-space: nowrap; text-overflow: clip; position: relative; font-size: 28rpx; } .marquee .content{ display: inline-block; position: relative; padding-right: 0px; animation: kf-marque-animation 11.3s linear infinite; white-space: nowrap; }
最后,js里面随便给 page.data.text
赋值一段文本便可。具体js略。
若是要调整滚动速度,能够设置 .content
的元素的动画时间( animation-duration
样式)。因为微信小程序中没法获取到对应元素的宽度,这个时间只能写死或者根据text
的长度估算出一个值。
完整的示例在jsfiddle上有个html版本的:https://jsfiddle.net/650spwen/