微信小程序animation动画,微信小程序animation动画无限循环播放

这篇具有很好参考价值的文章主要介绍了微信小程序animation动画,微信小程序animation动画无限循环播放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求是酱紫的:

微信小程序各种动画,微信小程序,微信小程序,小程序
页面顶部的喇叭通知,内容不固定,宽度不固定,就是做走马灯(轮播)效果,从左到右的走马灯(轮播),每播放一遍暂停 1500ms ~ 2000ms

刚开始想的是 css 的 position: relative + animation,如果宽度固定还好说,宽度不固定,用百分比的话,想象很美好,现实很骨感,百分比相对的是父元素宽度…,所以 pass 掉

又想到动态生成 keyframes ,这样动态获取子元素宽度,再动态生成 keyframes ,动态传入 偏移量,这样就好了,可是这是小程序…,如果web端倒是可以动态操作 cssRule,小程序端,我真不会

然后从小程序文档直接搜索 animation ,还真找到了
Animation API

于是就理所当然的用上啦

看结果

不唠叨,直接点击查看代码片段:https://developers.weixin.qq.com/s/Ju3T3amk7oKc

思路:

页面结构

<view class="integral-notice common-flex-between">
  <view class="integral-notice-left">
    <image class="integral-notice-left-icon" src="icon-horn.png" mode="aspectFill"></image>
  </view>
  <view class="integral-notice-right common-flex-start">
    <view class="integral-notice-right-item notice_1" animation="{{animationData}}">各位憧橙会员大家好,积分商城发货周期为一个月2次,每个月15号和30号发货,有问题请联系客服,谢谢!</view>
    <!-- 这里之所以放两个一样的,是为了无缝衔接的滚动 -->
    <view class="integral-notice-right-item notice_1" animation="{{animationData}}">各位憧橙会员大家好,积分商城发货周期为一个月2次,每个月15号和30号发货,有问题请联系客服,谢谢!</view>
  </view>
</view>

样式代码


/*通用flex水平方向垂直居中布局*/
.common-flex-between {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: nowrap;
}

.common-flex-around {
  display: flex;
  justify-content: space-around;
  align-items: center;
  flex-wrap: nowrap;
}

.common-flex-center {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-wrap: nowrap;
}

.common-flex-start {
  display: flex;
  justify-content: flex-start;
  align-items: center;
  flex-wrap: nowrap;
}
.integral-notice{
  position: fixed;
  left: 0;
  top: 0;
  background: #FEF6F0;
  width: 750rpx;
  height: 98rpx;
  box-sizing: border-box;
  padding-left: 24rpx;
  padding-right: 24rpx;
}
.integral-notice-left{
  box-sizing: border-box;
  padding-right: 20rpx;
}
.integral-notice-left-icon{
  display: block;
  width: 38rpx;
  height: 34rpx;
}
.integral-notice-right{
  overflow: hidden;
}
.integral-notice-right-item{
  white-space: nowrap;
  color: #141418;
  font-size: 28rpx;
  letter-spacing: 2rpx;
  height: 32rpx;
  line-height: 34rpx;
  position: relative;
  left: 0;
  top: 0;
}

第一步: 让它动起来

js代码

  /**
   * 页面的初始数据
   */
  data: {
    animationData: {},
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    const query = wx.createSelectorQuery()
    query.selectAll('.notice_1').boundingClientRect((res)=>{
      let noticeWidth = res[0].width
      this.startAnimation(noticeWidth)
    })
    query.exec()
  },
  startAnimation(left, duration = 10000) {
    this.animation = wx.createAnimation()
    let offset = -left
    this.animation.left(offset).step({
      duration,
      timingFunction: 'linear'
    })
    this.setData({
      animationData: this.animation.export()
    })
  },

备注:这里你会发现,是动起来了,就执行了一次

木事,改代码,让它执行完的时候回到起点

  startAnimation(left, duration = 10000) {
    this.animation = wx.createAnimation()
    let offset = -left
    this.animation.left(offset).step({
      duration,
      timingFunction: 'linear'
    })
    this.setData({
      animationData: this.animation.export()
    })
    // 这里,让它回去起点,便于后边无限循环
    setTimeout(() => {
      this.animation.left(0).step({
        duration: 0, // 时间为 0
        timingFunction: 'step-start' // 这个是 动画第一帧就跳至结束状态直到结束
      })
      this.setData({
        animationData: this.animation.export()
      })
    }, duration)
  },

看到这里,无限循环播放的动画就知道怎么做了吧,做个递归不就好啦?不信咱试试?

  startAnimation(left, duration = 10000) {
    this.animation = wx.createAnimation()
    let offset = -left
    this.animation.left(offset).step({
      duration,
      timingFunction: 'linear'
    })
    this.setData({
      animationData: this.animation.export()
    })
    setTimeout(() => {
      this.animation.left(0).step({
        duration: 0,
        timingFunction: 'step-start'
      })
      this.setData({
        animationData: this.animation.export()
      })
      // 递归,无限循环播放
      this.startAnimation(left, duration)
    }, duration)
  },

注意:你会发现时好时坏,没事,加延迟,加异步,因为虽然是同步执行的代码,代码执行+运行也要时间啊,1ms、5ms、10ms 也是时间

  startAnimation(left, duration = 10000, wait = 2000) {
    this.animation = wx.createAnimation()
    let offset = -left
    this.animation.left(offset).step({
      duration,
      timingFunction: 'linear'
    })
    this.setData({
      animationData: this.animation.export()
    })
    setTimeout(() => {
      this.animation.left(0).step({
        duration: 0,
        timingFunction: 'step-start'
      })
      this.setData({
        animationData: this.animation.export()
      })
      // 加上延迟,加上需求上的等待时间 wait
      let minWait = 12 // 之所以给了个 minWait,是防止 bug,就是那个代码执行/运行时间,经测试,我这里 12ms 的延迟比较合适
      setTimeout(() => {
        this.startAnimation(left, duration, wait)
      }, wait < minWait ? minWait : wait)
    }, duration)
  },

欧啦,大功告成,
微信小程序各种动画,微信小程序,微信小程序,小程序文章来源地址https://www.toymoban.com/news/detail-643892.html

到了这里,关于微信小程序animation动画,微信小程序animation动画无限循环播放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity Animator获取当前播放动画片段

    Animator获取当前播放片段,获取错误,跟当前播放的片段不一致的原因。 一般使用下面API,获取当前动画机播放片段: 这里有一个机制,如果上一句代码是播放一个动画片段,下一句代码立即去获取当前播放片段信息,是获取不到的,需要等待几十ms的延迟,才能正确获取到

    2024年02月12日
    浏览(37)
  • unity中legacy动画用animation播放【播放,正播,倒播,重播】

    目前unity中有两种动画,一种是legacy动画,用Animation播放, 另一种是Mecanim,用Anamator播放。 本文只讨论legacy动画的播放,不涉及其它动画,也不涉及legacy动画的制作。 确保物体上已经挂了动画,一般只有一个动画片段。检查是否能播放:勾选自动播放,点击运行进行测试。

    2024年02月06日
    浏览(37)
  • Unity 踩坑笔记 Animation动画不播放

    情况① 物体单挂Animation,无Animator,无法自动播放 原因 :两种Animation Clip 解决方案 : 注:此举会使其绑定的Animator失效 情况② 与上述相反,动画在Animator中无法播放 解决 :取消Legacy

    2024年02月12日
    浏览(33)
  • Unity中Animation创建的动画如何指定播放

    使用Unity自带的Animation制作的动画如何指定帧播放和结束? 1.选择需要播放的动画,Inspector面板右键Debug,勾选Legacy 2.添加脚本,挂载脚本

    2024年02月03日
    浏览(42)
  • Unity中,点击按钮Button,控制,动画Animator暂停播放

    在Unity中,你可以使用以下脚本来实现点击按钮时停止动画的功能: using UnityEngine; using UnityEngine.UI; public class StopAnimationOnClick : MonoBehaviour {     public Animator animator;     public Button button;     private bool isAnimationPlaying = true;     private void Start()     {         button.onClick.AddListen

    2024年04月27日
    浏览(31)
  • 微信小程序使用animation.css

    animation.css是一款纯css动画库,其中提供了丰富的动画效果 我们直接下载animation.css,即可使用其中的样式 其官网为:Animate.css | A cross-browser library of CSS animations. 使用npm下载animation.css: npm install animation.css -g 注:-g是全局下载,如果需要把package的信息写入package.json文件的话,

    2024年02月12日
    浏览(71)
  • Unity Animator.Play(stateName, layer, normalizedTime) 播放动画函数用法

    接口: 参数 含义 stateName 动画状态机的某个状态名字 layer 第几层的动画状态机,-1 表示播放第一个状态或者第一个哈希到的状态 normalizedTime 从state动画进度的百分比(100%)开始播放到结束 Unity Animator.Play 详解 基于 Animator 制作一个Cube旋转的帧动画 在 Cube 上实现调用 Play(st

    2024年02月13日
    浏览(42)
  • unity 动态获取Animator 状态机中某个动画片段的播放速度(获取到速度来计算 播放时长)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 这个功能主要是因为 每个动画片段的播放速度不一样,需要获取到速度来计算 播放时长。 代码如下(示例): 好记性不如烂笔头

    2024年04月11日
    浏览(33)
  • 【Unity3D小技巧】Unity3D中Animation和Animator动画的播放、暂停、倒放控制

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 在日常开发中,常常会遇到要控制动画的播放、暂停和倒放的情况。 这篇文章就总结一下, Animation

    2024年02月02日
    浏览(72)
  • 微信小程序的无限瀑布流写法

    微信小程序的无限瀑布流实现总算做完了,换了好几种方法,过程中出现了各种BUG。 首先官方有瀑布流的插件(Skyline /grid-view),不是原生的我就不想引入,因为我的方块流页面已经搭好了,引入说不定就要涉及样式的修改、代码量的增大等麻烦问题。 H5我虽然也做了瀑布流

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包