时间:2021-05-18
先上效果图:
横向滚动栏实现:
网上的几种方案或多或少都有一些问题:
1.setData定时器更新text view的margin-left方法,由于setData的毫秒延时,动画播放起来一卡一卡;
2.纯CSS实现,keyframe等,无法实现循环播放的设置;
3.使用string.length*font-size的方法获取字符串像素长度,不够精确,多次循环播放后误差会累积变大。
我采用的animate动画方法,实测动画流畅,循环播放无误差。
横向滚动代码如下所示
// wxml<view class='notice'> <view class="left"> <text class='iconfont icon-labagonggao voice'></text> <view class="left-box"> <view class="left-text"></view> <view class='content-box'> <view class='content-text' animation="{{animationData}}"><text id="text">{{text}}</text></view> </view> <view class="right-text"></view> </view> </view> <view class="right" bindtap="goApp"> <!-- <image class="app" mode="aspectFit" src="/assets/images/app.png" style="width:{{widthrpx}}rpx" bindload="imageLoad"></image> --> <text class="more">更多应用></text> </view></view>// wxss.notice { display: flex; align-content: center; justify-content: space-between; padding: 10rpx 25rpx; background: #f1f1f1;}.left { display: flex; align-items: center;}.voice { margin-right: 5rpx; margin-top: 2rpx; color: #fa6016;}.left-box { position: relative; display: flex; align-items: center;}.left-text { position: absolute; left: 0; width: 40rpx; height: 100%; background: linear-gradient(to left,rgba(241,241,241,0),rgba(241,241,241,1)); z-index: 99;}.right-text { position: absolute; right: -1rpx; width: 40rpx; height: 100%; background: linear-gradient(to left,rgba(241,241,241,1),rgba(241,241,241,0)); z-index: 99;}.content-box { overflow: hidden; width: 350rpx;}.content-text { color: #5e5e5e; white-space: nowrap; font-size: 28rpx;}.right { display: flex; align-items: center;}.app { height: 48rpx;}.more { margin-left: 5rpx; color: #aaa; font-size: 32rpx;}// js data: { text: "1.【评分标准】页可以查看不同年龄段的评分标准,通过首页选择对应的性别、类别和年龄。2.【单项成绩】页包含了详细的单项打分情况及成绩雷达图,直观地看出自己的弱项和强项。", animation: null, timer: null, duration: 0, textWidth: 0, wrapWidth: 0 }, onShow() { this.initAnimation(this.data.text) }, onHide() { this.destroyTimer() this.setData({ timer: null }) }, onUnload() { this.destroyTimer() this.setData({ timer: null }) },destroyTimer() { if (this.data.timer) { clearTimeout(this.data.timer); } }, /** * 开启公告字幕滚动动画 * @param {String} text 公告内容 * @return {[type]} */ initAnimation(text) { let that = this this.data.duration = 15000 this.data.animation = wx.createAnimation({ duration: this.data.duration, timingFunction: 'linear' }) let query = wx.createSelectorQuery() query.select('.content-box').boundingClientRect() query.select('#text').boundingClientRect() query.exec((rect) => { that.setData({ wrapWidth: rect[0].width, textWidth: rect[1].width }, () => { this.startAnimation() }) }) }, // 定时器动画 startAnimation() { //reset // this.data.animation.option.transition.duration = 0 const resetAnimation = this.data.animation.translateX(this.data.wrapWidth).step({ duration: 0 }) this.setData({ animationData: resetAnimation.export() }) // this.data.animation.option.transition.duration = this.data.duration const animationData = this.data.animation.translateX(-this.data.textWidth).step({ duration: this.data.duration }) setTimeout(() => { this.setData({ animationData: animationData.export() }) }, 100) const timer = setTimeout(() => { this.startAnimation() }, this.data.duration) this.setData({ timer }) },sipwer滚动方式代码如下所示
swiper默认为横向滚动,vertical为true,则纵向滚动
// wxml<!-- 公告 --><text class='swiper-notice'>公告:</text><swiper class='swiper-container' autoplay='true' vertical='true' circular='true' interval='2000'> <block wx:for='{{msgList}}'> <navigator url='/pages/notice/notice?title={{item.url}}' open-type='navigate'> <swiper-item> <view class='swiper-item'>{{item.title}}</view> </swiper-item> </navigator> </block></swiper><!-- 公告 end -->// wxss.swiper-notice { font-size: 28rpx; color: #fa6016;}.swiper-container { margin-left: 10rpx; width: 400rpx; height: 100%;}.swiper-item { position: absolute; top: 50%; transform: translateY(-50%); width: 100%; font-size: 28rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; letter-spacing: 2rpx;}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了js公告栏上下滚动效果的具体实现代码,供大家参考,具体内容如下公告栏上下滚动body{background:grey;}ul,li{list
新浪博客blog.sina.com没有文章置顶功能。不过,我们可以通过以下两种方法来实现第一种:将文章的内容缩短了放在首页的公告栏里来确实可以实现变相的&ldq
本文详细的介绍了vue实现公告栏文字上下滚动效果的示例代码,分享给大家,具体入如下:代码实现:在项目结构的components中新建text-scroll.vu
网店店主可根据自己的店铺风格设计不同的公告栏样式,公告栏的设计除了文字还能以图片展示,而一个精致美观的公告栏更是能吸引买家眼球。 我们在制作公告栏之前,可
淘宝公告栏是商家进行产品介绍和宣传的重要媒介,一个独特的公告栏会为产品增色不少,但有不少商家反映他们没有掌握好与之相关的技巧。今天,小编就“淘宝公告栏怎么写