zoukankan      html  css  js  c++  java
  • uniapp 微信小程序 wx.createAnimation 实现向上滚动弹幕

    不多bb,直接先贴代码,反正我是能用的,如果不能用的话就改改,改改后还不能用就不能用吧。

    <template>
          <view class="undone-order">
            <view :style="mainStyle">
                <view style="height: 400rpx; 100%;background: transparent;overflow: hidden;">
                    <view class="t-content" style="text-align: center;background: transparent;" @transitionend="animationend" :animation="animationData" :style="animationStyle">
                        <view v-for="(item,index) in dataList" :key="index" class="img_cont_class">
                            <view class="img_view_class">
                                <image :src="item.headimg" style="height: 50rpx; 50rpx;border-radius: 25rpx;" mode=""></image>
                            </view>
                            <view class="content_class">
                                {{item.content}}
                            </view>
                        </view>
                    </view>
                </view>
            </view>
            <button type="default" @click="scaleAndScale">123123</button>
          </view>
    
      </template>
      <script>
          export default {
              data() {
                  return {
                      animation: '',
                      animationData: {},
                      isStop: true,//每次点击只演示一遍动画 | 布尔判断
                    animationStyle:'transform: translateY(50%)',//弹幕初始位置需要隐藏
                    mainStyle:'position:fixed;right:9999px',//偏移view,主要是为了动画完成后,挪出这个view所占的位置(业务上需要点击view下的区域,由于层级原因是点不到下面区域的,所以挪开)
                    runOver:true,
                    dataList:[
                        {
                            headimg:'https://wx2.sinaimg.cn/mw2000/c43067f3ly8ftudf3invpj20s00s0ad6.jpg',
                            content:'评论写5个div时,连着写,然后自己设❀置margin,一方面避免代码压缩后各线条之间没有空隙,另一方面避免自己不知道5根线的总宽度。'
                        },
                        {
                            headimg:'https://wx2.sinaimg.cn/mw2000/c43067f3ly8ftudf3invpj20s00s0ad6.jpg',
                            content:'评论写5个div时,连着写,然后自己设❀置margin,一方面避免代码压缩后各线条之间没有空隙,另一方面避免自己不知道5根线的总宽度。'
                        },
                        {
                            headimg:'https://wx2.sinaimg.cn/mw2000/c43067f3ly8ftudf3invpj20s00s0ad6.jpg',
                            content:'评论写5个div时,连着写,然后自己设❀置margin,一方面避免代码压缩后各线条之间没有空隙,另一方面避免自己不知道5根线的总宽度。'
                        },
                        {
                            headimg:'https://wx2.sinaimg.cn/mw2000/c43067f3ly8ftudf3invpj20s00s0ad6.jpg',
                            content:'评论写5个div时,连着写,然后自己设❀置margin,一方面避免代码压缩后各线条之间没有空隙,另一方面避免自己不知道5根线的总宽度。'
                        },
                        {
                            headimg:'https://wx2.sinaimg.cn/mw2000/c43067f3ly8ftudf3invpj20s00s0ad6.jpg',
                            content:'评论写5个div时,连着写,然后自己设❀置margin,一方面避免代码压缩后各线条之间没有空隙,另一方面避免自己不知道5根线的总宽度。'
                        },
                        {
                            headimg:'https://wx2.sinaimg.cn/mw2000/c43067f3ly8ftudf3invpj20s00s0ad6.jpg',
                            content:'评论写5个div时,连着写,然后自己设❀置margin,一方面避免代码压缩后各线条之间没有空隙,另一方面避免自己不知道5根线的总宽度。'
                        },
                        {
                            headimg:'https://wx2.sinaimg.cn/mw2000/c43067f3ly8ftudf3invpj20s00s0ad6.jpg',
                            content:'评论写5个div时,连着写,然后自己设❀置margin,一方面避免代码压缩后各线条之间没有空隙,另一方面避免自己不知道5根线的总宽度。'
                        },
                        {
                            headimg:'https://wx2.sinaimg.cn/mw2000/c43067f3ly8ftudf3invpj20s00s0ad6.jpg',
                            content:'评论写5个div时,连着写,然后自己设❀置margin,一方面避免代码压缩后各线条之间没有空隙,另一方面避免自己不知道5根线的总宽度。'
                        },
                        {
                            headimg:'https://wx2.sinaimg.cn/mw2000/c43067f3ly8ftudf3invpj20s00s0ad6.jpg',
                            content:'评论写5个div时,连着写,然后自己设❀置margin,一方面避免代码压缩后各线条之间没有空隙,另一方面避免自己不知道5根线的总宽度。'
                        }
                    ]
                  };
              },
              onShow() {
                  // 初始化一个动画
                // this.showView = true
                  var animation = uni.createAnimation({
                      transformOrigin: "50% 0 50%",
                      duration: this.dataList.length*1500, //动画持续1秒
                      timingFunction: 'linear', //linear 全程匀速运动
                      // delay: 2000, //延迟两秒执行动画
                  })
                this.animation = animation
                // setTimeout(()=>{
                //     this.scaleAndScale()
                // },3000)
              },
              methods: {
                animationend(){
                    let time = Date.parse( new Date() ).toString();//获取到毫秒的时间戳,精确到毫秒
                    time = time.substr(0,10)
                    console.log('endaa'+time);
                },
                  // 定义动画内容
                  scaleAndScale() {
                    let time = Date.parse( new Date() ).toString();//获取到毫秒的时间戳,精确到毫秒
                    time = time.substr(0,10)
                    console.log('start'+time);
                    if(!this.runOver){
                        console.log('正在运行');
                        return
                    }
                    this.mainStyle = ''
                    console.log('执行一次');
                    this.runOver = false
                    this.animation.translateY('-100%').step()
                    this.animation.translateY('50%').step({
                            transformOrigin: "50% 0 50%",
                            duration: 0, //动画持续1秒
                            timingFunction: 'linear', //linear 全程匀速运动
                            // delay: 2000, //延迟两秒执行动画
                        })
                      // 导出动画数据传递给data层
                      this.animationData = this.animation.export() //每次执行导出动画时 会覆盖之前的动画
                    setTimeout(()=>{
                        this.animationStyle = ''
                        this.animationData = this.animation.export()
                        this.runOver = true
                        this.mainStyle = 'position:fixed;right:9999px'
                    },this.dataList.length*1500)
                  }
              }
          }
      </script>
    
      <style scoped>
        .img_cont_class{
            width: 70vw;
            font-size: 24rpx;
            display: flex;
            align-items: center;
            padding: 16rpx;
            background-color: #5E8896;
            border-radius: 20rpx;
            opacity: 0.75;
            margin: 10rpx;
        }
        .img_view_class{
            height: 50rpx;
            width: 50rpx;
            border-radius: 50rpx;
            border: 2rpx #FFFFFF solid;
        }
        .content_class{
            color: #FFFFFF;
            overflow: hidden;
            text-overflow: ellipsis;
            display: -webkit-box;
            -webkit-line-clamp: 2;
            -webkit-box-orient: vertical;
        }
          .box {
              width: 750rpx;
              height: 750rpx;
          }
    
          .box-item {
              width: 250rpx;
              height: 250rpx;
              background-color: #00aaff;
          }
      </style>
    View Code

     点击按钮就是向上滚动的

    点击一次滚一次(业务只需要一次所以没有循环,循环的话有机会再加,没机会就算了)

    代码有注释,注释其实也可有可无,这些css、js也没什么不好理解的

    哦对,@transitionend这个方法————动画完成的方法,我看有的朋友说【wx.createAnimation中没有给出动画执行完毕的回调,至少api文档中并没有写出。】,这个是乱说,我差点被带偏了

    这个【明确动画变化的类型是 transitionend 还是 animationend】,所以朋友们在使用相关api的时候或者相关方法的时候要注意对象注意类型。链接在这可以看https://developers.weixin.qq.com/community/develop/doc/000680bc448450026116253cc56c00

    比如我这里用的是transition变化,所以得用transitionend方法。

    代码,uniapp写法和微信小程序开发者工具写法有点点差别,但是问题不大,改一改就可以用

    老鸟也是从菜鸟开始的!
  • 相关阅读:
    将execl转换成pdf文件
    exBSGS模板
    fhqtreap的学习笔记
    bzoj3196: Tyvj 1730 二逼平衡树
    bzoj2226[Spoj 5971] LCMSum
    bzoj2120: 数颜色
    bzoj3236: [Ahoi2013]作业
    bzoj3208: 花神的秒题计划Ⅰ
    bzoj4143: [AMPPZ2014]The Lawyer
    bzoj1968: [Ahoi2005]COMMON 约数研究
  • 原文地址:https://www.cnblogs.com/zhangpooo/p/15549421.html
Copyright © 2011-2022 走看看