uniapp中使用GSAP的注意事项

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()
       }
})

六、备注

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容