美文网首页
uniapp中使用GSAP的注意事项

uniapp中使用GSAP的注意事项

作者: 周星星的学习笔记 | 来源:发表于2023-03-30 10:35 被阅读0次

    GSAP是一款优秀的动画库,能够使用很简单的方法构建出炫酷的动画效果。具体使用方法可以参考官方文档,最近在uniapp里面使用了GSAP,发现还是挺好用的,做一个小总结,记录一下:

    一、选择器作用

    选择器只能作用在view或者image标签上,如果是自己封装好的组件,或者是text标签,作用不了,也就是说,比如下面的代码:

    //如果是自己封装的组件
    <custom-comp  class=".my-comp"  />
    
    //加入让这个组件沿着x轴移动100px
    gsap.to('.my-comp',{ x:100})
    
    //结论:根本移动不了
    

    二、对于时间轴position参数的理解

    //例如下面第三个参数表示当前动画执行的时机
    // 插入到前一个添加到时间线上的动画的结束时间点
    timeLine.to(".class", {x: 100}, ">");
    
    开始                                结束
    |----------------------------------|>
                    时间轴
    

    复杂一些的字符串,像是'+='和'-='这样的前缀,表达的是一种相对的值。当一个数字跟在'<' 或者'>'这两个符号后面,比如'<2',这样的表示法相当于'<+=2',比如下面这些写法:

    '+=1' 表示当前时间线结束后再过1秒的时间点位置,相当于有个1秒的间隔

    '-=1' 表示当前时间线结束时间点前1秒的时间点位置,相当于有个1秒的时间重叠

    'myLabel+=2' 表示在myLable这个标记后过两秒的时间点位置

    '<+=3' 表示前一个动画起始点后3秒的位置

    '<3' 和上面一个意思('<'和'>'直接跟数字,其实就是和'<+=3'或者'>+=3'是一样的意思)

    '>-0.5' 前一个动画的结束时间点前0.5秒的时间点位置

    注意,+= -= 这种是针对整个时间线动画来说的,而 >(结尾) 和 <(开头) 是针对前一个添加的动画来说的

    三、对于一些动作较多的相对复杂的动画最好定义时间轴,所有动画都挂在这个时间轴上执行,例如:

    //定义时间轴
    let timeLine = gsap.timeline()
    //通过时间轴执行动画
    timeLine.to('.mark-icon', {
              rotate: 360,
              duration: 1,
              scale: 1.2,
              yoyo: true,
              repeat: -1,
              stagger: 0.2
    })
    .to()
    .fromTo()
    ...
    

    四、从一个位置精确移动到另一个位置

    1.可以使用uniapp里面的获取目标位置的坐标点

    //例如:
    //获取界面元素的基本信息
    async getDomElementBaseInfo(selector, pageObj) {
        return new Promise((resolve) => {
          let query = uni.createSelectorQuery().in(pageObj)
          query.select(selector).boundingClientRect()
          query.exec((res) => {
            if (res && res[0]) {
              //得到left、top、等位置信息
              resolve(res[0])
            } else {
              resolve(false)
            }
          })
        })
    }
    
    

    2.然后通过fromTo方法将物体移动到指定位置

    //示例代码
    //例如:
    let timeLine = gsap.timeline()
    timeLine
            .fromTo(
              currentSelector,//当前操作的对象的选择器
              {
                left: this.currentPos.left,
                top: this.currentPos.top
              },
              {
                left: this.targetPos.left,
                top: this.targetPos.top,
                duration: 0.5
              }
    )
    

    五、如何复位等待下一次动画执行

    通常我们在实际业务中,经常会用到在执行某个操作之后调用一下动画效果的这种场景,就是每触发一个动作执行一次动画效果,我们可以使用时间轴的seek方法和pause方法做到等待下一次的动画执行:

    //复位暂停在初始状态
    timeLine.seek(0).pause()
    
    //例如:
     let timeLine = gsap.timeline()
          timeLine.to('.refresh-icon', {
            rotate: 360,
            duration: 0.5,
            onComplete: () => {
              timeLine.seek(0).pause()
           }
    })
    

    六、备注

    官方文档英文的,看起来比较吃力,找到一个中文文档 ,对于基础部分的用法做了翻译,可以看看

    相关文章

      网友评论

          本文标题:uniapp中使用GSAP的注意事项

          本文链接:https://www.haomeiwen.com/subject/tjdfddtx.html